2017-06-24 11 views
0

私はPythonの教科書とビデオチュートリアルを使って自動化することができますが、私はautopopulateする必要がある仕事で大きなプロジェクトがあります。私たちは見つけることができません。個別に記入するのではなく、これまでに学んだことを使いたいと思います。私は章で飛び抜けなければなりませんでしたが、コードの最後の行をどのように過ぎ去らせるかを考え出すことはできません。 基本的には、Word文書フォームテンプレートの特定の領域に入力する必要がある4列の情報を含むExcelシートがあります。 docという単語の中に「AAAA、BBBB ...」という文字があります。pythonを使用してword.docxをExcelファイルから自動入力

import openpyxl,os,docx,re 

os.chdir(r'C:\Users\MYUSERNAME\OneDrive\Documents\Programming\ChemInv') 

wb = openpyxl.load_workbook('cheminv.xlsx') 
sheet = wb.get_sheet_by_name('Sheet1') 
doc = docx.Document('ChemPurchaseForm_.docx') 
fillObj = ('AAAA','BBBB','CCCC','DDDD') 

for a in range(1,61): 
    for b in range(1,5): 
     fill = sheet.cell(row=a,column=b).value 
     for x in range(len(fillObj)): 
      inputRegex = re.compile(fillObj[x]) 
      inputRegex.sub(fill,doc) 

     doc.save('ChemPurcaseForm_' + fill + '.docx') 

私はこのエラーを取得しています:

Traceback (most recent call last): 
    File "C:/Users/MYUSERNAME/OneDrive/Documents/Programming/ChemInv/autofill.py", line 
15, in <module> 
    inputRegex.sub(fill,doc) 
TypeError: expected string or bytes-like object 

私は「埋める」変数または「DOC」変数のいずれかがバイナリまたは文字列値ではありませんと仮定していますか?

ありがとうございました!

答えて

0

これをデバッグするには、バイナリ値または文字列値ではない値を調べる必要があります。便利な方法は、各値に対してprintステートメントを追加することです。たとえば、あなたは、DOCXモジュールの動作を正確にどのように私にはわからない

print(fill) 
print(doc) 
print(type(fill)) 
print(type(doc)) 

を試みるかもしれませんが、二つの仮説は私に発生します。

  1. doc

    sub機能のための適切なタイプではありません。オブジェクトを別のものにキャストしなければなりません。そうであれば、別の方法でオブジェクトにアクセスする必要があります。
  2. fillNoneです。これは簡単に修正することができます。つまり、Excelドキュメントを正しく読まないということです。 docxファイルのドキュメントを読む

、それはバイトまたは文字列オブジェクト、またはバイトまたは文字列と互換性のあるオブジェクトのように、それは見ていないので、私は、1の方に傾くなどsub方法は、することができませんそれを適切に作動させる。それが正しいのであれば、必要なことを理解するのに役立つ詳細については、python-docxのドキュメントを読んでください。私はあなたの書類にどのようなプロパティが存在するかを調べるでしょう。テキストに直接アクセスするためのものがあるようです。

幸運を祈る!

関連する問題