返回列表 发帖

[文本处理] 求助批处理把Excel首列相同内容合并到同一行

各位好,本人是贴片行业的牛马,想学习贴片的CAD坐标和BOM合并,需要把Excel首列相同内容合并到同一行中,帮忙看看什么合并。
样式如下:

BOM格式:
C31,C34        1049467-00-A        CAP,COG,12pF,50V,5%,0402(1005),AEC-Q
R26        1113417-00-A        RES,1K00,1/16W,1%,0402(1005),AEC-Q
R4,R7,R24        1113588-00-A        RES,33K0,1/16W,1%,0402(1005),AEC-Q
J2        1061850-00-A        CONN,HDR,RA,5P,5X1,2MM,SM,TIN
D2        1103738-00-A        DIODE,SCHOTTKY,40V,0.4A,SOD-323
Q1        1516298-00-A        XSTR,MOSFET,P-CH,30V,3.8A,SOT23-3,AEC-Q

CAD格式:
C31        12.1        6.5        0
C34        10.1        13.3        180
Q1        10.7711        7.825        90
J2        18.4948        10        270
D2        20.4        10        270
R26        12.3        5.3        0
R7        9        16.175        270
R7        5.3        13.8        180
R4        5.3        13.8        180
R24        5.3        13.8        180

合并后的样式:
C31        12.1        6.5        0        1049467-00-A        CAP,COG,12pF,50V,5%,0402(1005),AEC-Q
C34        10.1        13.3        180        1049467-00-A        CAP,COG,12pF,50V,5%,0402(1005),AEC-Q
Q1        10.7711        7.825        90        1516298-00-A        XSTR,MOSFET,P-CH,30V,3.8A,SOT23-3,AEC-Q
J2        18.4948        10        270        1061850-00-A        CONN,HDR,RA,5P,5X1,2MM,SM,TIN
D2        20.4        10        270        1103738-00-A        DIODE,SCHOTTKY,40V,0.4A,SOD-323
R26        12.3        5.3        0        1113417-00-A        RES,1K00,1/16W,1%,0402(1005),AEC-Q
R7        9        16.175        270        1113588-00-A        RES,33K0,1/16W,1%,0402(1005),AEC-Q
R4        5.3        13.8        180        1113588-00-A        RES,33K0,1/16W,1%,0402(1005),AEC-Q
R24        5.3        13.8        180        1113588-00-A        RES,33K0,1/16W,1%,0402(1005),AEC-Q

本帖最后由 idwma 于 2025-3-23 01:13 编辑

大概的样子
#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
$bom='bom.xlsx'
$cad='cad.xlsx'
$a=new-object -com excel.application
$b=$a.workbooks.open("$(dir $bom)")
$c=$b.sheets.item(1)
$bd=$c.usedrange.cells.value()
$bc=$bd.count/$c.usedrange.columns.count
$b.close()
$b=$a.workbooks.open("$(dir $cad)")
$c=$b.sheets.item(1)
$cd=$c.usedrange.cells.value()
$cc=$cd.count/$c.usedrange.columns.count
$b.close()
$a.quit()
$bl=@{}
1..$bc|%{
$e=@($bd[$_,2],$bd[$_,3])
$bd[$_,1] -split ','|%{$bl[$_]=$e}
}
1..$cc|%{
  $e=$cd[$_,1]
  '"{0}","{1}","{2},"{3}","{4}","{5}"' -f (
    ($e,$cd[$_,2],$cd[$_,3],$cd[$_,4])+$bl[$e]
  )
}|sc bomcad.csvCOPY

TOP

本帖最后由 aloha20200628 于 2025-3-23 10:42 编辑

回复 1# 司马光2008

假设已有bom.txt, cad.txt 文件,格式如一楼所示(删除 R7 重复行),全部零部件号数量不超过8000个
以下代码存为 test.bat 与 *.txt 文件同目录运行,输出结果文件名为 out.txt 其中零部件号顺序如 bom.txt...
@echo off &setlocal enabledelayedexpansion
for /f "tokens=1* delims= " %%a in (cad.txt) do set "_#%%a=%%b"
(for /f "tokens=1* delims= " %%a in (bom.txt) do for %%x in (%%a) do echo,%%x,!_#%%x!,%%b)>out.txt
pause&exit/bCOPY

TOP

返回列表