我想使用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 )
答案 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/