3

既存の 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

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

4

2 に答える 2

1

問題の行を説明するには:

(self.filename + '.out'元のファイル名の末尾に `.out' を連結することを意味します。

+ os.path.splitext(self.filename)[-1])ファイル名を のリストに分割し['path', 'extension']、最後の要素 (拡張子) を最後に再び連結することを意味します。

だからあなたはで終わるdata.xlsx.out.xlsx

を使用できるはずですがbookwt.save(self.filename)、読み取り用にファイルを開いたままにしておくと、エラーが発生する可能性があります。上記と同様の方法でコピーを作成する方が安全な場合があります。

filepath, fileext = os.path.splitext(self.filename)
bookwt.save(filepath + '_out' + fileext)

あなたに与えるべきものdata_out.xlsx

于 2015-07-13T13:35:50.220 に答える
0

Excel ファイルを CSV ファイルとして保存できます。これは、Python で開くと、値がコンマで区切られたプレーン テキストで表示されることを意味します。

A1,B1
A2,B2

つまり、通常のファイルと同じように編集でき、Excel で開くこともできます。

于 2015-07-13T12:57:02.750 に答える