我为修改现有工作表而编写的函数收到此错误,但类似的却没有:
DuplicateWorksheetName:Sheetname 'Example',忽略大小写,已在使用中。
有错误的函数:
def mod_quotes_sheet(workbook, read_worksheet, all_designs, quotes_list):
'''
Overwrites the worksheet to reflect new design options and
new and modified quotes.
'''
new_ws = workbook.add_worksheet(read_worksheet.name)
# Error occurs at this line.
# 1. New designs
# 1.1 Writing the header: May change with new designs
new_designs = all_designs.keys()
header = read_worksheet.row_values(0)
new_header = header.copy()
existing_designs = header[3:]
for new in new_designs:
if new not in existing_designs:
new_header += new
for h in range(len(new_header)):
new_ws.write(0, h, new_header[h])
# 2. Quotes
new_quotes = new_data(read_worksheet, quotes_list)
for r in range(len(new_quotes)):
# 1.2 If new designs not noted,
# existing quotes do not have new designs.
new_row = new_quotes[r]
row_length = len(new_row)
new_row_length = len(new_header)
if row_length < new_row_length:
row_diff = new_row_length - row_length
for d in range(row_diff):
new_row.append(0)
for c in range(len(new_row)):
new_ws.write(r+1, c, new_row[c])
return
没有错误的功能:
def mod_start_sheet(workbook, read_worksheet, new_data):
'''
Writes new data (2D list) into an existing start sheet.
'''
new_ws = workbook.add_worksheet(read_worksheet.name)
# Writing the header: Remains the same
header = read_worksheet.row_values(0)
for h in range(len(header)):
new_ws.write(0, h, header[h])
# Writing new data
for r in range(len(new_data)):
for c in range(len(new_data[r])):
new_ws.write(r+1, c, new_data[r][c])
return
如果这有任何帮助,这里是笔记本对象的初始化位置。mod_quotes_sheet
在rewrite_quote_sheet
,并且mod_start_sheet
在existing_start_sheet
。
def existing_workbook(path, sources, all_designs, quotes):
'''
Modifies an existing workbook.
'''
wb = xlwt.Workbook(path)
r_wb = xlrd.open_workbook(path)
wb_sheets = r_wb.sheet_names()
existing_start_sheet(wb, r_wb, "Names", sources)
existing_start_sheet(wb, r_wb, "Designs", all_designs)
# New quotes
for source in quotes.keys():
if source in wb_sheets:
quote_list = quotes[source]
rewrite_quote_sheet(wb, r_wb, source, all_designs, quote_list)
else:
quote_sheets(wb, all_designs, quotes)
# Existing quotes
start_sheet_names = ["Names", "Designs"]
for source in wb_sheets:
if source not in start_sheet_names and source not in quotes.keys():
quote_list = []
rewrite_quote_sheet(wb, r_wb, source, all_designs, quote_list)
wb.close()
return
我试图
new_ws = workbook.add_worksheet(read_worksheet.name)
用
wb_copy = copy(workbook)
new_ws = wb_copy.get_sheet(workbook.index(read_worksheet.name))
使用xlutils.copy
,但会导致新错误:AttributeError: 'Workbook' object has no attribute 'datemode', at this line wb_copy = copy(workbook)
。