|
Новый COMОбъект("Word.Application"); |
☑ |
0
alexei366
07.05.13
✎
15:14
|
Народ использую в качестве макета в одном месте документ word, вроде всё написал, чтоб переменные заменялись и табличные части делались.
Потом задумал фигарить в несколько потоков, имеется ввиду что обычно за раз формируются документов 5, и чтобы при нажатии на кнопку запускалось одновременно 5 фоновых заданий, каждое из которых заполняет свой макет.
Тут я коечо затестил, у меня в коде для размножения таблиц используются методы word Copy() и Paste(). Но эти методы работают с буфером, т.е берём два фоновых заданий и вот первое заносит в буфер строку таблицы из своего макета и успевает вставить 3 строки их 5, и тут второе фоновое задание копирует в буфер свою строку из своего макета, на выходе получим нормальный второй документ а в первом 4 и 5 строки будут левыми скопированные из другого макета и ясен фиг с другими параметрами.
Кто-нить сталкивался и как тогда решал такой вопрос, а кто не сталкивался посоветуйте чем заменить эти методы ворда.
|
|
1
mikecool
07.05.13
✎
15:17
|
недавно была тема про булзип принтер...
может там нашли решение многопоточности
|
|
2
alexei366
07.05.13
✎
15:28
|
(1) ты чего поиздеваться решил (моя тема была, многопоточности у него как понял нет, нужно реализовывть чтото между базами и булзипом чтоб настройки печати не путались)
А к данной теме это отношения в плане реализации не имеет.
|
|
3
mikecool
07.05.13
✎
15:29
|
(2) бугога, думаешь я всех запоминаю?
|
|
4
acsent
07.05.13
✎
15:32
|
откажись от использования буфера
|
|
5
alexei366
07.05.13
✎
15:33
|
(4) скажи чем заменить?
|
|
6
alexei366
07.05.13
✎
15:34
|
(3) да мне по барабану, у тя мысли есть как задачу эту решить?
|
|
7
mikecool
07.05.13
✎
15:35
|
(6) не использовать буфер )))
|
|
8
mikecool
07.05.13
✎
15:35
|
+7 считывай структуру и по ней рисуй новый док
|
|
9
alexei366
07.05.13
✎
15:41
|
(8) А пример приведёшь по считыванию структуры?
|
|
10
alexei366
07.05.13
✎
16:56
|
Блин в сандартной конфе также делают
ОбластьHandler.Document.Range(ОбластьHandler.Start, ОбластьHandler.End).Copy();
ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
// вставляем первый строку, по которому далее будет выполняться
// вставка новых строк с форматированием по первой
ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
ПозицияВставки = ActiveDocument.Range().End;
ОбластьВставки = ActiveDocument.Range(ПозицияВставки-1, ПозицияВставки-1);
ОбластьВставки.Paste();
ActiveDocument.Range(ПозицияВставки-2, ПозицияВставки-2).Delete();
|
|
11
alexei366
07.05.13
✎
22:28
|
АПП
|
|
12
alexei366
08.05.13
✎
10:41
|
Народ кто поможет если сможет)
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший