2016-10-06 7 views
1

毎日私は古いExcel 95ファイルを与えられています。列には文字「L」と数百行までの列があります。 列 'B'は顧客の参照番号です。各顧客固有の番号です。 列 'I'はドル値です。CSVから生成されたディクショナリを使用して、Pythonを使用して.xlsxファイルの値を更新してください

毎朝、このファイルを使用して別のExcelファイルを更新する必要があります。私は顧客の参照番号を検索し、ドルの値を入力します。宛先ファイルの顧客参照とドル値の列は、それぞれ「D」と「E」です。

私はこれが自動化する良いプロジェクトになると思いました。研究といくつかの他のモジュールのインストール(そして、Pythonの本でボーリングのものを自動化すること)を読むと、私はまだ成功していません。

私はソースファイルをcsvとして保存してから、csvをインポートして、pythonで辞書に変換します。これはうまく動作し、私はそれに満足しています。

私の問題は、宛先ファイルに値を書き込もうとしています。私はエラーがなく、ファイルは最後に保存されますが、私が開いたときに値はそこにありません。なぜ私は分からない。どんな助けもありがとうございます。

import os, csv, openpyxl 

os.chdir('nameOfMyDirectory') 

print('What is the name of the source file?') 
sourceFileName = input() 

print('What is the key column?') 
keyColumn = int(input()) 

print('What is the value column?') 
valueColumn = int(input()) 

source = csv.reader(open(sourceFileName + '.csv')) 
sourceDictionary = {} 
for row in source: 
    key = row[keyColumn] 
    sourceDictionary[key] = row[8] 

上記のすべてがうまくいくように見えますが、対話型シェルを使用して、キー列を使用してドル値を印刷できます。私はそれが私が間違っているincageを含めてきましたが、これも変更する必要があります。問題があると思われる場所の下

print('What is the destination file name?') 
destinationFileName = input() 

wb = openpyxl.load_workbook(destinationFileName + '.xlsx') 
sheet = wb.get_sheet_by_name('nameOfMySheet') 

allRows = sheet.max_row 

for rowNum in range(2, allRows): #Start from row 2 and go to the end 
    membershipID = sheet.cell(row=rowNum, column=4).value 
    if membershipID in sourceDictionary: 
     sheet.cell(row=rowNum, column=5).value = sourceDictionary[membershipID] 


wb.save('newFileName.xlsx') 

プログラムの実行を(と思う)とエラーがないです。新しいファイルはファイル名とともに保存されますが、値は更新されず、まだ空です。

openpyxlカラム= 4の値が1または0から始まった値の1つだったかどうかはわかりませんでした。したがって、両方から数えてみましたが、どちらも動作しません。

ご迷惑をおかけして申し訳ございません。私はここにいくつかの例のデータを表示するように求めてきた


は、ソースファイルのcsvと宛先ファイルのxlsxと同じです2のGoogleスプレッドシートへのリンクです。お役に立てれば。 Link to sheets

'ソースファイルの列I'を使用して '宛先ファイルの列E'を更新しようとしています。私は顧客ID列を参照として使用します。

+0

はあなたが言っていることを示すためにデータをポストすることはできますか?具体的に現在のレイアウトと望ましい結果? – Parfait

+0

私の質問に2つのGoogleシートへのリンクを追加しました。お役に立てれば。 – Steven

+0

'if'節が' False'と評価されていると思われます。そこにprintステートメントのようなデバッグコードを入れてチェックすることができます。 –

答えて

0

単に型の不一致です。 csvから読み込んだキーはstringの形式で、Excelシートから読み取った値はfloatの値です。したがって、ifのステートメントは、常に2つに一致するfalseを返します。データ型を揃えるために

、文字列にあなたは整数にキャスト第一、第二forループで次の行を調整し、:

membershipID = str(int(sheet.cell(row=rowNum, column=4).value)) 
関連する問題