Board logo

标题: 100元求助批处理出货文件 [打印本页]

作者: sjbl    时间: 2020-12-15 00:17     标题: 100元求助批处理出货文件

我公司每天从系统导出的出货单不便于仓库出货,能否请大神帮忙设计如何从DO0029批处理至DO0029副本的样式,仓库的人文化不高,希望尽可能简便一些。
支付宝或者微信均可 微信13311886303
作者: went    时间: 2020-12-15 01:32

本帖最后由 went 于 2020-12-15 19:58 编辑

保存为bat,ANSI编码,拖动要处理的csv文件到bat文件上即可
  1. /*&cls&@echo off
  2. if "%~1"=="" echo.请拖动要处理的csv文件到本程序图标上&pause&exit
  3. if /i not "%~x1"==".csv" echo.非csv文件!&pause&exit
  4. cd /d "%~dp1"
  5. del "%~n1_new.xls" /f >nul 2>nul
  6. echo.%~1| cscript -E:javascript -Nologo "%~0" &pause&exit
  7. */
  8. //交换一行数据
  9. function swap(lineNum,maps,sheet){
  10. shell.Exec("cmd /c title 处理第" + lineNum +"行数据.");
  11. var array,tmpStr="",firstCol=null
  12. for(var key in maps){
  13. if(firstCol == null)
  14. firstCol = key;
  15. tmpStr+=sheet.Cells(lineNum,maps[key]).Text == "0" ? "" : sheet.Cells(lineNum,maps[key]).Text;
  16. tmpStr += ",";
  17. }
  18. for(var key in maps){
  19. sheet.Cells(lineNum,maps[key]).Value = tmpStr.split(",")[maps[key]-firstCol];
  20. }
  21. }
  22. //开始
  23. var csvFile = WSH.StdIn.ReadLine();
  24. var eObj = new ActiveXObject("Excel.Application");
  25. var fObj = new ActiveXObject("Scripting.FileSystemObject");
  26. var shell = new ActiveXObject("WScript.Shell");
  27. eObj.Visible = false;
  28. var excelA = eObj.Workbooks.Open(csvFile.replace(/\\/g,"\\\\"));
  29. //复制到xls
  30. WSH.Echo("正在复制csv数据到xls ...\n");
  31. excelA.ActiveSheet.Copy();
  32. excelB = eObj.Workbooks.Item(2);
  33. excelA.Close();
  34. //计算行列数
  35. var totalLine = 0;
  36. var totalCol = 0;
  37. var f = fObj.OpenTextFile(csvFile,1);
  38. while(!f.AtEndOfStream){
  39. var curCol = f.ReadLine().split(",").length;
  40. if(curCol > totalCol)totalCol = curCol;
  41. totalLine += 1;
  42. }
  43. //自定义数据
  44. //*************************************************
  45. var maps={4:4,5:9,6:7,7:6,8:5,9:8,10:10}; //列交换数据     [第几列:换到第几列]
  46. var leftTop = "B5",right = "L",bottom = totalLine; //加边框范围数据 [左上角,右边界,下边界]
  47. //*************************************************
  48. //添加边框
  49. WSH.Echo("正在添加边框 [" + leftTop+ ":" + right + bottom + "]    ...\n");
  50. var cells = eObj.Range(leftTop+ ":" + right + bottom);
  51. cells.Borders.LineStyle = 1;
  52. cells.Borders.Weight = 2;
  53. WSH.Echo("正在调整数据...\n");
  54. //交换名称
  55. swap(6,maps,excelB.ActiveSheet);
  56. //交换数字
  57. for(var i=8;i<totalLine;i++)
  58. swap(i,maps,excelB.ActiveSheet);
  59. //生成文件
  60. excelB.SaveAs(fObj.GetParentFolderName(csvFile)+"\\"+fObj.GetBaseName(csvFile)+"_new.xls");
  61. eObj.Quit();
  62. shell.Exec("cmd /c title 处理完成!");
  63. WSH.Echo("完成,输出文件: "+fObj.GetParentFolderName(csvFile)+"\\"+fObj.GetBaseName(csvFile)+"_new.xls");
复制代码

作者: zaqmlp    时间: 2020-12-15 07:11

bat跟csv文件放一起双击运行
作者: ivor    时间: 2020-12-15 09:01

本帖最后由 ivor 于 2020-12-15 10:59 编辑

office 自带清除单元格0为空

作者: bangyou    时间: 2021-1-1 21:26

回复 3# zaqmlp


    大牛,,,bat居然/* */,然后下面写的是js脚本么?

请教下,这句怎么理解啊dir /a-d-h/b *.csv|cscript -nologo -e:jscript "%~f0" "%newfolder%"
作者: terse    时间: 2021-1-2 13:56

将目录下所有 csv文件传递给cscript处理  这里"%newfolder%"是保存文件处理后的新目录吧




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