温馨提示:本文翻译自stackoverflow.com,查看原文请点击:google apps script - Function to export only current sheet to Excel, with values and formats
google-apps-script google-sheets

google apps script - 用于仅将当前工作表以值和格式导出到Excel的功能

发布于 2020-05-20 15:50:40

我有这个样本Google Spreadsheet我想创建一个Google Apps脚本函数,以仅将名为“ TargetSheet”的工作表导出到Excel。由于TargetSheet可能具有公式,因此此导出仅包含值非常重要。同样,颜色和格式也很重要。

最终文件应如下所示

有人建议我使用此代码段导出工作表,但是由于我是Google Apps脚本的入门者,所以我不太了解如何执行此操作。我应该将其复制到我的代码中吗?我应该以某种方式导入吗?并且在让此功能在脚本中工作之后,我假设我需要创建一个函数以使其正常工作。下面看起来像这样吗?

function exportarPlanilha() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var file = exportSpreadsheetToFile_(spreadsheet, 'xlsx');
  return file;
}

查看更多

提问者
abutremutante
被浏览
16
Tanaike 2020-03-04 07:18
  • 您想要TargetSheet将活动电子表格中的表格之一导出为XLSX文件。
  • 您想从问题中URL的示例脚本中,在Google云端硬盘中创建XLSX文件。
  • 您想使用问题的URL示例脚本和Google Apps脚本来实现。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

流:

当我在您的问题中看到URL的示例脚本时,流程似乎如下。

  1. 将活动电子表格复制为tempora电子表格。
  2. 将公式转换为文本。
  3. 删除除要导出的图纸以外的图纸。
  4. 检索导出URL。
  5. 从导出URL检索Blob。
  6. 将blob压缩为文件。
  7. 删除临时电子表格。

在您的情况下,导出类型为XLSX格式,即常量。因此,我认为该过程成本可以降低一点。因此,修改后的脚本如下。

示例脚本:

请复制以下脚本并将其粘贴到电子表格的脚本编辑器中。并请设置exportSheetName然后,请exportarPlanilha在脚本编辑器中运行该函数显示授权屏幕时,请授权范围。这样,脚本将运行。

function exportarPlanilha() {
  const exportSheetName = 'TargetSheet';  // Please set the target sheet name.

  // 1. Copy the active Spreadsheet as a tempora Spreadsheet.
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet().copy('tmp');

  // 2. Convert the formulas to the texts.
  const targetRange = spreadsheet.getSheetByName(exportSheetName).getDataRange();
  targetRange.copyTo(targetRange, {contentsOnly:true});

  // 3. Delete the sheets except for a sheet you want to export.
  spreadsheet.getSheets().forEach(sheet => {
    if (exportSheetName != sheet.getName()) spreadsheet.deleteSheet(sheet)
  });

  // 4. Retrieve the blob from the export URL.
  const id = spreadsheet.getId();
  const xlsxBlob = UrlFetchApp.fetch(`https://docs.google.com/spreadsheets/export?id=${id}&exportFormat=xlsx`, {headers: {authorization: `Bearer ${ScriptApp.getOAuthToken()}`}}).getBlob();

  // 5. Crete the blob as a file.
  DriveApp.createFile(xlsxBlob.setName(`${exportSheetName}.xlsx`));

  // 6. Delete the temporate Spreadsheet.
  DriveApp.getFileById(id).setTrashed(true);
}
  • 在这种情况下,临时电子表格将移动到垃圾箱。

注意:

  • 在这种情况下,请在脚本编辑器中启用V8。
  • 在上面的脚本中,XLSX文件创建到了根文件夹。如果要将文件创建到特定文件夹,请告诉我。

参考文献:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。