def create_sheet(sheetNum):
wb = openpyxl.load_workbook(excelName)
#读取已存在的sheet名称
sheet_names = wb.sheetnames
sheetname = '图像列表_'+str(sheetNum)
if sheetname not in sheet_names :
#创建sheet对应的sheet
#打开已经存在的表格
#wb=openpyxl.load_workbook(excelName)
#创建sheet
wb.create_sheet('图像列表_'+str(sheetNum))
sheet = wb.active
#wb.save(excelName)
return sheet
def Image_WritePictureInfo():
rownumber = 4
for i in range(MAX_SHEET):
wb = openpyxl.load_workbook(excelName)
sheet_names = wb.sheetnames
#想要新规的sheet名称
sheetname = '图像列表_'+str(i)
#print((sheetname))
#判断sheet是否已经存在
if sheetname not in sheet_names :
sheet = create_sheet(i);
for j in range(len(Sheetlist[i])):
#写入数据
sheet.cell(row = rownumber, column = 1).value = Sheetlist[i][j].csImageID
sheet.cell(row = rownumber, column = 1).value = Sheetlist[i][j].csFunctionName
sheet.cell(row = rownumber, column = 2).value = Sheetlist[i][j].csOldWidthSize
sheet.cell(row = rownumber, column = 3).value = Sheetlist[i][j].csOldHighSize
sheet.cell(row = rownumber, column = 4).value = Sheetlist[i][j].csImageFolderPath
sheet.cell(row = rownumber, column = 5).value = Sheetlist[i][j].csImageName
rownumber += 1
wb.save(excelName)
######我尝试过在create_sheet直接ws = wb.create_sheet('图像列表_'+str(sheetNum)),ws作为返回值来作为需要操作的表格
第一个方法加一个参数wb。不能以load的方式去创建一个wb,这样就相当于两个程序同时打开同一个Excel,就无法达到你的预期
你确定最后保存和写入的是一个文件吗?你的函数里面有太多的全局变量,函数的作用是保护变量的作用域,而不是将全局变量直接拿来使用,应该将变量传入函数。比如:create_sheet可以将要修改的workbook作为参数传入,而不是直接从文件中读取。而你的第二个函数Image_WritePictureInfo虽然重新读取了文件,但是当你调用sheet = create_sheet(i)时,又重新创建了一个workbook对象,在后面的循环里面你对sheet的写入实际是在写入create_sheet函数新创建的对象,而wb.save(excelName)是保存你在Image_WritePictureInfo函数中创建的对象。建议:
create_sheet改成:create_sheet(wb,sheetNum)把里面wb = openpyxl.load_workbook(excelName)删除
你这sheet应该都创建不成功肯定写不进去吧