Flask 通过 win32com 调用 Word 失败,求助

2019-01-06 22:19:25 +08:00
 JerryV2

如题,目的是通过 Flask 获取 Word 文件内容,格式可能是 .doc 或者 .docx

在 Flask 内通过 win32com 调用 Word 就会失败,不通过 Flask 就能正常调用。

应该是权限的原因吧? 应该怎么办?

第一次用 Flask,请大神轻拍~

5517 次点击
所在节点    Flask
19 条回复
JerryV2
2019-01-06 22:22:50 +08:00
@loading
https://www.v2ex.com/t/103107

看到你之前做过,还请不吝赐教,多谢
cz5424
2019-01-06 22:25:17 +08:00
发一下代码看看,单凭你描述解决不了问题
ysc3839
2019-01-07 00:45:04 +08:00
“在 Flask 内通过 win32com 调用 Word 就会失败”,起码说一下怎么个失败吧?
loading
2019-01-07 06:51:28 +08:00
@JerryV2 我按你描述的方法写没问题。

还是上次我的回复:


没代码,靠猜?
JerryV2
2019-01-07 09:20:58 +08:00
代码:

https://gist.github.com/xuqiang1015/e7f3480a2f5b7b9de30e2b9a44dc9687

昨天贴代码没贴上,系统怀疑我在做推广 orz
JerryV2
2019-01-07 09:30:33 +08:00
错误信息:

File "C:\Python33\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
127.0.0.1 - - [07/Jan/2019 09:29:56] "GET /DocText/?file=F:\Eclipse%E5%85%B3%E9%94%AE%E5%AD%97.doc HTTP/1.1" 500 -
julyclyde
2019-01-07 10:05:48 +08:00
随便一搜错误信息不就能找到答案么?你这动手能力太差了吧
JerryV2
2019-01-07 10:10:26 +08:00
@julyclyde

并没有随便一搜就找到答案,试过手动初始化 COM,并没有解决问题
julyclyde
2019-01-07 10:15:47 +08:00
@JerryV2 也许你用的搜索引擎和我不一样吧

试过手工初始化并没有解决问题,你至少得发一下这个做法之后有什么进展吧
JerryV2
2019-01-07 10:17:18 +08:00


pythoncom.CoInitialize()

放到 ReadDocText 函数内可以了,之前放在函数外面不可以

@julyclyde
julyclyde
2019-01-07 10:20:34 +08:00
@JerryV2 之前把 CoInitialize 放在函数外边不可以,是具体放在了哪个位置?
deadEgg
2019-01-07 10:22:05 +08:00
JerryV2
2019-01-07 10:27:40 +08:00
JerryV2
2019-01-07 10:31:46 +08:00
在此声明一下,我不是伸手党啊, 确实去 Google 了,但是没想到 COM 初始化的位置还会有影响,等有时间研究一下这背后的区别吧,或者哪位大神愿意解答一下,在此先表示感谢
julyclyde
2019-01-07 10:49:56 +08:00
你启动程序的时候是用 app.run 这段启动的,还是另外用了 gunicorn、uwsgi 之类的来启动的呢?
JerryV2
2019-01-07 10:57:22 +08:00
@julyclyde
通过 app.run 启动的,我贴的源码就是全部源码,通过 VSCode 调试启动
julyclyde
2019-01-07 11:08:57 +08:00
@JerryV2 我建议手工启动一下试试。调试启动不知道是不是环境不干净
ysc3839
2019-01-07 15:20:16 +08:00
试试在文件最开头加上

import sys
sys.coinit_flags = 0
JerryV2
2019-01-07 16:14:55 +08:00
@ysc3839

果然可以,厉害了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/524454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX