Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Вниз

Дайте идею как корректно вписать длинную строку в ячейки Excel   Найти похожие ветки 

 
Карелин Артем ©   (2006-06-22 10:54) [0]

Что есть:
1)Ексель, с которым общаемся по COM. Язык программирования не важен.
2)Документ ексельный.
3)Строка данных, которая может не уместиться в 1 ячейке Екселя (а может уместиться). Для нее выделено 2 ячейки, которые нельзя обьединять. Шрифт, ширина ячеек изначально неизвестны.
Дайте идею, как лучше разорвать строку по словам так, чтобы длина кусков строки в екселе не превышала длину ячейки Екселя.
При этом всякое шаманство типа перенос средствами екселя внутри ячейки или автоподбор ширины исключается.
//Документ "поползет" если размер ячейки ексель поменяет


 
Andy BitOff ©   (2006-06-22 13:10) [1]

Пока "Шрифт, ширина ячеек изначально неизвестны." ничего не сделаешь. Узнавате их и используйте стандартные средства для разрыва строки.


 
Lexer ©   (2006-06-22 13:40) [2]

а может всё-таки поставить перенос по словам и установить требуемую высоту, ячейки,и все те строки которые вылезают за нужный диапазон визуально обрежуться (документ не поползёт)?


 
Карелин Артем ©   (2006-06-22 13:56) [3]


> Lexer ©   (22.06.06 13:40) [2]

Это шаманство ;)


 
Danilka ©   (2006-06-22 14:13) [4]

Если для Дельфи.
Есть вин-апишные ф-ии, причем, даже вроде обернутые TCanvas-ом, которые возращают длинну и ширину текста заданного шрифта/размера и т.д. в пикселах.
Давно было, а сейчас нет под ругой Дельфи, чтоб проверить и точно сказать.
В дельфях используются всякими Грид-ами, кажись, можно и в стандартном Гриде ДБГриде подсмотреть.


 
Карелин Артем ©   (2006-06-22 16:04) [5]


> Danilka ©   (22.06.06 14:13) [4]

хмм.. Делать шрифт "канваса" как в екселе, пересчитывать длину ячейки в пиксели и делать wordwrap на основе данных канваса как крайний вариант на крайний случай сгодится.
P.S. в кавычках написал, потому как ушел я с программирования на дельфи.


 
Думкин ©   (2006-06-23 05:55) [6]

> Карелин Артем ©   (22.06.06 16:04) [5]

Не надо "канваса", если в языке доступны функции Виндов, то этого достаточно.
DrawText,DT_CALCRECT - но с курсивом есть проблемы.

И все-таки смущает высказанное в [1] замечание.


 
Карелин Артем ©   (2006-06-23 07:37) [7]


> Думкин ©   (23.06.06 05:55) [6]
> И все-таки смущает высказанное в [1] замечание.


Есть шаблон, который юзеры могут подгонять под свои нужды. И соответственно менять длину/форматирование ячеек, в которые надо вписать данные.
Можно конечно решить все проблемы программистов просто запретив юзерам менять параметры нужных ячеек, но програмные продукты создаются для пользователей и должны быть удобны для них в первую очередь.


 
Думкин ©   (2006-06-23 07:40) [8]

> Карелин Артем ©   (23.06.06 07:37) [7]

Понятно. Но в момент вписывания они же уже известны? :)
И странно - им дали 2 ячейки для создания одной надписи, а объеденить их нельзя. Не порядок.


 
Карелин Артем ©   (2006-06-23 08:01) [9]


> Думкин ©   (23.06.06 07:40) [8]
> Понятно. Но в момент вписывания они же уже известны? :)

В момент вписывания конечно :) Но не в момент написания программы :)))

> И странно - им дали 2 ячейки для создания одной надписи,
>  а объеденить их нельзя. Не порядок.

Зачастую они идут через строку, либо каждая из этих ячеек уже представляет собой результат обьединения нескольких горизонтально расположенных ячеек.
Пример:

Владелец ________________________(тут 3 ячейки объеденены в одну, сюда пишем первую часть строки)
(узенькая строка с примечаниями мелкими буквами)
___________________________________(тут 5 ячеек объеденены в одну, пишем вторую часть строки)


 
antonn ©   (2006-06-23 10:18) [10]

Думкин ©   (23.06.06 5:55) [6]
будет канвас, можно решить и курсив:)


 
Ломброзо ©   (2006-06-23 11:43) [11]

В топку COM.
Воспользуйтесь функцией возможности загрузки в ёксель HTML-файла (начиная с Office97) или XML (в последних версиях). Ей-б-гу, гемора на порядок меньше, и код на порядок понятнее. Эксель переносы сам сделает как положено.


 
Карелин Артем ©   (2006-06-23 12:17) [12]


> Ломброзо ©   (23.06.06 11:43) [11]

Обоснуй с учетом того, что простые юзеры типа 18-летних девочек или 50-летних бухгалтерш должны иметь возможность самостоятельно и без напрягов редактировать шаблон, форматировать...
И как тогда будет выглядеть заполнение владельца в [9]?? Сомневаюсь что "Эксель переносы сам сделает как положено".


 
Ломброзо ©   (2006-06-23 12:30) [13]

Ну, я просто посоветовал.
Во-первых, по моему богатому опыту, все потуги привить пользователю навыки программиста заканчиваются тем, что жертва включает дурака и предпочитает вызывать службу сопровождения и поддержки.
Во-вторых, императивное программирование в Excel через OLE - это просто <нецензурное слово>: медленно, неудобно, негибко, чревато утечками памяти и подвисанием COM-сервера. Гораздо изящнее декларативно описать источник данных (запрос, параметры запроса), получить данные в XML, спарить с XSL и отдать клиенту в броузер или Excel. Я замерял скорость. Выходит быстрее раз в 10.


 
Danilka ©   (2006-06-23 12:41) [14]

[12] Карелин Артем ©   (23.06.06 12:17)
> простые юзеры типа 18-летних девочек или 50-летних бухгалтерш
> должны иметь возможность самостоятельно и без напрягов редактировать
> шаблон, форматировать...

Мне просто искреннее, по-человечески жаль тебя...
:)


 
Карелин Артем ©   (2006-06-23 13:05) [15]


> Ломброзо ©   (23.06.06 12:30) [13]

Я тоже измерял скорость. 3600 страниц мелким шрифтом с форматированием и еще подгонкой под размер страницы(что еще на 60% меньше размер текста делает) выводится за 1,5 мин на старом буке с 98 виндой.
У меня тоже опыт очень богатый с екселем. Одна из прог лучшая в стране :)
Неудобно - субьективный параметр. Мне очень удобно.
Негибко... Такой гибкости я еще не встречал.
Утечки памяти и зависания были в 97 и 2000 офисах без сервиспаков.

> Danilka ©   (23.06.06 12:41) [14]

Пробьемся, это ерунда.


 
Карелин Артем ©   (2006-06-23 13:08) [16]


> Ломброзо ©   (23.06.06 12:30) [13]

Так офисом все должны уметь владеть. Не смогут сами поправить файл, так суппорт справится, либо на курсы по офису принудительно. А программисту забот меньше, потому как при этом ничего править не надо ;)


 
Ломброзо ©   (2006-06-23 13:21) [17]

Я тоже измерял скорость. 3600 страниц мелким шрифтом с форматированием и еще подгонкой под размер страницы(что еще на 60% меньше размер текста делает) выводится за 1,5 мин на старом буке с 98 виндой.

Работаете через Invoke или используете раннее связывание?


 
Карелин Артем ©   (2006-06-23 13:33) [18]


> Ломброзо ©   (23.06.06 13:21) [17]

Данные загоняю в двумерный вариантный массив предварительно и одной операцией вставляю этот массив в нужные ячейки.
Если интересны подробности, могу скинуть ссылку на код на C# или процедурку на Дельфи.


 
Danilka ©   (2006-06-23 13:41) [19]

[15] Карелин Артем ©   (23.06.06 13:05)
Я, собственно, к тому, что очень нежелательно всем без разбору юзерам разрешать редактировать шаблоны. Только самым продвинутым, да и то...
Черевато, когда одна 18-и или 50-и летняя что-то подправит, у всех остальных все сломаецца, а виноват, как обычно, программист будет.

[18] Карелин Артем ©   (23.06.06 13:33)
Интересный вариант, не пробовал его.
У меня наивысшая скорострельность из-под 1с-ки достигалась записью данных в ДБФ-ку, открытие ее из-под экселя и форматирование.


 
Карелин Артем ©   (2006-06-23 13:44) [20]


> Danilka ©   (23.06.06 13:41) [19]

У нее одной и сломаецца. :)) И она же будет виновата ;)


 
Ломброзо ©   (2006-06-23 13:56) [21]

Ха. Просто вставить данные без форматирования - это шибко просто. А вот когда нужно что-то выделить курсивом, что-то жирным, что-то цветом, где-то вставить картинку - тут и начинается веселье.
Дилемма такова. Если использовать подключение библиотеки типов и раннее связвание - то скорость формирования отчёта возрастает, но алгоритм нужно хардкодить и всякий раз производить перекомпиляцию модуля. Если нужно часто менять логику или внешний вид отчёта, целесообразно использовать позднее связывание и выносить код в сценарии, но для того, чтобы добиться приемлемой скорости формирования отчета, нужно писать _аккуратно_ - заботиться об указателях, их кэшировании, их освобождении - в общем, проще удавиться.
Связка XML+XSL+ASP+сервер отчётов решает обе проблемы. Мегабайтные отчёты напрягают сервер, но несильно. Зато клиенту сразу попадает готовый отформатированный отчёт, который переваривается екселем за несколько секунд.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.014 c
15-1150194025
Crazy manager
2006-06-13 14:20
2006.07.23
Half-Life 2: Episode One


4-1144776129
RagimAtom
2006-04-11 21:22
2006.07.23
CryptoAPI


2-1151858549
МишаК
2006-07-02 20:42
2006.07.23
форма


4-1144643472
ponyol
2006-04-10 08:31
2006.07.23
Проблема с переключением языка в XP


15-1151147411
mio
2006-06-24 15:10
2006.07.23
Закрытие программы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский