Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Дайте идею как корректно вписать длинную строку в ячейки 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.042 c
2-1151616250
TBitMap
2006-06-30 01:24
2006.07.23
Как залить градиентом BitMap от одной точки до другой?


1-1149660164
Вася
2006-06-07 10:02
2006.07.23
Подключение ккм через rs232


15-1151396372
Dok
2006-06-27 12:19
2006.07.23
Кто как дебажит юникод?


15-1151300256
Ega23
2006-06-26 09:37
2006.07.23
С Днём рождения! 25 июня


15-1150505780
ВиндосМЕ
2006-06-17 04:56
2006.07.23
Майкрософт прекращает поддержку Windows XP Service Pack 1