python excle 建立了两个表但是数据只写入到第一个表

问题遇到的现象和发生背景

建立了两个表但是数据全都出现在第一个表中

img


LP01那些想让他在第二个库存信息的表中出现

问题相关代码,请勿粘贴截图
    def pushButton_create(self):
        send_data1 = {}  # 创建字典
        send_data2 = {}
        send_data3 = {}
        send_data4 = {}  # 创建字典
        send_data1['data'] = self.ui.textEdit_name.toPlainText()+ "\r\n"# 数据等于lineEdit_name的值 简单文本用toPlainText()
        send_data2['data'] = self.ui.textEdit_come.toPlainText()+ "\r\n"   # 数据等于lineEdit_name的值 简单文本用toPlainText()
        send_data3['data'] = self.ui.textEdit_bl.toPlainText()  + "\r\n"   # 数据等于lineEdit_name的值 简单文本用toPlainText()
        send_data4['data'] = self.ui.textEdit_lp.toPlainText()  + "\r\n" # 数据等于lineEdit_name的值 简单文本用toPlainText()
        data = send_data1['data']+send_data2['data']+send_data3['data']+send_data4['data']
        print(data)
        #文件在桌面文件里
        path = os.path.join(os.path.expanduser('~'), "Desktop")  # 文件在桌面
        xlname='批次管理.xlsx'
        f2 = path + "\\" + "批次管理"
        xlname=f2+"\\"+xlname
        if not os.path.exists(f2):
            os.makedirs(f2)
        self.opt = open(xlname, 'w')  # 创建文件写入模式,w原有的内容被覆盖  不想被覆盖 w变成a a为追加模式
        self.Serial_QTread_Function.opt = self.opt

       #sheet1
        workbook = openpyxl.Workbook()
        titles = [u'物料信息', u'来料数',u'次品', u'良品']
        worksheet=workbook.active
        worksheet.cell(1, 1).value=titles[0]
        worksheet.cell(1, 2).value=titles[1]
        worksheet.cell(1, 3).value=titles[2]
        worksheet.cell(1, 4).value=titles[3]
        workbook.save(xlname)
        workbook.close()
        workbook = openpyxl.load_workbook(xlname)
        worksheet=workbook.active
        rc=2
        tmp_c=badNum
        tmp_l=goodNum
        tmp_c_c=1
        tmp_l_c=1
        for i in range(allNum):
            tmp_flag=0
            now = datetime.now()#定义时钟 在命名时使用
            date_time = now.strftime("%Y%m%d")
            if tmp_c_c<=tmp_c:
                worksheet.cell(rc, 3).value="MSCP"+date_time+ str(tmp_c_c).zfill(4)
                tmp_flag=1
                tmp_c_c+=1
            if tmp_l_c<=tmp_l:
                worksheet.cell(rc, 4).value="MSLP"+date_time+ str(tmp_l_c).zfill(4)
                tmp_flag=1
                tmp_l_c+=1
            if tmp_flag==0:
                break
            worksheet.cell(rc, 1).value=send_data1['data']
            worksheet.cell(rc, 2).value=allNum
            rc+=1

        #第二个表
        worksheet2 = workbook.create_sheet('库存信息')
        worksheet2.append(["日期", "物料信息",'来料数','良品','次品'])
        worksheet2 = workbook.active
        rc = worksheet2.max_row
        rc += 1
        tmp_cp = int(send_data3['data'])
        tmp_lp = int(send_data4['data'])
        tmp_cp_cp = 1
        tmp_lp_cp = 1
        for i in range(int(send_data2['data'])):
            worksheet2.cell(rc, 1).value = send_data1['data']
            worksheet2.cell(rc, 2).value = send_data2['data']
            if tmp_cp_cp <= tmp_cp:
                worksheet2.cell(rc, 3).value = "C" + str(tmp_cp_cp).zfill(2)
                tmp_cp_cp += 1
            if tmp_lp_cp <= tmp_lp:
                worksheet2.cell(rc, 4).value = "L" + str(tmp_lp_cp).zfill(2)
                tmp_lp_cp += 1
            rc += 1
        workbook.save(xlname)
        workbook.close()

运行结果及报错内容

img


命名和写入表头都没问题 定义成 worksheet2

我的解答思路和尝试过的方法
我想要达到的结果

        worksheet2 = workbook.active
        rc = worksheet2.max_row

这个参照第一张表来做呢,这里读取的rc 应该就是不对了,打印看看

问题可能出在这里

worksheet2 = workbook.create_sheet('库存信息')
        worksheet2.append(["日期", "物料信息",'来料数','良品','次品'])
        worksheet2 = workbook.active

这没有获取到第二张表,切换表格有以下两种方式,你试试
worksheet2 = workbook.get_sheet_by_name(u"库存信息")
worksheet2 = workbook['库存信息']

我认为问题出在代码的第57~60行:

#第二个表
 worksheet2 = workbook.create_sheet('库存信息')
 worksheet2.append(["日期", "物料信息",'来料数','良品','次品'])
 worksheet2 = workbook.active

Worksheet2两次赋值后, 实际指向了workbook的默认sheet.
将第60行注释掉试试.

问题是第60行worksheet2 = workbook.active,将这行代码去掉即可。

workbook.active 官方解释:

This is set to 0 by default. Unless you modify its value, you will always get the first worksheet by using this method.
该工作簿的默认索引是从0开始。除非索引值被修改,否则使用这个方法将总是获取第一个工作表。

打印看看70行 if tmp_cp_cp <= tmp_cp:
两个参数的值,可能是没运行