Быстрый экспорт больших отчетов в MS Word

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Ответить
Аватара пользователя
Disillusioned
Активный участник
Сообщения: 420
Зарегистрирован: 15 июл 2004, 15:12
Используемое ПО: Lotsia PDM PLUS
Откуда: Подольск
Контактная информация:

Быстрый экспорт больших отчетов в MS Word

Сообщение Disillusioned »

Экспорт отчетов большого объема в MS Word занимает много времени. В особо тяжелых случаях >10 минут.
Сами понимаете - 10 минут - это никуда не годится...
Нашли способ ускорить этот процесс в ~50 раз.
В двух словах (куски кода приведены для иллюстрации подхода):
1. Сохраняем отчет в виде html файла

Код: Выделить всё

hhh=LsRpt.SaveAs(name_html,"HTMLTable",false)
2. Слегка редактируем текст html (добавлем тэг с указанием кодировки и чистим лишнее в области заголовка таблицы).

Код: Выделить всё

Set File = file_system.GetFile(name_html)
Set TextStream = File.OpenAsTextStream(1)
Text=TextStream.ReadAll()
TextStream.Close
'текст html, вплоть до описания заголовка первого столбца "№" заменяем на нужный нам
pos_st=InStr(1,text,"<TH>№") 
text = "<title>Lotsia PDM Plus</title> "+_
          "<meta http-equiv="""Content-Type""" content="""text/html; charset=windows-1251"""> "+_
          "<TABLE border=1 cellspacing=-1> "+_
          "<TR> "+_
           mid(text,pos_st)
Set TextStream = File.OpenAsTextStream(2)
TextStream.WriteLine line
TextStream.WriteLine Text
TextStream.Save
TextStream.Close
3. Вставляем html файл в Word

Код: Выделить всё

AcDoc.Range.InsertFile(name_html)
4. Форматируем вставленную таблицу (ширина столбцов, шрифт заголовков.....)

Код: Выделить всё

         AcDoc.Sections(1).Range.Tables(1).Rows.LeftIndent = -4
         AcDoc.Sections(1).Range.Tables(1).Rows.AllowBreakAcrossPages = False
         AcDoc.Sections(1).Range.Tables(1).AllowAutoFit = False
         AcDoc.Sections(1).Range.Tables(1).PreferredWidthType = 1
         AcDoc.Sections(1).Range.Tables(1).PreferredWidth=0
         AcDoc.Sections(1).Range.Tables(1).Cell(1,7).Range.Text="Разд."
         AcDoc.Sections(1).Range.Tables(1).Rows(1).HeadingFormat = True
         AcDoc.Sections(1).Range.Tables(1).Columns(1).PreferredWidthType = 3
         AcDoc.Sections(1).Range.Tables(1).Columns(1).PreferredWidth = 34
         AcDoc.Sections(1).Range.Tables(1).Columns(2).PreferredWidthType = 3
         AcDoc.Sections(1).Range.Tables(1).Columns(2).PreferredWidth = 39
         AcDoc.Sections(1).Range.Tables(1).Columns(3).PreferredWidthType = 3
         AcDoc.Sections(1).Range.Tables(1).Columns(3).PreferredWidth = 88
         AcDoc.Sections(1).Range.Tables(1).Columns(4).PreferredWidthType = 3
P/S Полагаю, что этот метод подойдет не для всякого отчета, но для простых таблиц сойдет вполне.
Ах и с ними невозможно
И без них никак нельзя
Ответить