Apps脚本,将工作表范围转换为Blob

nik*_*ers 5 javascript google-apps-script google-bigquery

背景:我正在尝试从Google表格上传单个数据行,并将其附加到BigQuery表中。

方法:我一直在使用https://developers.google.com/apps-script/advanced/bigquery来执行此操作,但是我没有使用数据文件(例如示例),而是将自己的工作表与来自具体行:

 var file = SpreadsheetApp.getActiveSpreadsheet();
  var currentSheet = file.getSheetByName(name);
  var lastRow = currentSheet.getLastRow()
   var lastC = currentSheet.getLastColumn()
   var rows = currentSheet.getRange(2,1,1,lastC).getValues();
Run Code Online (Sandbox Code Playgroud)

“行”是要导入到BQ的数据行。我尝试了很多事情,根据另一个StackOverflow问题,“ rowsCSV”将2D值数组变成CSV。

  var rowsCSV = rows.join("\n");

 var data = rowsCSV.getBlob().setContentType('application/octet-stream');
Run Code Online (Sandbox Code Playgroud)

问题:每次运行该函数时,都会出现错误“无法在对象Blob中找到函数getBlob。”或“无法将数组转换为(class)[] []”或“无法在对象Tue中找到函数getBlob 5月16日,星期二” 2017 00:00:00 GMT + 0200(CEST),58072.4,,``,,,,,,,, test“,其中最后一位(” Tue May ..“)是该行的实际数据。

我在这里做错了什么?

Jac*_*own 5

没有getBlob数组的方法。您将必须使用Utilities.newBlob()来从字符串获取blob。您可以在此处找到相同的文档

 var rowsCSV = rows.join("\n");
 var blob = Utilities.newBlob(rowsCSV, "text/csv")
 Logger.log(blob.getDataAsString())
 var data = blob.setContentType('application/octet-stream');
Run Code Online (Sandbox Code Playgroud)

等效地,您可以这样做

var rowsCSV = rows.join("\n");
var data = Utilities.newBlob(rowsCSV, 'application/octet-stream')
Run Code Online (Sandbox Code Playgroud)