win32com.client:不需要'保存更改' Word中的对话框

时间:2014-09-11 09:04:29

标签: python pywin32

我的任务很简单,我想打开一个单词模板,在单词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()

1 个答案:

答案 0 :(得分:0)

Doh,如果我试图关闭文档而不是应用程序,那会有所帮助。代码应该是self.wordDoc.Close()