python doc到docx的转换,comtypes.Documents.Open引发ValueError:NULL的COM指针访问

背景

我有一个应用程序,其中我想将.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配置设置:

  1. 开始 – > dcomcnfg.exe
  2. 电脑 – >我的电脑
  3. DCOM配置
  4. 选择Microsoft Word 97-2003文档 – >属性
  5. 选项卡标识,从启动用户更改为交互式用户