为什么 openpyxl 使用名称 "Sheet1" 创建工作表?

why openpyxl creating worksheet with name"Sheet1"?

openpyxl 默认创建名称为 "Sheet1" 的传播 sheet 即使我指定 sheet 应该使用索引 0 创建。 我确定这不是一个重复的问题。 文档说 openpyxl 支持 2010 MS Office 版本,但我使用的是 office365 pro。 您能提供任何帮助或建议吗?

请注意,独立代码对我来说工作正常,但当将相同代码与其他代码集成时,我遇到了下述问题。 我尝试了很多东西。由于我是 Python 的新手,看来有些事情我不知道。 如果我指定索引 1,则会创建两个作品 sheet:一个名称为 Sheet,另一个名称为我提供的。如果我提供索引 0,则只会创建一个名为 Sheet1 的 Sheet。

下面的代码应该在索引 0 处创建工作 sheet,名称为 test

            for r in range(3, rowcount + 1):
                for c in range(1, columncount + 1):
                    final_path = first_part + str(r) + second_part + str(c) + third_part
                    table_data = self.driver.find_element_by_xpath(final_path).text

                    fname = r"{}_{}.xlsx".format(str(i[1]), str(i[2]))
                    if (os.path.exists(fname)):
                        workbook = openpyxl.load_workbook(fname)
                        worksheet = workbook[fname]
                    else:
                        workbook = Workbook()
                        worksheet= workbook.create_sheet(fname,0)
                        #worksheet = workbook.active
                        #worksheet.title = fname
                    worksheet.cell(row=r,column=c).value = table_data
                    workbook.save(fname)
当您第一次调用 Workbook() 函数时,

openpyxl 创建一个名为 "Sheet" 的单个 sheet。这只是模块的一种烦人的怪癖。我发现处理它的最干净的方法是重命名 sheet 而不是尝试创建一个新的

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "My sheet name"
wb.save("Test.xlsx")

将创建一个 xlsx 文件,其中包含一个名为 "My sheet name" 的作品sheet。 当您使用索引 0 调用 create_sheet 时,您只需在原始 sheet 之前插入一个新的 sheet。

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "My sheet name"
ws2 = wb.create_sheet("Another Name", 0)
wb.save("Test.xlsx")

将创建一个 xlsx,其中第一个 sheet 称为 "Another name",第二个 sheet 称为 "My sheet name"。如果您要处理一个 sheet 工作簿,最简单的方法是使用 title.

您可以获得 sheet 并像这样删除 :

sheet = wb1.get_sheet_by_name('Sheet')

wb1.remove_sheet(sheet)

您可以通过以下方式删除此 sheet:

from openpyxl import Workbook

workbook = Workbook()
del workbook['Sheet']