Как ускорить процес експорта даных в Word

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
WXS
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.06.2007 (Ср) 8:39

Как ускорить процес експорта даных в Word

Сообщение WXS » 06.06.2007 (Ср) 9:13

Прога довольно большую чать даних переносит в Word (большие таблицы) как ускорить этот процес. процес переноса 115 строчек занял больше 2 минут, а их может быть несколько тисяч.
Програма тестировалась на целероне 950 мгц, а юзать её будут на машине послабее как быть?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.06.2007 (Ср) 9:38

Нужно видеть, где ты накосячил, вслепую может быть только один совет - RTFM. У меня генерация документа, описывающего пару десятков таблиц БД, занимала ту же пару минут. Правда на машине побыстрее. Кстати, генератор валяется где-то проектах, вроде даже с исходниками.

Короче, код в студию.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.06.2007 (Ср) 9:40

WXS, раз.


tag_warning
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 06.06.2007 (Ср) 9:41

Прога довольно большую чать даних переносит в Word (большие таблицы) как ускорить этот процес. процес переноса 115 строчек занял больше 2 минут, а их может быть несколько тисяч.
Програма тестировалась на целероне 950 мгц, а юзать её будут на машине послабее как быть?


Перед запуском переноса, загрузи в память процесс winword.exe
Или хотябы просто запусти экземпляр Word`а. Увидишь, что процесс экспорта займет несколько секунд.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.06.2007 (Ср) 9:43

Ну без кода конечно сложно помочь, однако можно сказать что экспорт в Word в принципе штука небыстрая. Ускорить можно, установив невидимость Word, например.
Весь мир матрица, а мы в нем потоки байтов!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.06.2007 (Ср) 9:44

Хм, странный совет. Как может происходить экспорт в ворд без запуска самого ворда? Все же происходит через его объектную модель.
Лучший способ понять что-то самому — объяснить это другому.

WXS
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.06.2007 (Ср) 8:39

Сообщение WXS » 07.06.2007 (Чт) 11:49

Вот код, невидимость ворда ставлю при Class_Initialize()

Public Function printRecord(sINF As ClientData, room As String, Period As String, NumRec As Integer) As Byte
Dim TableWord As Word.Table
Dim lastTab As Integer, lastRow As Integer

On Error GoTo errLab:
DocWord.Select
With DocWord.Application.Selection
lastTab = .Tables.Count
Set TableWord = DocWord.Tables.Item(lastTab)
If TableWord.Columns.Count < 12 Then
DocWord.Close
printRecord = 1
Exit Function
End If
TableWord.Rows.Add
lastRow = TableWord.Rows.Count
TableWord.Rows(lastRow).Range.Font.Bold = False
TableWord.Cell(lastRow, 1).Range.Text = NumRec
TableWord.Cell(lastRow, 2).Range.Text = room
TableWord.Cell(lastRow, 3).Range.Text = Period
TableWord.Cell(lastRow, 4).Range.Text = sINF.F & " " & sINF.I & " " & sINF.O
TableWord.Cell(lastRow, 5).Range.Text = sINF.wasBorn
TableWord.Cell(lastRow, 6).Range.Text = sINF.LivePlace
TableWord.Cell(lastRow, 7).Range.Text = sINF.Document
TableWord.Cell(lastRow, 8).Range.Text = sINF.DocumentNumber
TableWord.Cell(lastRow, 9).Range.Text = sINF.DocumentGiven
TableWord.Cell(lastRow, 10).Range.Text = sINF.BorderCrossPlace & " " & sINF.DateCrossBorder
TableWord.Cell(lastRow, 11).Range.Text = sINF.LivePlace
TableWord.Cell(lastRow, 12).Range.Text = sINF.Nacional
.EndOf
End With
printRecord = 0
Exit Function
errLab:
MsgBox "Unexpected Error in obj WordExport Metod printRecord" & vbNewLine & Err.number & vbNewLine & Err.Description, vbCritical, softName
printRecord = 1
End Function

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.06.2007 (Чт) 12:22

Заполнение таким методом действительно занимает много времени.
На форуме был пример заполнения документа кодом RTF, что на один-два порядка быстрее.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.06.2007 (Чт) 12:25

И это так тормозит?

З.Ы. Используй тэг для оформления кода в своем посте
Весь мир матрица, а мы в нем потоки байтов!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.06.2007 (Чт) 12:36

!Viper!, подобное заполнение и форматирование двухстраничной таблицы на 9 столбцов занимало у меня до полуминуты.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.06.2007 (Чт) 15:13

Amed писал(а):!Viper!, подобное заполнение и форматирование двухстраничной таблицы на 9 столбцов занимало у меня до полуминуты.
, вроде у автора нет форматирования, только заполнение таблицы. Однако спорить не буду... Через RTF действительно на порядок быстрее. В свое время замучился создавать отчеты в Word с кучей графики и различными стилями форматирования и перешел на генерацию RTF-файла. Скорость возросла неимоверно...

З.Ы. Надо как-нить довести до ума и выложить кирпичик для работы с RTF файлами
Весь мир матрица, а мы в нем потоки байтов!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.06.2007 (Чт) 15:44

Варианты:

1. InsertDatabase Method (я бы покопал его, если нужен именно Word с его объектной моделью).
2. XML-модель (Word при этом даром не нужен).
3. RTF-формат.
4. Нормальный генератор отчетов (тот же ActiveReports).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 47

    TopList