背景
我有一个应用程序,其中我应该将.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的代码
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视图的一部分发生时,我将得到这个错误。
提前谢谢。
致以敬意,
普拉萨梅什
发布于 2014-12-25 07:30:41
如果您仍然存在此问题,这正是帮助我完成完全相同的AWS(Win2012)-Apache(64位)-Django布局的原因:
更改DCOM Config设置:
发布于 2018-10-01 10:52:43
我在Flask/Dash (运行在Win2012上)也有类似的问题,解决方案是使用指向源代码的服务器(web)路径--即http://myserverapp/source/file.doc来读取文件,而不是C:\users...\file.doc。
https://stackoverflow.com/questions/26991609
复制相似问题