我有一个应用程序,其中我想将.doc转换为.docx。 之后,将处理.docx文件进行数据挖掘。 最终用户使用Web界面访问此服务。 Web应用程序是在Django 1.6中开发的。
要将.doc转换为.docx,我们需要安装MS Office的Windows平台。 话虽如此,我有一个AWS Windows Server 2012 R2实例(它是Windows 64位)运行。 我正在使用mod_wsgi和Python 2.7.8(64位)的Apache(64位)。
现在,这是我的代码将.doc转换为.docx
import tempfile, sys import comtypes, comtypes.client def convert(source): tmpfile = tempfile.NamedTemporaryFile(delete=False) tmpname = tmpfile.name + ".docx" tmpfile.close() os.unlink(tmpfile.name) try: comtypes.CoInitialize(); wordapp = comtypes.client.CreateObject('Word.Application') doc = wordapp.Documents.Open(source, ReadOnly=True) doc.SaveAs(tmpname, FileFormat=16) doc.Close() wordapp.Quit() except: print sys.exc_info() if os.path.exists(tmpname): return tmpname else: return None
我得到的错误是
(<type 'exceptions.ValueError'>, ValueError('NULL COM pointer access',), <traceback object at 0x00000085CE65AC08>)
在线
doc = wordapp.Documents.Open(source, ReadOnly=True)
但是有趣的是,这个错误只发生在我使用web界面的时候。 这是如果我通过Apache并调用此代码。
我试图直接从命令行运行这个代码作为脚本,它工作得很好。
当转换作为Django视图的一部分发生时,我得到这个错误。
提前致谢。
问候,
Prathamesh
如果你仍然有这个问题,这是什么帮助我完全相同的布局的AWS(Win2012)-Apache(64位)-Django:
更改DCOM配置设置: