Tips(碰到的主要问题):

  • doc转docx
  • “无效的类的字符串”
  • DCOM组件拒绝访问
  • NoneType has no attribute SaveAs

简要的业务过程:把Word文档(.doc,不是.docx)上传至服务器(用IIS+Django+wfastcgi部署),并读取文档中的内容与图片信息。
即这个过程中需要把doc文档另存为docx的格式,然后再去读取这个docx的文档(没有找到能直接读取doc文档的方法)。第二步其实做的其实比较顺利,因为docx已是一个开放的标准,通过python-docx库即可实现,需要的只是花时间熟悉下它的API。
所以这边重点说下doc文档另存为docx的爬坑过程(不能直接改文件扩展名的,不能用的,不然早。。。):
1、使用win32com的方式
参考:https://www.cnblogs.com/Jacklovely/p/5743868.html
这种方式就是通过Com组件去加载Word.Application:

from win32com import client as wc #引入组件pythoncom.CoInitialize()
word = wc.Dispatch('Word.Application')
#word = wc.Dispatch('kwps.Application') #金山WPS的程序服务名称
doc = word.Documents.Open(filepath)  # 要被转换的doc文件,(完整的目标路径)
doc.SaveAs(filepath+'x', 12)  # 转化后路径下的文件,12表示docx类型
doc.Close()
word.Quit()

爬坑过程:

  • 本地的开发模式一切正常,但部署到服务器IIS8.5上问题就来了,报“无效的类的字符串”。 原因:没有安装Office/Word。。。
  • 开始想着office太大了而且又是收费(服务器上装个盗版的总感觉哪不对),况且只是想要个“另存为”而已,所以就装个免费的WPS,然后把代码中的服务名换成了’kwps.Application’,但还是一样的错(跟Word一样,本地开发模式都正常)。
  • 没办法,那就下个试用版的Office测下。装上之后运行,是没这个错了,但报“拒绝访问”,在系统日志中找到“XXX授予针对 CLSID 为 {000209FF-0000-0000-C000-000000000046},不可用 的 COM 服务器应用程序的 本地 激活 权限。此安全权限可以使用组件服务管理工具进行修改。”,即用户权限问题。又查一堆资料,主要是修改组件服务–>“DCOM配置”下的WORD权限。参考资料:http://blog.163.com/xiangyue119@126/blog/static/1651455322009242214739/
  • 上述配置完后,又报”NoneType has no attribute SaveAs“的错。即Word.Application貌似是找到了,但没有被正确的创建。所以上面的那段代码不能用了。继续再找资料,最后终于解决了:

2、使用LibreOffice程序的soffice.exe命令
PS:到LibreOffice官网下载,也是OpenOffice,文件也不大,就是界面不好用。
参考:https://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html
好在开源有太多的好东西,安装(建议路径不要有空格和中文,以避免意外),然后在Python/Django程序中用如下方法调用:

import subprocess#执行LibreOffice下的soffice命令
#shell=True这个参数一定要有,即调用系统的cmd执行,否则会卡在这不成功
#其他就是指定原文件、目标目录、要转换成的格式
subprocess.call(['C:/LibreOffice5/program/soffice.exe', '--headless', '--convert-to', 'docx', phyFilepath,'--outdir', os.path.split(phyFilepath)[0]], shell=True)

终于解决了,可以把Office/WPS卸载了。
后面有看到一个pandoc的库,但没看到doc to docx的demo,没去试,所以不确定能不能用。

PS:
读取docx文档的信息与图片等,可参考:
https://www.cnblogs.com/zhanghongfeng/p/7043412.html

Python/Django读取doc文档及在IIS8.5上部署所经历的波折及解决过程相关推荐

  1. python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...

    目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...

  2. python 爬取doc文档

    doc_href='https://resource.lzbank.com:18106/cportalFileServer/files//site/doc/pc/20201/12021/goods/2 ...

  3. python批量提取word指定内容到excel_(转)用python批量读取word文档并整理关键信息到excel表格...

    目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...

  4. php如何读取doc文档,php创建读取 word.doc文档

    创建文档; $html = "this is question"; for($i=1;$i<=3;$i++){ $word = new word(); $word->s ...

  5. java读取doc文档

    为什么80%的码农都做不了架构师?>>>    本文永久地址:https://my.oschina.net/bysu/blog/1528130 相关jar下载地址: http://m ...

  6. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】

    Python语言打开Excel文件? 一.安装xlrd模 到python官网下http://pypi.python.org/pypi/xlrd模块安装,前已经安装python 环境. 二.使用介 1. ...

  7. poi读取doc文档

    导包:https://blog.csdn.net/u012488504/article/details/52996611 读取表格及字段及段落数:https://blog.csdn.net/qq578 ...

  8. python将文档转换成pdf_Python实现将DOC文档转换为PDF的方法

    本文实例讲述了Python实现将DOC文档转换为PDF的方法.分享给大家供大家参考.具体实现方法如下: import sys, os from win32com.client import Dispa ...

  9. c语言读取word文件内容,c 读取word c 读取word文档

    c++如何读取word 基本步骤(1)创建)一个 MFC 的程序工程. 注意:在VC中对WORD进行操作需要在MFC AppWizard - Step 2 of4中的Automaiton选项上打上勾. ...

最新文章

  1. kafaka使用 消息队列_Java使用消息队列还是直接使用线程池ExecutorService异步处理?...
  2. [BZOJ3545][ONTAK2010]Peaks
  3. 简述linux常见的安全措施,六个常用的Linux安全基本措施
  4. asp.net实现bt和pt—tracker request
  5. mysql使用已有的数据库_使用SQL操作MySQL数据库
  6. 后基因组行为遗传学:从革命到常规(上)
  7. 谷歌地图解析及ArcEngine加载谷歌地图方法
  8. 计算机网络2021题库
  9. 为何延时函数不起作用?
  10. 费雪MOGAFX方程式是什么? -
  11. 新课程上线 | 学习使用 Kotlin 进行 Android 开发的最佳时机!
  12. [Done]FindBugs: boxing/unboxing to parse a primitive
  13. SQL实现筛选出连续3天登录用户与窗口函数
  14. 水印相机定位不准确怎么办_云联相机app下载-云联相机app安卓版下载v1.0.0
  15. 易语言miniblink交互教程——第一课 了解 miniblink
  16. 自动导出文件夹中所有的文件名列表 存为记事本格式
  17. Android中使用Toast弹出提示消息的优化(弹出多个吐丝提示)- 代码已封装可直接使用
  18. for(i=0,j=0;i10,j6;i++,j++)问题
  19. 黑盒测试用例设计方法-边界值分析法
  20. 日本长崎市着手为和平祈念像重新上色

热门文章

  1. layui树形懒加载_layui树形表格支持非异步和异步加载
  2. Buildroot 编译Tips
  3. 图像语义分割实践(五)优化器与学习率
  4. 一个网管员必备基本知识
  5. 养老院视频监控分析检测算法
  6. 第二张桌子上有一台计算机英语怎么说,pep三年级英语上册 Unit 2 单元教案 4[精品](17页)-原创力文档...
  7. 转贴:圣白树开花...
  8. 电商平台-异常模块的设计与架构
  9. 传统相声段子《卖布头》中的一段
  10. linux修改主机名不重启生效