15.01.2007, 10:43 | #1 |
MCTS
|
Размножение таблицы Word
Помогите, пожалуйста, размножить обычную word таблицу в шаблоне *.dot. Наверняка кто-нибудь сталкивался с проблемой отгружать данные в отчет word, причем количество этих данных не было известно, и данные эти должны находится в разных таблицах в Word документе... На данный момент есть два решения:
1) выделение необходимой таблицы в шаблоне, а затем обычное копирование и вставка через буфер обмена. НЕ ГОДИТСЯ - поскольку затирается буфер обмена. 2) сделать шаблон с n-м количеством этих самых таблиц, а затем после подсчета количества данных удалить с конца ненужное количество. НЕ ГОДИТСЯ - поскольку количество данных во многих случаях остается неизвестным и может превысить количество уже созданных в шаблоне. К тому же черезчур громоздко... Вообщем, помогите найти более изящный способ |
|
15.01.2007, 11:08 | #2 |
Участник
|
можно сделать макрос в шаблоне, который будет создавать нужную таблицу с нужным форматированием в нужном месте, ну и вызывать его по мере необходимости
|
|
15.01.2007, 11:50 | #4 |
MCTS
|
так в том и дело, что ничего создавать не нужно, просто напросто необходимо копирнуть существующую таблицу (будет вернее сказать некоторый Range, в который входит она, еще 2 таблицы и некоторые другие элементы) после нее самой несколько раз, и насчет макроса, ведь можно его же написать в коде X++... К тому же создавать ту самую таблицу по элементарным кирпичикам - это гора работы: невидимые линии, и т.п., и еще копировать нужно не одну таблицу а целых три поэтому такое решение усложняется трижды, кроме таблиц, там еще и линия с надписью ниже...
2 Belugin честно говоря даже не знаю, помоему это даже более громоздко чем куча таблиц, с последующим удалением... |
|
15.01.2007, 12:11 | #5 |
Участник
|
Я в-общем так, для обозначения возможности.
С точки зрения "громоздко" есть 2 аспекта: *Разработка: можно позльзоваться XSLT внутри ворда, при этом использовать ворд как визуальный редактор - в некоторых случаях так может *при генерации отчета ворд вообще не нужен - только XSLT процессор. Таким образом, всё пролисходит очень быстро и может осуществляться вообще без наличия ворда - например, на сервере Но недостатков тоже полно |
|
15.01.2007, 12:27 | #6 |
MCTS
|
А как насчет варианта сохранить нужные данные из буфера обмена, покопировать таблички, восстановить данные в буфер обмена?
|
|
15.01.2007, 12:58 | #7 |
MCTS
|
2 E@gle: То есть, что то типа Buffer.Push() и Buffer.Pop()? Была такая идея, если в курсе как реализовать, то подскажите пожалуйста
2 Belugin: спасибо, обязательно попробую эту штуку... таким образом, если это возможно (сохр/вост) буфера, то выходит, это единственное простейшее решение... Последний раз редактировалось Eldar9x; 15.01.2007 в 13:10. |
|
15.01.2007, 13:25 | #8 |
MCTS
|
Тогда вопрос: вам надо сохранить весь буфер обмена или какой-нибудь определенный тип (формат) буфера?
Как выпонимаете сохранить весь будет сложнее. |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
15.01.2007, 13:39 | #9 |
MCTS
|
в буфере обмена может быть все что угодно, отсюда вывод: либо сохранить весь, либо сделать так Сохранение/восстановление буфера обмена думаю это и есть решение
|
|
15.01.2007, 13:51 | #10 |
MCTS
|
только что вспомнил, буфер обмена - опасная вещица, представляете что будет, если во время формирования отчета пользователь нажмет Copy в другом приложении...
|
|
15.01.2007, 14:17 | #11 |
MCTS
|
Наша компания достаточно широко использует буфер обмена при формировании отчетов (кстати и вашу задачу решали именно таким способом). Многими такими отчетами пользуются уже больше года. Нареканий пока нет.
Если найдете решение в обход буфера обмена - напишите. |
|
15.01.2007, 14:41 | #12 |
MCTS
|
решили оставить метод с удалением лишних таблиц, + применение эвристики Судя по всему, если не учитывать поэлементное рисование необходимого интервала (что весьма муторно), то это наиболее оптимальное решение. Хотя, конечно, и не очень красивое, но что поделаешь...
|
|
16.01.2007, 10:13 | #13 |
Участник
|
Вот именно для того, чтоб не было "так муторно" предлагаю делать именно макрос в шаблоне. Так попроще создать новую таблицу по образу и подобию уже существующей.
|
|
16.01.2007, 10:20 | #14 |
Пенсионер
|
Я на форуме уже говорил как мы решали эту проблемму:
Надо просто создать файл Word из шаблона, и просто этот же шаблин вставлять в этот файл столько раз сколько нужно экземпляров... но придется доработать методы работы с таблицами Word на предмет навигации с использованием параметров: таблица, строка, столбец
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
16.01.2007, 10:51 | #15 |
MCTS
|
2 Ashir: а таким образом можно копировать целые интервалы в документе?, если да, то, пожалуйста напишите как (или дайте ссылку)
2 blokva: а поподробней насчет этого способа, как реализовать? |
|
16.01.2007, 12:19 | #16 |
Участник
|
Я имею в виду не копирование а создание (ведь любое копирование будет осуществляться через буфер) новой таблички по заранее определённому формату. Этот подхед не универсален, но в данном слечае может подойти.
Начните запись макроса и создайте таблицу с требуемым форматированием. Потом этот макрос просто надо будет вызвать из AxЫ. Последний раз редактировалось Ashir; 16.01.2007 в 12:27. |
|
16.01.2007, 13:44 | #17 |
Пенсионер
|
Цитата:
2. создаем на его основе файл, получаем таблицу 1, которую заполняем данными 3 вставляем в данный файл тот же файл шаблона функцией ComWordDocument_RU.insertDocFile 4. в результате получаем таблицу 2 в этом же файле, которую тоже заполняем. 5. и т.д. с п.3 5. для заполнения каждой таблицы необходима правильная навигация, т.к. букмарки не подходят из-за того, что они всегда будут ссылаться на 1-ую таблицу. 6. для этого надо создать свои методы вставления данных в ячейки таблицы (для того, чтобы понять как, посмотрите методы getPosEndOfTable и tableInsertValue того же класса) зы: я просто не могу найти код, который мы делали в 2.5
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 16.01.2007 в 13:51. |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
16.01.2007, 15:29 | #18 |
MCTS
|
и (или)
Б. (ежегодный дополнительный оплачиваемый отпуск, учебный, без сохранения заработной платы и другие (указать)) На календарных дней с по |
|
16.01.2007, 15:36 | #19 |
MCTS
|
вообщем вот такой интервал должен копироваться, причем Б меняется, кроме того над строкой должна быть линия и еще 3 таблицы со сложным форматированием (здесь не удалось отобразить). Как все это создавать по формату и как вообще создать такой формат даже не представляю...
2 blokva: действительно, решение лишено перегруженности, но есть один минус: придется таскать два шаблона для одного документа. По-поводу навигации нет проблем, ведь достаточно знать порядковый номер первой таблицы... |
|
16.01.2007, 16:16 | #20 |
Пенсионер
|
Цитата:
Сообщение от Eldar9x
вообщем вот такой интервал должен копироваться, причем Б меняется, кроме того над строкой должна быть линия и еще 3 таблицы со сложным форматированием (здесь не удалось отобразить). Как все это создавать по формату и как вообще создать такой формат даже не представляю...
2 blokva: действительно, решение лишено перегруженности, но есть один минус: придется таскать два шаблона для одного документа. По-поводу навигации нет проблем, ведь достаточно знать порядковый номер первой таблицы...
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|