使用python写入特定的Excel工作表

我想覆盖已经存在的excel文件中的特定单元格。 我search并find了这个答案, 使用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],但它似乎导致修改后的文件保存在原始path用不同的名字。

运行程序后,一个新的Excel文件被保存在原始文件的相同path中,但是它以奇怪的名称保存为data.xlsx.out.xlsx ,并且不会打开。 我认为这是由'.out' + os.path.splitext(self.filename)[-1] 。 我删除该行以覆盖原来的文件,而不是保存副本,但是当运行该程序,我变得无法打开原始文件,我得到一个错误消息,说该文件无法打开,因为文件格式或扩展名无效。

我真正想要的是修改原始文件不创build修改后的副本。

编辑:SiHa的答案可以修改现有的文件,而不创build一个副本,如果只有文件名是这样指定的,

 bookwt.save(self.filename) 

而且,这样可以保存一个新的副本,

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

或者在我的代码在问题中提供的行。 但是,在所有这些方法中都存在相同的问题,在修改文件之后无法打开文件。 search后,我发现问题可以通过将原始文件的扩展名从.xlsx更改为.xls来解决。 做这个改变后,问题就解决了。 这是我find解决scheme的链接http://www.computing.net/answers/office/the-file-formatfile-extension-is-not-valid/19454.html

谢谢。

为了解释这个问题:

(self.filename + '.out'将`.out'连接到原始文件名的末尾。

+ os.path.splitext(self.filename)[-1])将文件名分割成['path', 'extension']列表,然后再次将最后一个元素(扩展名)连接到末尾。

所以你最终data.xlsx.out.xlsx

你应该可以使用bookwt.save(self.filename) ,尽pipe你可能会遇到错误,如果你仍然有文件打开阅读。 以类似上述方式创build副本可能更安全:

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

哪个应该给你data_out.xlsx

你可以将excel文件保存为CSV文件,这意味着当它们被python打开时,它们以逗号分隔的明文显示值,例如电子表格的地址在列a到b中,行1到2看起来像这样

 A1,B1 A2,B2 

这意味着你可以像普通文件一样编辑它们,而且excel仍然可以打开它们