是否有 Excel 函数或脚本来查找两个不同 sheet 中匹配的字段并将其替换为第二个 sheet 中包含的另一个数据?
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?
今天是我第一次使用 Open Office,我需要一些帮助才能开始使用。
我的老板给了我两个 Excel 个文件,其中包含我必须完成的数据。
- 第一个 sheet 在 'A' 中包含一个供应商代码和一堆其他列,其中包含我需要保留的产品尺寸等数据。
- 第 2 个在 'A' 中包含相同的供应商代码,但顺序不同,因为它们中也有很多双人,并且在 'B' 中有一个商店代码。
如果 sheet 中的代码与 'A' 中包含的代码匹配,我需要向包含商店代码的第一个 sheet 添加一列。
这不是我的工作,但由于每个人都离开了暑假,他让我去做。
我的问题是两个 sheet 都超过 12 000 行,而且我知道只有 700 到 800 篇文章可以匹配。自从我第一次使用 Excel/OpenOffice(我知道我知道...)以来,我想知道是否有一种方法可以使这项工作自动化,可以使用 OpenOffice,也可以使用脚本来完成。我发现了很多类似的 post,但其中 none 正是我所需要的。
欢迎任何帮助。
谢谢!
我会首先尝试让它 运行 忽略内存问题,并且只在遇到该问题时才修复该问题。 12,000 似乎很多,但您可能会惊讶于您可以 python 投入并获得 "just work"。我在编程中遇到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)
您也可以尝试使用 VLOOKUP() 公式。它可能在 Calc 中使用 .xls 文件,但为了安全起见,我会先将它们都保存为 .ods。您可以将公式写在 File1 中空列的顶部,例如:
=VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0)
本教程解释了 VLOOKUP 的语法示例:VLOOKUP questions and answers。
确保在列字母和行号前面包含 $
符号 - 这会告诉电子表格在您 copy/paste 公式时不调整这些字母和数字。当 copy/pasted 时,第一个参数(此处为 A1)将被调整为 A2、A3 等,因此公式将匹配每一行上的适当商店代码。
第一个单元格开始工作后,使用 VLOOKUP 公式复制该单元格。然后单击名称框(它位于公式栏的左侧)并输入要将该公式粘贴到的范围,例如 H2:H12000
并按回车键。您键入的范围应突出显示。现在粘贴你的公式。
应显示所有匹配代码,不匹配的代码将显示 #N/A
。如果你想要空白而不是 #N/A
你可以做类似
=IF(ISERROR(VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0);"";VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0))
基本上就是说 "if this formula returns an error; then show a blank; otherwise show the result of this formula"
今天是我第一次使用 Open Office,我需要一些帮助才能开始使用。 我的老板给了我两个 Excel 个文件,其中包含我必须完成的数据。
- 第一个 sheet 在 'A' 中包含一个供应商代码和一堆其他列,其中包含我需要保留的产品尺寸等数据。
- 第 2 个在 'A' 中包含相同的供应商代码,但顺序不同,因为它们中也有很多双人,并且在 'B' 中有一个商店代码。
如果 sheet 中的代码与 'A' 中包含的代码匹配,我需要向包含商店代码的第一个 sheet 添加一列。
这不是我的工作,但由于每个人都离开了暑假,他让我去做。
我的问题是两个 sheet 都超过 12 000 行,而且我知道只有 700 到 800 篇文章可以匹配。自从我第一次使用 Excel/OpenOffice(我知道我知道...)以来,我想知道是否有一种方法可以使这项工作自动化,可以使用 OpenOffice,也可以使用脚本来完成。我发现了很多类似的 post,但其中 none 正是我所需要的。
欢迎任何帮助。 谢谢!
我会首先尝试让它 运行 忽略内存问题,并且只在遇到该问题时才修复该问题。 12,000 似乎很多,但您可能会惊讶于您可以 python 投入并获得 "just work"。我在编程中遇到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)
您也可以尝试使用 VLOOKUP() 公式。它可能在 Calc 中使用 .xls 文件,但为了安全起见,我会先将它们都保存为 .ods。您可以将公式写在 File1 中空列的顶部,例如:
=VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0)
本教程解释了 VLOOKUP 的语法示例:VLOOKUP questions and answers。
确保在列字母和行号前面包含 $
符号 - 这会告诉电子表格在您 copy/paste 公式时不调整这些字母和数字。当 copy/pasted 时,第一个参数(此处为 A1)将被调整为 A2、A3 等,因此公式将匹配每一行上的适当商店代码。
第一个单元格开始工作后,使用 VLOOKUP 公式复制该单元格。然后单击名称框(它位于公式栏的左侧)并输入要将该公式粘贴到的范围,例如 H2:H12000
并按回车键。您键入的范围应突出显示。现在粘贴你的公式。
应显示所有匹配代码,不匹配的代码将显示 #N/A
。如果你想要空白而不是 #N/A
你可以做类似
=IF(ISERROR(VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0);"";VLOOKUP(A1;'file:///C:/FolderName/File2.ods'#$Sheet1.$A:$B000;2;0))
基本上就是说 "if this formula returns an error; then show a blank; otherwise show the result of this formula"