Страница: 1 |
Вопрос: Работа с Word из VB6 | Добавлено: 04.09.05 20:10 |
Автор вопроса: ![]() |
В своей проге мне необходимо выводить текст в 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 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #1 | Добавлено: 05.09.05 03:12 |
Генерь rtf, к примеру.
Или, как вариант, сделай из всех данных одну большую строку, между столбцами табуляторы, между строками enter'ы. Вставь её в word, потом вызови range.converttotable(vbtab) |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 26977559 Вопросов: 3 Ответов: 14 |
Web-сайт: Профиль | Цитата | #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 ![]() ![]() Next i appWord.Visible = True Debug.Print Timer - t0 End Sub Но твой способ намного быстрее. Спасибо. |
Номер ответа: 3 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1 |
Профиль | Цитата | #3 | Добавлено: 18.10.06 22:37 |
привет
помогите плиз.Нужно сделать рамку с плавными углами а по контуру пустить слова. Жизненно важно,пожалуйста помогите! |
Страница: 1 |
|