[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
也来一个:
  1. @set @n=0;/* & echo off
  2. set "cell=D37 D38 D39"
  3. for %%a in (*.csv) do (
  4.         cscript -nologo -e:jscript "%~0"<"%%a">>$ "%cell%"
  5. )
  6. move $ new.csv
  7. pause & exit & */
  8. arg = WScript.Arguments(0).split(" ");
  9. txt = WScript.StdIn.ReadAll();
  10. arTxt = txt.replace(/(\s*\n)+$/, "").split("\r\n");
  11. chr = "0ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  12. arCell = [];
  13. for (i=0; i<arg.length; i++) {
  14.         m = arg[i].match(/\d+$/)[0] - 1;
  15.         n = ("0" + arg[i]).match(/(..)\d+$/)[1].toUpperCase();
  16.         n1 = chr.indexOf(n.substr(0, 1));
  17.         n2 = chr.indexOf(n.substr(1));
  18.         n = n1 * 26 + n2 - 1;
  19.         arCell.push(arTxt[m].split(",")[n]);
  20. }
  21. WScript.Echo(arCell.join(","))
复制代码
1

评分人数

TOP

再来一下:
  1. arrCell = Array("D37", "D38", "D39") ''需要提取的单元格
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. For Each file in fso.GetFolder(".").Files
  4.         If LCase(Right(file, 4)) = ".csv" Then
  5.                 Set f = fso.OpenTextFile(file, 1)
  6.                 txt = f.ReadAll : f.Close
  7.                 str = str & getCellsData(txt) & vbCrLf
  8.         End If
  9. Next
  10. fso.OpenTextFile("new.csv", 2, true).Write str
  11. MsgBox "OK"
  12. Function getCellsData(ByVal txt)
  13.         '' csv文本分割成数组
  14.         arrTxt = Split(txt, vbCrLf)
  15.         strChr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  16.         ''建立正则表达式
  17.         Set re = New RegExp
  18.         ''正则表达式模式,最大支持到ZZ列
  19.         re.Pattern = "^([a-z]{1,2})(\d+)$"
  20.         re.IgnoreCase = true
  21.         For i = 0 to UBound(arrCell)
  22.                 n = re.Execute(arrCell(i))(0).SubMatches(0)
  23.                 n = UCase(Right("0" & n, 2))
  24.                 n1 = InStr(strChr, Left(n, 1))
  25.                 n2 = InStr(strChr, Mid(n, 2))
  26.                 n = n1 * 26 + n2 - 1
  27.                 m = re.Execute(arrCell(i))(0).SubMatches(1) - 1
  28.                 s = s & "," & Split(arrTxt(m), ",")(n)
  29.         Next
  30.         getCellsData = Mid(s, 2)
  31. End Function
复制代码

TOP

除非单个文件几百兆上G级,否则不可能“刷一个要50分钟”。
如此,你应该在顶楼就交代清楚
顶楼不说清楚,一会想实现这样一会又想那样,什么心态?“我是小白”很了不起吗?
给你代码不会用,活该你慢。

TOP

回复 49# haichuan5121


    代码没有做容错处理,如果输入的行数或列数大于csv文件本身的行数或列数,就会报“下标越界”

解决办法:在vbs代码开头插入一行:
  1. On Error Resume Next
复制代码

TOP

返回列表