导入csv文件的脚本会产生有趣的字符,包括黑色菱形中的问号

时间:2015-04-28 16:03:21

标签: google-apps-script google-sheets

我试图回收几个月前用过的应用脚本,但遇到了问题。

在相关的驱动器目录中有两个文件: leads_data.csv; LeadsReport(Google Sheet)。

我的目标是使用脚本将数据从csv文件导入LeadsReport。

以下是csv文件在文本编辑器中的样子: enter image description here

所以数据似乎用逗号隔开。

这是我的应用脚本:

// add the CSV menu. Might change this to be an automatic update base don date
function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{name: "Update Data", functionName: "importFromCSV"}];
  ss.addMenu("Update", csvMenuEntries);
}

function importFromCSV() {
      var file = DriveApp.getFilesByName("leads_data.csv");// get the file object
      var csvFile = file.next().getBlob().getDataAsString();// get string content
      Logger.log(csvFile);// check in the logger
      var csvData = CSVToArray_(csvFile);// convert to 2D array
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('DataImport'); // only add data to the tab DataImport to prevent overwriting other parts of the spreadsheet
      sheet.getRange(2,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step. Start at row 2 (getRange(2... )
      SpreadsheetApp.getUi().alert('Data Updated');
    }

    function CSVToArray_(strData){
     var rows = strData.split("\r");
  // Logger.log(rows.length);
     var array = [];
      for(n=0;n<rows.length;++n){
       if(rows[n].split(',').length>1){
         array.push(rows[n].split(','));
       }
       }
    Logger.log(array);
    return array;

    }

当我保存然后选择新菜单项&#34;更新&#34;我得到两个意想不到的结果:

  1. &#34;范围宽度不正确,为10但应为5&#34;
  2. 有两行填充了我无法识别的符号。预期的结果是将有一个包含7列和~3,000行的数据表。见下图。 enter image description here
  3. 根据之前的经验,我尝试过改变:

    var rows = strData.split("\r");
    var rows = strData.split("\n");
    

    在每种情况下,我都得到了类似的结果。

    任何人都可以看到我的脚本以这种方式导入数据的原因吗?

1 个答案:

答案 0 :(得分:1)

使用内置的csv解析器。看看下面的剪辑。

https://developers.google.com/apps-script/reference/utilities/utilities#parseCsv(String)

function myFunction() {
  var file = DriveApp.getFilesByName('CCStandards - English Language Arts & Literacy.csv').next();
  Logger.log(Utilities.parseCsv(file.getBlob().getDataAsString()));
}

//您的代码改编如下

function importFromCSV() {
  var file = DriveApp.getFilesByName("leads_data.csv");// get the file object
  var csvFile = file.next().getBlob().getDataAsString();// get string content
  var csvData = Utilities.parseCsv(csvFile);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('DataImport'); // only add data to the tab DataImport to prevent overwriting other parts of the spreadsheet
  sheet.getRange(2,1, csvData.length, csvData[0].length).setValues(csvData);// write to sheet in one single step. Start at row 2 (getRange(2... )
  SpreadsheetApp.getUi().alert('Data Updated');
}