Использование python win32com не может создать две отдельные таблицы в MS Word 2007 - PullRequest
2 голосов
/ 03 февраля 2011

Я пытаюсь создать несколько таблиц в новом документе Microsoft Word, используя Python. Я могу создать первую таблицу в порядке. Но я думаю, что у меня неправильно настроен объект COM Range. Это не указывает на конец. Первая таблица помещается перед «Здравствуйте, я текст!», Вторая таблица помещается в первую ячейку первой таблицы. Я думал, что возвращение Range из wordapp вернет полный диапазон, а затем свернет его, используя wdCollapseStart Enum, который, по моему мнению, равен 1. (Я не могу найти константы в Win32com Python.). Поэтому добавление таблицы в конец диапазона добавит ее в конец документа, но этого не происходит.

Есть идеи?

Спасибо, Тим

import win32com.client

wordapp = win32com.client.Dispatch("Word.Application") 
wordapp.Visible = 1 
worddoc = wordapp.Documents.Add()
worddoc.PageSetup.Orientation = 1 
worddoc.PageSetup.BookFoldPrinting = 1 
worddoc.Content.Font.Size = 11
worddoc.Content.Paragraphs.TabStops.Add (100)
worddoc.Content.Text = "Hello, I am a text!"

location = worddoc.Range()
location.Collapse(1)
location.Paragraphs.Add()
location.Collapse(1)
table = location.Tables.Add (location, 3, 4)
table.ApplyStyleHeadingRows = 1
table.AutoFormat(16)
table.Cell(1,1).Range.InsertAfter("Teacher")

location1 = worddoc.Range()
location1.Paragraphs.Add()
location1.Collapse(1)
table = location1.Tables.Add (location1, 3, 4)
table.ApplyStyleHeadingRows = 1
table.AutoFormat(16)
table.Cell(1,1).Range.InsertAfter("Teacher1")
worddoc.Content.MoveEnd
worddoc.Close() # Close the Word Document (a save-Dialog pops up)
wordapp.Quit() # Close the Word Application

1 Ответ

2 голосов
/ 03 марта 2011

Кажется, проблема в объекте Range, представляющем часть документа. В моем исходном коде объект Range содержит первую ячейку и начинается с первой ячейки, куда он будет вставлен. Вместо этого я хочу вставить в конце диапазона. Таким образом, я получил следующую замену кода для работы. Я переместил Collapse после вызова Add () и дал ему аргумент 0. Теперь для каждого объекта Range существует только один вызов Collapse.

location = worddoc.Range()
location.Paragraphs.Add()
location.Collapse(0)

Теперь код работает, я могу читать из базы данных и заполнять новые таблицы из каждой записи.

Тим

...