背景
我有一个应用程序,我想在其中将 .doc 转换为 .docx。之后处理 .docx 文件以进行数据挖掘。最终用户使用 Web 界面访问此服务。 Web 应用程序是在 Django 1.6 中开发的。
要将 .doc 转换为 .docx,我们需要安装了 MS Office 的 Windows 平台。话虽如此,我有一个正在运行的 AWS Windows Server 2012 R2 实例(它是 Windows 64 位)。我将 Apache(64 位)与 mod_wsgi 和 Python 2.7.8(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)
但有趣的是,这个错误只在我使用网络界面时发生。也就是说,如果我通过 Apache 并调用此代码。
我尝试过直接从命令行作为脚本运行这段代码,它工作得很好。
当转换作为 Django View 的一部分发生时,我收到此错误。
提前致谢。
问候,
普拉塔姆什
最佳答案
如果您仍然遇到这个问题,这就是帮助我实现完全相同的 AWS(Win2012)-Apache(64bit)-Django 布局的原因:
更改 DCOM 配置设置:
- 开始 -> dcomcnfg.exe
- 计算机 -> 我的电脑
- DCOM 配置
- 选择 Microsoft Word 97-2003 文档 -> 属性
- Tab Identity,从Launching User更改为Interactive User
关于python doc 到 docx 转换,comtypes.Documents.Open 抛出 ValueError : NULL COM pointer access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991609/