Microsoft Word 2007 VSTO, создать таблицу вне слова? - PullRequest
2 голосов
/ 19 января 2010

Я использую VSTO для заполнения данных в таблице в шаблоне Microsoft Word 2007. Объем данных варьируется, и заполнение множества страниц (+50) занимает много времени.

Код, который я использую для создания таблицы:

Word.Table table = doc.Tables.Add(tablePosition, 
                                  numberOfRows, 
                                  8, 
                                  ref System.Reflection.Missing.Value, 
                                  ref System.Reflection.Missing.Value);

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

Microsot.Office.Interop.Word.Table - абстрактный класс, поэтому я не могу этого сделать

Word.Table table = new Word.Table();

что было бы удобно.

Есть ли другие возможности при использовании VSTO?

Ответы [ 2 ]

1 голос
/ 09 марта 2010
  • Попробуйте создать таблицу в формате буфера обмена HTML, добавьте в буфер обмена и вставьте.
  • Попробуйте создать таблицу в HTML и вставить ее.
  • Попробуйте создать строку с разделителями табуляции и символом новой строки для каждой записи. Вставить строку с выделением, преобразовать выделение в таблицу, используя вкладки в качестве разделителя.
  • Создание шаблона в формате XML, преобразование данных с помощью Xslt в документ Word XML.
  • Создайте шаблон как «Слияние почты в каталоге», выполните слияние почты с данными.

В зависимости от ваших требований, я рекомендую использовать технику слияния, поскольку пользователь может редактировать шаблон, и слияния выполняются быстро, особенно если у вас более 50 страниц.

0 голосов
/ 19 января 2010

Хотя я делаю аналогичные вещи с LabVIEW7.1 и Word2000, проблема похожа. Я не нашел способ вставить блоки данных (таблицы) с помощью одной команды. Существует даже проблема, если вставлять отдельные элементы слишком быстро для слова, он иногда зависает, и его необходимо убить, чтобы решить эту проблему. К сожалению, нет ни события, ни свойства, которое сигнализирует о способности слова принять следующую команду и набор данных - по крайней мере, я не смог ничего найти. Так как это в тестовом секвенсоре, у меня есть время, чтобы передать результаты теста в слово с задержками, достаточно большими, чтобы предположить, что слово снова готово, когда отправляется следующая часть данных ...

...