使用python win32com无法在MS Word 2007中创建两个独立表格

2 投票
1 回答
4966 浏览
提问于 2025-04-16 11:08

我正在尝试用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

撰写回答