这是我的代码:
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
我做错了什么?
问题是您将活动工作表重命名为您的名字之一,然后尝试创建一个具有相同名称的工作表 (
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">
问题在于您正在使用已存在的名称创建工作表。
创建工作表的正确方法是以下之一:
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")