是否有一个 Excel 函数或脚本来查找和替换两个不同工作表中匹配的字段,并将其替换为第二个工作表中包含的另一个数据?

Posted

技术标签:

【中文标题】是否有一个 Excel 函数或脚本来查找和替换两个不同工作表中匹配的字段,并将其替换为第二个工作表中包含的另一个数据?【英文标题】:Is there an Excel function or a script to find and replace fields that match in two different sheets by another data contained in the second sheet? 【发布时间】:2015-07-28 12:04:45 【问题描述】:

今天是我第一次使用 Open Office,我需要一些帮助才能开始使用。 我的老板给了我两个 Excel 文件,其中包含我必须完成的数据。

第一张表在“A”中包含供应商代码和一堆其他列,其中包含我需要保留的产品尺寸等数据。 第二个在“A”中包含相同的供应商代码,但顺序不同,因为它们也有很多是双精度的,并且在“B”中有一个商店代码。

如果两张表中都与“A”中包含的代码匹配,我需要在第一张表中添加一个包含商店代码的列。

这不是我真正的工作,但由于夏天每个人都走了,他要求我去做。

我的问题是两张纸的长度都超过了 12 000 行,而且我知道只有 700 到 800 篇文章会匹配。自从我第一次使用 Excel/OpenOffice(我知道我知道......)以来,我想知道是否有办法自动化这项工作,无论是使用 OpenOffice 还是我可以使用脚本来完成它。我发现了很多类似的帖子,但没有一个是我需要的。

欢迎任何帮助。 谢谢!

【问题讨论】:

这两个文件有多大?还有你有多少内存? 12,000 个条目可能在没有太多内存考虑的情况下是可以管理的...... 第一个是 7.8mo,第二个只有 178kb,我不应该对内存有问题,他们借给我一个 macbook 来完成它有 8gb 内存的工作。 【参考方案1】:

我会首先尝试让它运行而不考虑内存问题,并且只有在遇到该问题时才能解决该问题。 12,000 似乎很多,但你可能会惊讶于你可以在 python 上抛出什么并让它“正常工作”。编程中遇到excel之类的我几乎都是用csv文件...

import csv

#    B.csv:
#    store#  part#
#      xx     xx
#      xx     xx
#      xx     xx
#    ...

partNums = 
with open('B.csv') as bfile:
    breader = csv.DictReader(bfile)
    for row in breader:
        partNums[row['part#']] = row['store#']

#    A.csv
#    part#  tag1  tag2  tag3 ...
#    xx     xx    xx    xx   ...
#    xx     xx    xx    xx   ...
#    xx     xx    xx    xx   ...
#    ...


with open('outfile.csv', 'wb') as outfile:
    with open('A.csv', 'rb') as afile:
        areader = csv.reader(afile)
        outwriter = csv.writer(outfile)
        headers = areader.next()
        headers.append('StoreCode')
        outwriter.writerow(headers)
        for row in areader:
            if row[0] in partNums:  #assuming first row is part#
                row.append(partNums[row[0]])
            else:  #value if no store number exists
                row.append('')
            outwriter.writerow(row)

【讨论】:

您可能需要对其进行一些调整以适应您文件的确切格式,但基本上是的 谢谢!所以我应该用参数中的 2 个文件来运行它?我会询问我们的 IT 人员,但他们正忙于设置我们的新 ERP,并且需要为某些模块使用它。 Re,所以我在替换格式文件后尝试运行它,但我不知道为什么当我运行它时它会打印出 ImageMagick 的用法,然后是这个 import: delegate library support not built-in `' (X11) @error/import.c/ImportImageCommand/1297。我继续尝试不同的格式并更改我的文件,同时知道为什么会这样吗? 您想在开放式办公室中运行它吗?这需要从命令行运行。将其保存为 .py 文件并从命令提示符调用它 我终于让它也能正常工作了,它比简单的 excel 函数更有趣,它运行 12k 线的速度给我留下了深刻的印象。谢谢【参考方案2】:

您也可以尝试 VLOOKUP() 公式。它可能在 Calc 中与 .xls 文件一起使用,但为了安全起见,我会先将它们都保存为 .ods。您可以在 File1 的一个空列的顶部编写公式,例如:

=VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A$1:$B$12000;2;0)

本教程中解释了 VLOOKUP 的语法以及示例:VLOOKUP questions and answers。

确保在列字母和行号前面包含$ 符号 - 这会告诉电子表格在您复制/粘贴公式时不要调整这些字母和数字。第一个参数(此处为 A1)在复制/粘贴时将被调整为 A2、A3 等,因此公式将匹配每一行的相应商店代码。

第一个单元格工作后,使用 VLOOKUP 公式复制该单元格。然后单击名称框(它位于公式栏的左侧)并键入要将该公式粘贴到的范围,例如H2:H12000,然后按 Enter。您键入的范围应突出显示。现在粘贴你的公式。

所有匹配的代码都应该出现,不匹配的代码将显示#N/A。如果你想要空白而不是 #N/A 你可以做类似的事情

=IF(ISERROR(VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A$1:$B$12000;2;0);"";VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A$1:$B$12000;2;0))

基本上就是说“如果这个公式返回错误;然后显示一个空白;否则显示这个公式的结果”

【讨论】:

以上是关于是否有一个 Excel 函数或脚本来查找和替换两个不同工作表中匹配的字段,并将其替换为第二个工作表中包含的另一个数据?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell5。查找/替换文本。 Switch和.NET框架或cmdlet和管道?哪个更快?哪个更容易阅读?

excel两个工作表如何关联

如何用Python来进行查询和替换一个文本字符串

简单的excel查找和替换公式

excel如何在一堆数据中查找出需要的数据

excel中lookup函数如何精确匹配查找