[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助批处理把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 编辑

大概的样子
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $bom='bom.xlsx'
  3. $cad='cad.xlsx'
  4. $a=new-object -com excel.application
  5. $b=$a.workbooks.open("$(dir $bom)")
  6. $c=$b.sheets.item(1)
  7. $bd=$c.usedrange.cells.value()
  8. $bc=$bd.count/$c.usedrange.columns.count
  9. $b.close()
  10. $b=$a.workbooks.open("$(dir $cad)")
  11. $c=$b.sheets.item(1)
  12. $cd=$c.usedrange.cells.value()
  13. $cc=$cd.count/$c.usedrange.columns.count
  14. $b.close()
  15. $a.quit()
  16. $bl=@{}
  17. 1..$bc|%{
  18. $e=@($bd[$_,2],$bd[$_,3])
  19. $bd[$_,1] -split ','|%{$bl[$_]=$e}
  20. }
  21. 1..$cc|%{
  22.   $e=$cd[$_,1]
  23.   '"{0}","{1}","{2},"{3}","{4}","{5}"' -f (
  24.     ($e,$cd[$_,2],$cd[$_,3],$cd[$_,4])+$bl[$e]
  25.   )
  26. }|sc bomcad.csv
复制代码

TOP

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

回复 1# 司马光2008

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

TOP

返回列表