python doc 到 docx 转换,comtypes.Documents.Open 抛出 ValueError : NULL COM pointer access

标签 python django windows apache

背景

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

  1. 开始 -> dcomcnfg.exe
  2. 计算机 -> 我的电脑
  3. DCOM 配置
  4. 选择 Microsoft Word 97-2003 文档 -> 属性
  5. Tab Identity,从Launching User更改为Interactive User

关于python doc 到 docx 转换,comtypes.Documents.Open 抛出 ValueError : NULL COM pointer access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991609/

相关文章:

python - 在 Python 中声明私有(private)变量

Python SQS boto 不可靠或实现不好?

python - 如何将形状 (26400, 1, 0, 1, 2048) 的 numpy 数组 reshape 为形状 (26400, None, None, 2048)

windows - 在 Windows 上,应用程序在哪里存储 "I' m deactivated"?

java - 如何为 Java 应用程序创建安装程序?

python - 'NoneType' 对象没有属性 'shape'

python - 将值传递给另一个 View django

Django 中需要为特定元素而不是整个页面重新加载 JavaScript 函数

python - Django - 在 SQLite3 中设置foreignkey可延迟外键约束

windows - 如何在 Windows 中调试内核驱动程序崩溃?