-2

如何编写一个脚本,让我在单击自定义菜单时从 Google 电子表格的本地驱动器中选择和上传 CSV 文件?(我想通过脚本复制 File-->Import 命令,但在打开时呈现的新菜单中)。

这里有一个类似的问题,但答案使用了现在已弃用的方法。 脚本在 Google 电子表格中导入本地 CSV

已弃用的答案

function doGet(e) {
  var app = UiApp.createApplication().setTitle("Upload CSV to Sheet");
  var formContent = app.createVerticalPanel();
  formContent.add(app.createFileUpload().setName('thefile'));
  formContent.add(app.createSubmitButton('Start Upload'));
  var form = app.createFormPanel();
  form.add(formContent);
  app.add(form);
//  return app;
  SpreadsheetApp.getActiveSpreadsheet().show(app);// show app 
}

function doPost(e) {
  // data returned is a blob for FileUpload widget
  var fileBlob = e.parameter.thefile;

  // parse the data to fill values, a two dimensional array of rows
  // Assuming newlines separate rows and commas separate columns, then:
  var values = []
  var rows = fileBlob.contents.split('\n');
  for(var r=0, max_r=rows.length; r<max_r; ++r)
    values.push( rows[r].split(',') );  // rows must have the same number of columns

  // Using active sheet here, but you can pull up a sheet in several other ways as well
  SpreadsheetApp.getActiveSheet()
                .getRange( 1, 1, values.length, values[0].length )
                .setValues(values);
}
4

2 回答 2

1

我相信你的目标如下。

  • 您希望通过从 Google 电子表格的自定义菜单执行脚本来将 CSV 数据上传到活动工作表。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

Google Apps 脚本方面:Code.gs

请将以下脚本作为脚本复制并粘贴到脚本编辑器中。

function onOpen() {
  SpreadsheetApp.getUi().createMenu("sample").addItem("import CSV", "importCsv").addToUi();
}

function importCsv(e){
  if (!e) {
    SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("index"), "sample");
    return;
  }
  const csv = Utilities.parseCsv(Utilities.newBlob(...e).getDataAsString());
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(sheet.getLastRow() + 1, 1, csv.length, csv[0].length).setValues(csv);
}

HTML 和 Javascript 方面:index.html

请将以下脚本作为 HTML 复制并粘贴到脚本编辑器中。

<form><input type="file" name="file" onchange="importCsv(this.parentNode)" accept=".csv,text/csv"></form>
<script>
function importCsv(e) {
  const file = e.file.files[0];
  const f = new FileReader();
  f.onload = d => google.script.run.withSuccessHandler(google.script.host.close).importCsv([[...new Int8Array(d.target.result)], file.type, file.name]);
  f.readAsArrayBuffer(file);
}
</script>

测试:

当您测试上述脚本时,请运行onOpen或重新打开电子表格。这样,您可以看到自定义菜单。当您从自定义菜单中选择“导入 CSV”时,将打开一个对话框。当您从本地 PC 中选择 CSV 文件时,CSV 数据将导入到活动工作表中。

笔记:

  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。

参考:

于 2022-02-24T01:46:16.717 回答
0

与其从本地上传,不如从 Google Drive 上传更简单。

查看以下代码:

function importCSVFromGoogleDrive() {

  var file = DriveApp.getFilesByName("file.csv").next();
  var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST').activate();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

这会将 Google Drive 中“file.csv”中的数据复制到电子表格中名为“TEST”的工作表中。

于 2022-02-23T18:07:39.640 回答