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

2024-10-01 17:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想覆盖现有excel文件中的特定单元格。我搜索并找到了这个答案,writing to existing workbook using 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.工作簿已经存在于同一个类中的另一个方法中

^{pr2}$

我真的不知道这是什么意思,'.out'+os.path.splitext操作系统(self.filename文件名)[-1],但它似乎会导致修改后的文件以不同的名称保存在原始文件的同一路径中。在

运行程序后,一个新的Excel文件保存在原始文件的相同路径中,但是它以一个奇怪的名称保存为data.xlsx.out.xlsx,并且它不会打开。我想是这条线引起的。我删除了那一行是为了覆盖原始文件,不保存副本,但是当运行程序时,我无法打开原始文件,并且我收到一条错误消息,说文件无法打开,因为文件格式或扩展名无效。在

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

编辑:如果文件名是这样指定的,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

谢谢。在


Tags: 文件theselfgetossave副本filename
2条回答

您可以将excel文件另存为CSV文件,这意味着当它们被python打开时,它们以纯文本形式显示值,用逗号分隔,例如,在a到b列和第1到2行中有地址的电子表格如下所示

A1,B1
A2,B2

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

要解释有问题的线路:

(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

相关问题 更多 >

    热门问题