Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Работа с Word из VB6 Добавлено: 04.09.05 20:10  

Автор вопроса:  Чан | ICQ: 26977559 
В своей проге мне необходимо выводить текст в Word в виде таблицы. Подключаю Microsoft Word 9.0 Object Library и делаю примерно так:

Option Explicit

Public Sub main()
Dim appWord As New Word.Application
Dim doc1 As Word.Document, range1 As Word.Range
Dim table1 As Word.Table, row1 As Row
Dim t0 As Long

Set doc1 = appWord.Documents.Add

t0 = Timer
Set range1 = doc1.Range(0, 0)
Set table1 = doc1.Tables.Add(range1, 100, 5)
table1.Borders.Enable = False
For Each row1 In table1.Rows
    row1.Cells(1).Range.Text = row1.Index
    row1.Cells(2).Range.Text = row1.Index
    row1.Cells(3).Range.Text = row1.Index
    row1.Cells(4).Range.Text = row1.Index
    row1.Cells(5).Range.Text = row1.Index
    Debug.Print row1.Index
    DoEvents
Next row1

appWord.Visible = True
Debug.Print Timer - t0
End Sub

На PIII 650 МГц этот код выполняется около 12 сек, если сделать таблицу 255x5, то около 50 сек. Причём основное время уходит на присвоение значений ячейкам.
Можно ли как-то ускорить этот процесс?
Если нельзя, то есть ли какие-нибудь библиотеки/классы для экспорта в Word (*.doc)?

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 05.09.05 03:12
Генерь rtf, к примеру.


Или, как вариант, сделай из всех данных одну большую строку, между столбцами табуляторы, между строками enter'ы. Вставь её в word, потом вызови range.converttotable(vbtab)

Ответить

Номер ответа: 2
Автор ответа:
 Chan



ICQ: 26977559 

Вопросов: 3
Ответов: 14
 Web-сайт: chan-dzu.chat.ru
 Профиль | | #2
Добавлено: 06.09.05 19:36
Благодаря вот такому коду удалось достичь 9 сек на 100 строках и 35 сек на 255, но всё равно скорость остаётся неприемлимой.

Option Explicit

Public Sub main()
Dim appWord As New Word.Application
Dim doc1 As Word.Document, range1 As Word.Range
Dim table1 As Word.Table, row1 As Row
Dim t0 As Long, i As Long

Set doc1 = appWord.Documents.Add

t0 = Timer
Set range1 = doc1.Range(0, 0)
Set table1 = doc1.Tables.Add(range1, 100, 5)
table1.Borders.Enable = False
For i = table1.Rows.Count To 1 Step -1
    Set row1 = table1.Rows(i)
    Set range1 = row1.Cells(5).Range
    range1.Text = row1.Index
    range1.SetRange range1.Start - 1, range1.Start - 1
    range1.Text = row1.Index
    range1.SetRange range1.Start - 1, range1.Start - 1
    range1.Text = row1.Index
    range1.SetRange range1.Start - 1, range1.Start - 1
    range1.Text = row1.Index
    range1.SetRange range1.Start - 1, range1.Start - 1
    range1.Text = row1.Index
    ;Debug.Print row1.Index
    ;DoEvents
Next i

appWord.Visible = True
Debug.Print Timer - t0
End Sub


Но твой способ намного быстрее. Спасибо.

Ответить

Номер ответа: 3
Автор ответа:
 wazzup



Вопросов: 0
Ответов: 1
 Профиль | | #3 Добавлено: 18.10.06 22:37
привет
помогите плиз.Нужно сделать рамку с плавными углами а по контуру пустить слова. Жизненно важно,пожалуйста помогите!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам