首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python到docx转换,comtypes.Documents.Open抛出ValueError: NULL COM指针访问

python到docx转换,comtypes.Documents.Open抛出ValueError: NULL COM指针访问
EN

Stack Overflow用户
提问于 2014-11-18 10:08:51
回答 2查看 1.7K关注 0票数 2

背景

我有一个应用程序,其中我应该将.doc转换为.docx。然后对.docx文件进行数据挖掘处理。最终用户使用web接口访问此服务.web应用程序是用Django 1.6开发的。

为了将.doc转换为.docx,我们需要安装MS的Windows。尽管如此,我有一个2012 R2实例(它是Windows64bit)正在运行。我正在与mod_wsgi和Python2.7.8(64位)一起使用Apache(64位)。

下面是我将.doc转换为.docx的代码

代码语言:javascript
复制
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

我所犯的错误是

代码语言:javascript
复制
(<type 'exceptions.ValueError'>, ValueError('NULL COM pointer access',), <traceback object at 0x00000085CE65AC08>)

在线

代码语言:javascript
复制
doc = wordapp.Documents.Open(source, ReadOnly=True)

但有趣的是,这个错误只发生在我使用web界面的时候。也就是说,如果我遍历Apache并调用此代码。

我尝试过将这段代码作为脚本直接从命令行运行,它运行得很好。

当转换作为Django视图的一部分发生时,我将得到这个错误。

提前谢谢。

致以敬意,

普拉萨梅什

EN

回答 2

Stack Overflow用户

发布于 2014-12-25 07:30:41

如果您仍然存在此问题,这正是帮助我完成完全相同的AWS(Win2012)-Apache(64位)-Django布局的原因:

更改DCOM Config设置:

  1. 启动-> dcomcnfg.exe
  2. 计算机->我的计算机
  3. DCOM Config
  4. 选择Microsoft 97-2003文档->属性
  5. 选项卡标识,从启动用户更改为交互式用户
票数 5
EN

Stack Overflow用户

发布于 2018-10-01 10:52:43

我在Flask/Dash (运行在Win2012上)也有类似的问题,解决方案是使用指向源代码的服务器(web)路径--即http://myserverapp/source/file.doc来读取文件,而不是C:\users...\file.doc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26991609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档