我怎么能用python生成格式良好的word文件(.DOC)?

时间:2013-12-13 10:24:42

标签: python

我想使用python生成一个word文件,其中包含MS Word生成的所有格式。

请建议任何可以帮助我实现这一目标的python模块。

代码尝试了例如:

http://sourceforge.net/projects/pywin32/下载pywin32-218.win32-py2.7以获取导入win32com.client并尝试以下示例。但是它给我的错误是 IndexError:列表索引超出sFileName = sys.argv [1]

的范围
import sys
import time
import string
import win32com.client

# --------------------------------------------------------------------
class CWordAutomate:
    """Encapsulates a winword com connection"""
    def __init__( self ):
        """construct: create OLE connection to winword"""
        self.m_obWord         = win32com.client.Dispatch( "Word.Application" )
        self.m_obDoc          = self.m_obWord.Documents.Add( ) # create new doc
        self.m_obWord.Visible = 1
        self.m_Sel            = self.m_obWord.Selection # get a selection

    def WriteLine( self, sTxt, sFont, lSize, bBold=0 ):
        """Write a line to winword"""
        self.m_Sel.Font.Name = sFont
        self.m_Sel.Font.Bold = bBold
        self.m_Sel.Font.Size = lSize
        self.m_Sel.TypeText( Text=sTxt + "\n"  )

# --------------------------------------------------------------------

# - open a file
sFileName  = sys.argv[1]
obFile     = file( sFileName, 'r+' )
sContent   = obFile.read()
obFile.close()
lstContent = sContent.splitlines()

# - display contents in word
obWord = CWordAutomate()
obWord.WriteLine( "Content of the file " + sFileName, "Times New Roman", 18, 1 )
for sLine in lstContent:
    obWord.WriteLine( sLine, "Courier New", 10  )
sLastMsg = time.strftime( "document generated on %c", time.localtime()  )
obWord.WriteLine( sLastMsg, "Times New Roman", 14, 0 )

1 个答案:

答案 0 :(得分:3)

我不会选择“.doc”文件,而是根据您的要求创建“.rtf”或“.docx”文件。 “.docx”文件定义得很好(如果您真的想手动创建,可以在Microsoft.com网站上的几千页左右)。

或者您可以自己在Word中创建一个,将一些占位符放入其中,使用Python解析文件(毕竟它是一个zip文件),使用lxml或类似的XML包来修改内容并以不同的名称保存

有一个很好的页面可以解释这个问题:http://virantha.com/2013/08/16/reading-and-writing-microsoft-word-docx-files-with-python/