如何使用Django/Python通过模板创建.doc文件
我正在写一个django应用程序,但有些事情我不知道该怎么做。假设你有一个用户数据库,还有一些.doc文件,你可能想把这些文件寄给那些用户(是邮寄信件,不是电子邮件)。我在想有没有办法自动从模板生成这些信件,并用我的用户数据库来填充一些信息,比如名字、地址等等?
我听说过“pod”这个python库,但我从来没有使用过。文档上似乎说要使用openoffice的模板,但我的模板是MS Word格式的。因为这些模板经常被只用MS Office的人更新,所以我现在有点无从下手。
任何帮助都将不胜感激。
J.
2 个回答
使用邮件合并很简单,你可以从Word文档中修改模板。
http://pbpython.com/python-word-template.html
你也可以把邮件合并和视图结合起来。这里有一个例子,其中my_template1是我的Word文档模板,里面有叫做name和title的字段。
def TestDocument2(request):
template = os.path.join(os.path.dirname(__file__),
'templates/my_template1.docx')
document = MailMerge(template)
document.merge(name='testcoy',
title = 'My title',
)
f = io.BytesIO()
document.write(f)
length = f.tell()
f.seek(0)
response = HttpResponse(
f.getvalue(),
content_type='application/vnd.openxmlformats-
officedocument.wordprocessingml.document'
)
response['Content-Disposition'] = 'attachment; filename=example.docx'
response['Content-Length'] = length
return response
根据不同的情况,有很多种方法可以做到这一点。下面是一些想法,按照难易程度从高到低排列。
微软的Word有一个功能叫做邮件合并,可以用来处理这个问题。你可以通过安装
pywin32
,用Python控制Word。这种方法和直接在Word里使用邮件合并是一样的。不过,这个操作需要在安装了Office的Windows电脑上进行,可能不适合你的服务器。你可以查看这个链接,或者在网上搜索“python mail merge”。OpenOffice使用Python作为宏语言(我记得是这样),并提供了一个API,叫做
Python-UNO
。你可以让OpenOffice把文件转换成它的格式,然后用pod
来进行邮件合并。你可以建议用户以更好的格式提供数据,比如使用OpenOffice模板。
你也可以从Django导出用户的数据,交给负责写模板的人,让他们自己进行邮件合并。
无论你选择哪种方法,这都不会很简单。