openpyxl 在 for 循环中创建不正确的工作表名称

问题描述 投票:0回答:2

这是我的代码:

import os
import sys
my_path = 'C:/Users/S.Fazlollahzadeh/Desktop/shell-scripts/test only/excel'
os.chdir(my_path)
sys.path.append(my_path)
from openpyxl import Workbook

names = ['name1', 'name2', 'name3', 'name4']
wb = Workbook()
ws = wb.active

for name in names:
        ws.title = name
        wb.create_sheet(name)

wb.save("sample.xlsx")
quit()

工作表名称为:

name4
name11
name21
name31
name41

虽然应该是:

name1
name2
name3
name4

我做错了什么?

python
2个回答
0
投票

问题是您将活动工作表重命名为您的名字之一,然后尝试创建一个具有相同名称的工作表 (

wb.create_sheet(name)
),而是生成一个带有
{name}1
的工作表。您也没有切换活动工作表

您可以删除行

ws.title = name
并从工作簿中删除原始活动工作表(如果脚本中有更多工作,请切换到其他工作表)

from openpyxl import Workbook
names = ['name1', 'name2', 'name3', 'name4']
wb = Workbook()

for name in names:
    wb.create_sheet(name)

del wb["Sheet"] # delete original active sheet
ws = wb.active # get the active sheet here if more work
# alternative ws = wb['name1']

print(wb._sheets)
# <Worksheet "name1">
# <Worksheet "name2">
# <Worksheet "name3">
# <Worksheet "name4">

0
投票

问题在于您正在使用已存在的名称创建工作表。

创建工作表的正确方法是以下之一:

wb = Workbook()
ws_first = wb.active

for name in names:
    
    ws = wb.copy_worksheet(ws_first)
    ws.title = name


wb.save("sample1.xlsx")

或:

wb = Workbook()
ws_first = wb.active


for name in names:    
    ws = wb.create_sheet(name)

wb.save("sample2.xlsx")
© www.soinside.com 2019 - 2024. All rights reserved.