【问题标题】:How to write google script to automatically call data from a google folder drive that contains a CSV file into one Google Sheets如何编写谷歌脚本以自动将包含 CSV 文件的谷歌文件夹驱动器中的数据调用到一个谷歌表格中
【发布时间】:2017-11-18 08:48:08
【问题描述】:

我正在尝试编写一个谷歌脚本,允许我进入我的谷歌驱动器文件夹“MeadJohsnon”并将“Temperature Calibration.csv”拉到谷歌表。我以前从未使用过谷歌脚本。目前我有“保存电子邮件和附件”附加组件。这个附加组件正在提取我的团队从现场发送给我的 .cvs 文件。他们使用“TapForms”,然后通过电子邮件将表单发送到我的 gmail。因此,我收到了将该附件发送到我的谷歌驱动器的电子邮件,但我需要脚本方面的帮助,因此驱动器会自动获取这些 .cvs 文件并将信息放入一个谷歌表中。我说 ONE google sheet 因为虽然我有一个团队发送表格,但所有表格上都有相同的信息。

这是我到目前为止所做的。第四行给了我一个

function loadingCSV() {
 var ss=SpreadsheetApp.getActiveSpreadsheet()
 var sht=ss.getActiveSheet();
 sht.clearContents();
 var data = loadFile();
 var dataA =Utilities.parseCsv(data);
 var rng = sht.getRange(1, 1, dataA.length, dataA[0].length);
 rng.setValues(dataA);
}

我只想就如何解决我的错误或我可以做些什么来提供反馈。如前所述,这是我第一次使用谷歌脚本,我的专长是 ASP.net 大声笑不是脚本。谢谢你。

【问题讨论】:

  • 是否在任何地方定义了“Temperature_Calibration_csv_id”?即 var Temperature_Calibration_csv_id = 'hsdojsdajkhadfsad89ojfsadasdfklsad89';
  • 不,该行没有在任何地方定义!我应该赋予它什么价值?
  • 您尝试向其中添加数据的 Google 工作表的 ID。
  • 谢谢,这是我很困惑的部分。我不知道在哪里找到ID。它位于工作表的 URL 中。

标签: google-apps-script google-sheets google-drive-api google-spreadsheet-api


【解决方案1】:
  function loadingCSV() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var sht=ss.getActiveSheet();
  sht.clearContents();
  var data = loadFile();
  var dataA =Utilities.parseCsv(data);
  var rng = sht.getRange(1, 1, dataA.length, dataA[0].length);
  rng.setValues(dataA);
}

function loadFile(filename,folderID)
{
  var filename = (typeof(filename) !== 'undefined')? filename : 'Temperature Calibration.csv';
  var folderID = (typeof(folderID) !== 'undefined')? folderID : '0B8m9xkDP_TJxUUlueHhXOWJMbjg';
  var fldr = DriveApp.getFolderById(folderID);
  var file = fldr.getFilesByName(filename);
  var s = '';
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      s = fi.getBlob().getDataAsString();
    }
  }
  return s;
}

好的,这会将文件附加到活动电子表格中,您可能必须按 id 打开电子表格并使用 getSheetByName 获取所需的工作表,因为当触发器运行时,此电子表格可能不会一直处于活动状态.我假设这些文件都以 .csv 结尾。我在读取数据后将它们重命名为 .old,这样程序就不会多次读取它们。

function appendingCSV() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var sht=ss.getActiveSheet();
  var drng = sht.getDataRange();
  var lastRow = drng.getLastRow();
  var data = loadFiles();
  var dataA =Utilities.parseCsv(data);
  if(dataA.length>0)
  {
    var rng = sht.getRange(lastRow + 1, 1, dataA.length, dataA[0].length);
    rng.setValues(dataA);
  }
  else
  {
    SpreadsheetApp.getUi().alert('No Data Returned from LoadFiles');
  }
}

function loadFiles(folderID)
{
  var folderID = (typeof(folderID) !== 'undefined')? folderID : '0B8m9xkDP_TJxUUlueHhXOWJMbjg';
  var fldr = DriveApp.getFolderById(folderID);
  var files = fldr.getFiles();
  var s='';
  var re = /^.*\.csv$/i;
  while (files.hasNext())
  {
    var file = files.next();
    var filename = file.getName();
    if(filename.match(re))
    {
      s += file.getBlob().getDataAsString() + '\n';
      file.setName(filename.slice(0,-3) + 'old');
    }
  }
  return s;
}

【讨论】:

  • 感谢您的回复库珀。我正在尝试将“Temperature Calibration.csv”放入名为 MeadJohnson 的驱动器文件夹中,放入 Mead_Johnson 的 Google 表格文件名中。这是我在您发送给我的代码中填写的内容,这很有帮助,但没有返回我正在寻找的结果. 您还有其他建议吗?
  • var data = loadFile('Temperature Calibration.csv'); var dataA =Utilities.parseCsv(data); var rng = sht.getRange(1, 1, dataA.length, dataA[0].length) rng.setValues(dataA); } function loadFile(filename,folderID) { var filename = (typeof(filename) !== 'Mead_Johnson')?文件名:默认文件名; var folderID = (typeof(folderID) !== '0B8m9xkDP_TJxUUlueHhXOWJMbjg')?文件夹ID:数据文件夹ID; var fldr = DriveApp.getFolderById('0B8m9xkDP_TJxUUlueHhXOWJMbjg'); var file = fldr.getFilesByName('Mead_Johnson');
  • 我有一个插件将 .csv 文件从 gmail 拉到我在谷歌驱动器中的 MeadJohnson 文件夹中。在那个文件夹中,我有一个空白的 Mead_Johnson 谷歌表。我想自动化这些 .csv 文件进入 Mead_Johnson 谷歌表的过程,而无需我手动更新它。这可能吗?
  • 我用你的变量修改了代码。是的,您可以使用 timed based trigger 自动完成。
  • 完美运行。我现在要把定时触发器放在那里。谢谢
猜你喜欢
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多