Форум: "Прочее";
Текущий архив: 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.515 c