我的任务很简单,我想打开一个单词模板,在单词doc中添加一些文本和表格,将其保存为PDF并退出单词。
由于野兽的性质,我不想以文字格式保存文档,并且为了全部工作,需要生成PDF而无需用户与单词交互。
可能有更好的方法来解决这个任务,但它们是我受约束的参数。另一个限制是它需要运行python 2.4 ...
我的出发点是Mark Hammonds easyword.py示例脚本,我已经完成了我想要的大部分工作,但是,有两个问题我似乎无法弄清楚,并且可能是相关的。
当我运行test()函数时,我得到了正确生成的输出PDF和Word文档,但是
1)我似乎无法“关闭”单词session / document 2)我最终得到一个恼人的对话框,询问我是否要保存更改。
该对话框是一个交易破坏者。
在我的退出函数中,Close()似乎没有被识别,并且我得到的任何工具都没有为'self.wordapp'提供任何方法,尽管self.wordapp.Quit()似乎工作(不会导致崩溃)。
我花了几个小时在互联网上寻找答案,并查看类似的Excel代码(格式化是我无法使用Excel的原因)无济于事。有没有人有任何想法?
我的测试代码的相关部分如下:
import win32com.client
MYDIR = 'somevalidpath'
class WordWrap:
''' Wrapper around Word documents to make them easy to build.
Has variables for the Applications, Document and Selection;
most methods add things at the end of the document
'''
def __init__(self, templatefile=None):
self.wordApp = win32com.client.gencache.EnsureDispatch('Word.Application')
if templatefile == None:
self.wordDoc = self.wordApp.Documents.Add()
else:
self.wordDoc = self.wordApp.Documents.Add(Template=templatefile)
#set up the selection
self.wordDoc.Range(0,0).Select()
self.wordSel = self.wordApp.Selection
def Quit(self):
self.wordApp.Close(SaveChanges=1)
self.wordApp.Quit()
def test():
'''
Test function for class
'''
outfilename = MYDIR + '\\pythonics_mgt_accounts.doc'
w = WordWrap(MYDIR + '\\pythonics.dot')
#w.show()
w.addStyledPara('Accounts for April', 'Title')
#first some text
w.addStyledPara("Chairman's Introduction", 'Heading 1')
w.addStyledPara(randomText(), 'Normal')
# now a table sections
w.addStyledPara("Sales Figures for Year To Date", 'Heading 1')
data = randomData()
w.addTable(data, 37) # style wdTableStyleProfessional
w.addText('\n\n')
# finally a chart, on the first page of a ready-made spreadsheet
w.addStyledPara("Cash Flow Projections", 'Heading 1')
w.addInlineExcelChart(MYDIR + '\\wordchart.xls', 'Cash Flow Forecast')
w.saveAs(outfilename)
print 'saved in', outfilename
# save as PDF, saveAs handles the file conversion, based on the file extension
# the file is not just being renamed and saved
new_name = outfilename.replace(".doc", r".pdf")
w.saveAs(new_name)
print 'saved in', new_name
w.Quit()
答案 0 :(得分:0)
Doh,如果我试图关闭文档而不是应用程序,那会有所帮助。代码应该是self.wordDoc.Close()