使用python win32com无法在MS Word 2007中创建两个独立表格
我正在尝试用Python在新的Microsoft Word文档中创建多个表格。我可以顺利创建第一个表格。但是我觉得我配置的COM Range对象有问题。它没有指向文档的末尾。第一个表格放在了“你好,我是一段文本!”之前,而第二个表格却放在了第一个表格的第一个单元格里。我原以为从wordapp返回一个Range对象会返回整个范围,然后用wdCollapseStart枚举将其折叠,我认为这个值是1。(我在Python的win32com中找不到这些常量。)所以,如果我把一个表格添加到Range的末尾,应该是把它加到文档的末尾,但实际上并没有这样做。
有什么想法吗?
谢谢,Tim
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
问题出在一个叫做范围(Range)的对象上,它代表了文档中的一部分。在我最开始的代码中,这个范围对象包含了第一个单元格,并且从第一个单元格开始插入内容。其实我想要的是在这个范围的末尾插入内容。所以我修改了代码,把“收缩”(Collapse)这个操作放在了添加(Add())之后,并且给它传了一个参数0。现在每个范围对象只有一个收缩操作。
location = worddoc.Range()
location.Paragraphs.Add()
location.Collapse(0)
现在代码可以正常工作了,我可以从数据库中读取数据,并根据每一条记录填充新的表格。
Tim