既存の Excel ファイルの特定のセルを上書きしたい。xlwt を使用して既存のワークブックに書き込み、この回答を検索して見つけました。私はそれを次のように適用しました、
def wrtite_to_excel (self):
#first I must open the specified excel file, sice open_file is in the same class, hence we can get it using self.sheet.
bookwt = copy(self.workbook)
sheetwt= bookwt.get_sheet(0)
#now, I must know the column that was estimated so I overwrite it,
colindex= self.columnBox.current() #returns the index of the estimated column
for i in range (1, self.grid.shape[0]):
if (str (self.sheet.cell_value(i,colindex)).lower () == self.missingBox.get().lower()):
#write the estimated value:
sheetwt.write (i, colindex, self.grid[i])
bookwt.save(self.filename + '.out' + os.path.splitext(self.filename)[-1])
このように、同じクラスの別のメソッドに self.workbook が既に存在することに注意してください。
def open_file (self, file_name):
try:
self.workbook = xlrd.open_workbook(file_name)
'.out' + os.path.splitext(self.filename)[-1] の意味がよくわかりませんが、変更されたファイルが元のファイルと同じパスに保存されるようです別の名前で。
プログラムを実行すると、新しい Excel ファイルが元のファイルと同じパスに保存されますが、奇妙な名前で保存され、data.xlsx.out.xlsx
開かれません。この行が原因だと思います'.out' + os.path.splitext(self.filename)[-1]
。元のファイルを上書きしてコピーを保存しないためにその行を削除しましたが、プログラムを実行すると元のファイルを開くことができなくなり、ファイル形式または拡張子が無効です。
私が本当に望んでいるのは、変更されたコピーを作成するのではなく、元のファイルを変更することです。
編集: SiHa の回答は、ファイル名のみがこのように指定されている場合、コピーを作成せずに既存のファイルを変更できます。
bookwt.save(self.filename)
そして、この方法で新しいコピーを保存できます。
filepath, fileext = os.path.splitext(self.filename)
bookwt.save(filepath + '_out' + fileext)
または、質問のコードで提供されている行として。ただし、これらの方法のすべてに、ファイルを変更した後に開くことができないという同じ問題が存在します。検索した結果、元のファイルの拡張子を .xlsx から .xls に変更することで問題を解決できることがわかりました。この変更を行った後、問題は解決しました。これは、解決策を見つけたリンクですhttp://www.computing.net/answers/office/the-file-formatfile-extension-is-not-valid/19454.html
ありがとうございました。