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

Posted

技术标签:

【中文标题】将数据从一个 Excel 工作表复制到另一个 Excel 工作表【英文标题】:Copy data from one excel sheet to another excel sheet 【发布时间】:2018-07-22 18:24:24 【问题描述】:

我正在编写此脚本以在 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()

【问题讨论】:

做你自己的工作。或者至少尝试一下。 你不能要求别人为你做代码。当你被困在某个地方时,你能做的就是寻求帮助。你可以从那里得到帮助link。 感谢您的 cmets 和动力。当然,我自己完成了编码,并且在某种程度上按照我想要的方式工作。现在我需要一点帮助。我怎么能这么问?我将分享我的代码 @Jay 几乎可以重新打开了。如果您只是指定 什么 不起作用,或者解释您期望得到什么以及您实际得到什么,那么它会很好 您好 ItamarG3,感谢您的信息,今天我们讨论了程序的工作方式将发生变化。所以我会先尝试自己进行更改并查看结果,如果我卡在某个地方,我会再次重新发布代码。不过非常感谢您的支持。 【参考方案1】:

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

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

类似这样的 sn-p 使用字符串插值:

def open_file(path):
   row_in_output = 1
   wbk = xlsxwriter.Workbook('or.xlsx')
   ws = wbk.add_worksheet()
   [...]
          ws.write("Arow_in_output", row_value[0])
          ws.write("Brow_in_output", row_value[1])
          ws.write("Crow_in_output", row_value[2])
          row = row + 1
          row_in_output = row_in_output + 1

          wbk.close()

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

【讨论】:

您好,我在启动后收到此错误 - ValueError: invalid literal for int() with base 10: 'Arow_in_output'。我试图转换为字符串,但它不起作用,我也尝试使用浮点数。但是当我将搜索号放在引号中时,程序会执行但它不会写入目标文件 这表明将表示浮点数的字符串传递给 int 变量。您可以检查该行之前的 row_in_output 值是多少吗?也请添加您的 python 版本。 嗨,我刚刚检查过,你是对的,它给出了 row_value 的浮点值。 我使用的是 python 3.6 ['Resistor 1', 'Rs-Components', 10.0, 36.0, '', ''] ------ 这是行值的打印输出,数字 36 是在源 excel 文件中搜索的数字,其余是与之关联的数据。

以上是关于将数据从一个 Excel 工作表复制到另一个 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

如何使用 Excel VBA 将特定行从多个工作表复制到另一个工作表?

如何在 MS Excel 中将特定数据从一个 Excel 工作表传输到另一个工作表?

使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿

使用 Python(和 DataNitro)将单元格从一个 Excel 工作簿中的特定工作表复制到另一个 Excel 工作簿中的特定工作表