Python/Djangoはdoc文書およびIIS 8を読み取る.5の導入で経験した波乱と解決プロセス
Tips(主な問題): doc回転docx 「無効なクラスの文字列」 DCOMコンポーネントアクセス拒否 NoneType has no attribute SaveAs
簡単な業務過程:Wordドキュメント(.doc,.docxではない)をサーバにアップロードし(IIS+Django+wfastcgiで配置)、ドキュメントの内容と画像情報を読み取る.すなわち、この過程でdocドキュメントをdocxのフォーマットとして保存してから、このdocxのドキュメントを読み取る必要があります(docドキュメントを直接読み取る方法は見つかりません).第2のステップは、docxがオープンな標準であるため、python-docxライブラリで実現できます.必要なのは、APIを熟知するのに時間がかかるだけです.ここではdocドキュメントをdocxとして保存するピットプロセスに重点を置いています(ファイル拡張子を直接変更することはできません.使用できません.そうしないと早いです...):1、win 32 comの使い方参考:https://www.cnblogs.com/Jacklovely/p/5743868.htmlこの方法はComコンポーネントによってWordをロードすることである.Application:
ピットプロセス:ローカルの開発モデルはすべて正常であるが、サーバIIS 8に配備されている.5で質問が来て、「無効なクラスの文字列」と報告します.理由:Office/Wordがインストールされていません.. はofficeが大きすぎて有料だし(サーバーに海賊版が入っているのは何となく違う)、しかも「名前を付けて保存」が欲しいだけなので、無料のWPSを入れて、コードのサービス名を「kwps」に変えた.Application’ですが、同じ間違いです(Wordと同じように、ローカル開発モデルは正常です). 仕方がないので、次の試用版のOfficeで測ってみましょう.インストール後に実行するのは間違いありませんが、「アクセス拒否」を報告し、システムログに「XXXはCLSIDに対して{000209 FF-00000-00000-C 00000-00000-00000-00000,046}使用できない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プログラムで以下の方法で呼び出します.
やっと解決し、Office/WPSをアンインストールできるようになりました.後ろにpandocのライブラリが見えますが、doc to docxのdemoは見えず、試していないので、使えるかどうか分かりません.
PS:docxドキュメントの情報と画像などを読み、参考にすることができる:https://www.cnblogs.com/zhanghongfeng/p/7043412.html
簡単な業務過程:Wordドキュメント(.doc,.docxではない)をサーバにアップロードし(IIS+Django+wfastcgiで配置)、ドキュメントの内容と画像情報を読み取る.すなわち、この過程でdocドキュメントをdocxのフォーマットとして保存してから、このdocxのドキュメントを読み取る必要があります(docドキュメントを直接読み取る方法は見つかりません).第2のステップは、docxがオープンな標準であるため、python-docxライブラリで実現できます.必要なのは、APIを熟知するのに時間がかかるだけです.ここではdocドキュメントをdocxとして保存するピットプロセスに重点を置いています(ファイル拡張子を直接変更することはできません.使用できません.そうしないと早いです...):1、win 32 comの使い方参考: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()
ピットプロセス:
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