Board logo

标题: [文件操作] Excel文本处理 [打印本页]

作者: 司马光2008    时间: 2024-9-1 00:51     标题: Excel文本处理

各位大神们,请教一个问题,如何把两个Excel里面的内容合并到一起并输出一个新的Excel

内容描述:需要把  A  和  B 两个Excel里面的内容,参照 城市名  合并为 C  Excel文件

A-Excel文件:       
城市        团队        小队        分队        奖品
广州        团队1        小队3        分队1        饮料
南京        团队2        小队4        分队2        毛巾
武汉        团队3        小队5        分队3        洗发露
桂林        团队4        小队6        分队4        牙刷
苏州        团队5        小队7        分队5        饮料
深圳        团队8        小队9        分队1        饮料
徐州        团队5        小队7        分队5        饮料

B-Excel文件
省份        城市        描述
广东        广州,深圳        优秀团队
广西        桂林        最佳形象团队
江苏        南京,苏州,徐州        年度最佳团队
湖北        武汉        月度最佳团队

合并为  C-Excel文件
城市        团队        小队        分队        奖品        省份        描述
广州        团队1        小队3        分队1        饮料        广东        优秀团队
南京        团队2        小队4        分队2        毛巾        江苏        年度最佳团队
武汉        团队3        小队5        分队3        洗发露        湖北        月度最佳团队
桂林        团队4        小队6        分队4        牙刷        广西        最佳形象团队
苏州        团队5        小队7        分队5        饮料        江苏        年度最佳团队
深圳        团队8        小队9        分队1        饮料        广东        优秀团队
徐州        团队5        小队7        分队5        饮料        江苏        年度最佳团队
作者: 司马光2008    时间: 2024-9-1 00:54

老板要求每天都要手动合并这些东东很麻烦,我本人Excel知识不多,请各位大神帮帮忙
作者: 77七    时间: 2024-9-1 11:28

试试
  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. for /f "useback tokens=1* delims=," %%a in ("b.csv") do (
  5. set _%%a=%%b
  6. )
  7. (
  8. echo 城市,团队,小队,分队,奖品,省份,描述
  9. for /f "useback skip=1 delims=" %%a in ("a.csv") do (
  10. for /f "delims=," %%b in ("%%a") do (
  11. (for /f "tokens=1* delims=_=" %%c in ('set _ ^|find "%%b"') do (
  12. for %%e in (%%d) do (
  13. set str=%%e
  14. )
  15. call echo %%a,%%c,%%str%%
  16. )) || echo %%a
  17. )
  18. )
  19. ) > "c.csv"
  20. pause
复制代码

作者: aloha20200628    时间: 2024-9-1 15:50

本帖最后由 aloha20200628 于 2024-9-1 15:56 编辑

回复 1# 司马光2008

以下代码假设一楼示例文件:
   A-Excel文件 = a.txt
   B-Excel文件 = b.txt
生成的合并结果:
   C-Excel文件 = c.txt
  1. @echo off & (
  2. echo,城市 团队        小队        分队        奖品 省份 描述
  3. for /f "skip=1 tokens=1* delims= " %%a in (a.txt) do (
  4. for /f "tokens=1-3 delims= " %%x in ('findstr /ic:"%%a" b.txt') do echo,%%a %%b %%x %%z
  5. ))>c.txt
  6. pause&exit/b
复制代码

作者: ppll2030    时间: 2024-9-1 21:44

本帖最后由 ppll2030 于 2024-9-1 21:50 编辑

回复 1# 司马光2008


    假设有A.xlsx,B.xlsx两个表格,
把下面的代码保存为VBS文件,和上面两个表格放在一起,运行后,即可得到汇总的表格C.xlsx了。
  1. Set fso=WScript.CreateObject("Scripting.Filesystemobject")
  2. Set fd=fso.GetFolder(".")
  3. Set oExcle = CreateObject("Excel.Application")
  4. Set Axl = oExcle.Workbooks.Open(fd&"\A.xlsx")
  5. Set Bxl = oExcle.Workbooks.Open(fd&"\B.xlsx")
  6. Set Cxl = oExcle.Workbooks.Add()
  7. Axl.Worksheets(1).Copy Cxl.Worksheets(Cxl.Worksheets.Count)
  8. Cxl.Sheets(1).Name = "A"
  9. Bxl.Worksheets(1).Copy Cxl.Worksheets(Cxl.Worksheets.Count)
  10. Cxl.Sheets(2).Name = "B"
  11. Cxl.Sheets("A").UsedRange.Copy
  12. Cxl.Sheets("sheet1").range("A1").PasteSpecial
  13. lastRow = Cxl.Sheets("A").Cells(Cxl.Sheets("A").Rows.Count, 1).End(-4162).Row
  14. Cxl.Sheets("B").UsedRange.Copy
  15. Cxl.Sheets("sheet1").range("F1").PasteSpecial
  16. Cxl.Sheets("sheet1").columns("G").delete
  17. Cxl.Sheets("sheet1").Range("F2").Formula2 = "=INDEX(b!A:A,MATCH(TRUE,ISNUMBER(FIND(A2,b!B:B)),0))"
  18. Cxl.Sheets("sheet1").Range("F2:F"&lastRow).FillDown
  19. Cxl.Sheets("sheet1").Range("G2").Formula2 = "=INDEX(b!C:C,MATCH(F2,b!A:A,0))"
  20. Cxl.Sheets("sheet1").Range("G2:G"&lastRow).FillDown
  21. Cxl.Sheets("sheet1").Activate
  22. Cxl.Sheets("sheet1").Name = "汇总结果"
  23. Cxl.SaveAs fd&"\C.xlsx"
  24. Cxl.Close
  25. oExcle.Quit
  26. MsgBox "工作表汇总完毕!"
复制代码

作者: 司马光2008    时间: 2024-9-15 21:38

感谢各位大神们的答复




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2