当前位置: 代码迷 >> python >> 将数据从一个 Excel 工作表复制到另一个 Excel 工作表
  详细解决方案

将数据从一个 Excel 工作表复制到另一个 Excel 工作表

热度:92   发布时间:2023-07-16 11:18:57.0

我正在编写此脚本以在 Excel 工作表中搜索一个数字,然后复制与该数字关联的整行,然后将其粘贴到一个新的 Excel 工作表中。 我想一行一行地复制相同的数据,就像我执行程序并保存它一样。 我试图通过在这个社区中搜索类似的问题,通过多种方式找出解决方案,但它不起作用。 下面是代码。

   import xlsxwriter
   import xlrd
   import xlwt
   import math

   def open_file(path):
       wb = xlrd.open_workbook(path)
       sheet = wb.sheet_by_index(0)

       for row_num in range(sheet.nrows):
           row_value = sheet.row_values(row_num)

           if row_value[2] == 68860:
              row = 0
              col = 0

              wbk = xlsxwriter.Workbook('or.xlsx')
              ws = wbk.add_worksheet()

              ws.write('A1', row_value[0])
              ws.write('B1', row_value[1])
              ws.write('C1', row_value[2])
              row = row + 1

              wbk.close()
   if __name__ == "__main__":
       path = "ord.xlsx"
       open_file(path)

任何建议,我将不胜感激。

编辑版本:我解决了我面临的问题。 现在,即使 .csv 文件已经打开,我也找不到防止中断串行端口连接的解决方案。 这里是对主要背景的解释。

实际上,最初的想法是通过扫描包含该特定号码的二维码来搜索该号码,如果找到该号码,则将信息写入新文件。 我通过将其写入 .csv 文件而不是 Xlsx 文件解决了这个问题。 现在一切正常,除了一个我无法破解的问题。 我已经通过串口连接了我的扫描仪。 会有很多用户随时打开和访问这个 .csv 文件。 当程序运行并关闭文件时,扫描部分工作正常。 但是当文件打开并且有人扫描任何二维码时,肯定会给出.csv文件打开的错误,并且整个程序会崩溃,我们必须一次又一次地运行它。 有没有可能如何防止程序爆发并即使文件打开也继续? 下面是我的代码。

if(ser.isOpen()):
ser.flushInput()
ser.flushOutput()

while(1):

    y = ser.readline().decode("ASCII")

    if (str(y)!=''):
        if (str(y)!='\r'):
            if (str(y)!='\n'):
                print(y)
                for row_num in range(sheet.nrows):

                    row_value = sheet.row_values(row_num)

                    if int(y) == int(row_value[0]):

                        if re.match("(11\d+)", row_value[0]) is not None:

                            file = open('Function.csv', 'a')
                            file.write(str(row_value[0])+";"+str(row_value[1])+"\n")

                            file.close()
                            ser.close()

您的代码中有一个但是。 每次您找到该值(并且它们可能是具有该值的多行,对吗?),您将写入新工作表。

如果您在循环之前打开目标工作簿,并跟踪您应该在旁边写入的行,则会将所有这些值放入单个工作表中。

像这个使用字符串插值的片段:

def open_file(path):
   row_in_output = 1
   wbk = xlsxwriter.Workbook('or.xlsx')
   ws = wbk.add_worksheet()
   [...]
          ws.write("A{row_in_output}", row_value[0])
          ws.write("B{row_in_output}", row_value[1])
          ws.write("C{row_in_output}", row_value[2])
          row = row + 1
          row_in_output = row_in_output + 1

          wbk.close()

PS 我正在使用 Python 3.6 插值语法。 如果您使用较旧的 Python,请相应地进行调整。

  相关解决方案