将多个.xls文件转换为以分号分隔的.csv文件

时间:2012-09-26 16:07:20

标签: javascript excel csv xls file-conversion

我有多个.xls文件要转换为csv文件并且已经找到了这个JavaScript:

/*
 jPaq - A fully customizable JavaScript/JScript library
 http://jpaq.org/

 Copyright (c) 2011 Christopher West
 Licensed under the MIT license.
 http://jpaq.org/license/

 Version: 1.0.6.000001
 Revised: April 6, 2011
*/
(function(){jPaq={toString:function(){return"jPaq - A fully customizable JavaScript/JScript library created by Christopher West."}};var e=new ActiveXObject("WScript.Shell");alert=function(a,b,c,d){a==null&&(a="");if(!b)b=WScript.ScriptName;c==null&&(c=alert.OKOnly+alert.Exclamation);d==null&&(d=0);return e.Popup(a,d,b,c)};alert.OKOnly=0;alert.OKCancel=1;alert.AbortRetryIgnore=2;alert.YesNoCancel=3;alert.YesNo=4;alert.RetryCancel=5;alert.Critical=16;alert.Question=32;alert.Exclamation=48;alert.Information=
64;alert.Timeout=-1;alert.OK=1;alert.Cancel=2;alert.Abort=3;alert.Retry=4;alert.Ignore=5;alert.Yes=6;alert.No=7})();
/***** END OF JPAQ *****/

try {
  // Create an instance of Excel, but don't allow the content
  // area to be repainted.
  var xlCSV = 6;
  var xlApp = new ActiveXObject("Excel.Application");
  xlApp.Visible = true;
  xlApp.ScreenUpdating = false;
  xlApp.DisplayAlerts = false;

  // Initialize the counts.
  var fileCount = 0, csvCount = 0;

  // Regular expression for match Excel files to be converted.
  var re = /([^\\\/]+)\.xlsx?$/i;

  // Reference the containing folder.
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var fldr = fso.GetFolder(WScript.ScriptFullName.replace(/[\\\/][^\\\/]+$/, ""));

  // Determine whether or not linefeed characters should be removed.
  var msg = "Would you like to remove linefeed characters from all cells?";
  var title = "Remove Linefeed Characters";
  var removeLf = alert.Yes == alert(msg, title, alert.YesNo + alert.Question);

  // Loop through all of the xls and xlsx files in this folder.
  for(var e = new Enumerator(fldr.Files); !e.atEnd(); e.moveNext()) {
    var aFile = e.item();
    if(re.test(aFile.Name)) {
      xlApp.StatusBar = "Processing " + aFile.Path + "...";

      // Open the workbook.
      var wb = xlApp.Workbooks.Open(aFile.Path);

      // Save each worksheet as a CSV file.
      for(var e2 = new Enumerator(wb.Sheets); !e2.atEnd(); e2.moveNext()) {
        var ws = e2.item();
        if(removeLf) {
          ws.UsedRange.Replace("\n", "");
        }
        var csvPath = aFile.Path.replace(re, function($0, $1) {
          return $1 + "-" + ws.Name + ".csv";
        });
        ws.SaveAs(csvPath, xlCSV);
        csvCount++;  // Increment the number of CSV's.
      }

      // Close the workbook.
      wb.Close();

      // Increment the number of files.
      fileCount++;
    }
  }

  // Allow alerts to be displayed, and the screen to be updated again.
  xlApp.DisplayAlerts = true;
  xlApp.ScreenUpdating = true;

  // Close Excel.
  xlApp.Quit();

  var msg = "The results are as follows:\nFiles converted:  "
    + fileCount + "\nCSV's created:  " + csvCount;
  var title = "Conversion Process Complete";
  alert(msg, title, alert.Information);
}
catch(e) {
  // If the Excel workbook is open, close it.
  try{ wb.Close(false); }catch(e2){}

  // If Excel is open, change the settings back to normal and close it.
  try{
    xlApp.DisplayAlerts = true;
    xlApp.ScreenUpdating = true;
    xlApp.Quit();
  } catch(e2){}

  // Print the error message.
  var msg = "The following error caused this script to fail:\n"
    + e.message;
  var title = "Critical Error Occurred";
  alert(msg, title, alert.Critical);
}

但是,此代码使用逗号分隔保存文件,而不是使用分号。 看来,我必须使用我的本地设置保存文件(当我通过Excel手动保存时,它们以分号保存)我不知道如何...

有没有人知道

的参数
ws.SaveAs(csvPath, xlCSV);

方法,所以它会使用我的本地设置吗?

我非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我很高兴您发现my post有帮助。不幸的是,似乎唯一的方法是通过控制面板实际更改系统的本地设置。经过多次搜索,我确定了这个。 Here is a page陈述了这一事实。如果您找到其他解决方案,请告诉我们。