簡體   English   中英

Google Apps 腳本如何將特定工作表導出為 csv 格式

[英]Google Apps Script how to export specific sheet as csv format

在 MIT Inventor II 中,我使用 web 組件通過 google apps 腳本的 doGet() 獲取 SpreadsheetID 和 SheetID。 獲得信息后,我使用另一個 web 組件設置 url,如下所示,以從特定工作表中獲取 csv 格式的文件。 我的問題是如何讓 GAS 獲取 SpreadsheetID 和 SheetID,然后一次導出 csv 文件,這樣我就不必在 Inventor 端使用 2 web 組件?

GAS代碼如下。 這是為了“返回”電子表格 ID 和工作表 ID。

function doGet(e) {

filename = e.parameter.account;

fileList = DriveApp.getFilesByName(filename);

while (fileList.hasNext()) {
var fileID = fileList.next().getId()
    }

var file = SpreadsheetApp.openById(fileID) ;

   sheet = file.getSheetByName("Message").activate()

  var messageID = sheet.getSheetId();  

return ContentService.createTextOutput([fileID,messageID]);

在獲得 SpreadsheetID 和 SheetID 后,我必須從 Inventor 端設置第二個 web 組件以獲取 csv 文件,見下文。

https://docs.google.com/spreadsheets/d/xxxxSpreadsheetIDxxxx/edit#gid=sheetID

以下是如何在谷歌驅動器中創建所選工作表的 csv 文件:

function sheetToCsv()
{
    var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
    var sheet_Name = "Sheet1"
  
  
    var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
  
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_Name)
      var sheetNameId = sheet.getSheetId().toString();
  
      params= ssID+"/export?gid="+sheetNameId +"&format=csv"
      var url = "https://docs.google.com/spreadsheets/d/"+ params
      var result = UrlFetchApp.fetch(url, requestData);  
  
   var resource = {
  title: sheet_Name+".csv",
  mimeType: "application/vnd.csv"
     }
   var fileJson = Drive.Files.insert(resource,result)
  
} 

該代碼創建了一個 csv 文件,其中包含Sheet1的內容。

為了運行上述 function 您需要激活Advanced Drive Service

解釋:

Go 到資源=>高級 Google 服務=>激活驅動器 API

另一種選擇是將 csv 文件創建到特定文件夾,然后您需要將代碼的資源部分替換為:

var folder_id ='id';
       
   var resource = {
  title: sheet_Name+".csv",
  mimeType: "application/vnd.csv",
  parents: [{ id: folder_id }]
     }

我的應用程序是如何將 Google 表格電子表格的選項卡保存到共享驅動器中的 CSV 文件。 根據Marios 在這篇文章中的回答,對默認的“我的驅動器”進行操作相對容易,但我一直在努力解決共享驅動器的問題,直到我遇到ziganotschka 的示例解決了我的問題。

我的簡單應用程序腳本的代碼是:

function sheetToCsv()
{
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
var sheet_Name = "[Your sheet name goes here]";

var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_Name);
var sheetNameId = sheet.getSheetId().toString();

params= ssID+"/export?gid="+sheetNameId +"&format=csv";
var url = "https://docs.google.com/spreadsheets/d/"+ params;
var result = UrlFetchApp.fetch(url, requestData);  

var resource = {
  title: sheet_Name+".csv",
  mimeType: "MimeType.CSV",
  parents:[{
  "id": "[Your Shared Drive Folder ID goes here]"
      }]
    }

var optionalArgs={supportsAllDrives: true};

var fileJson = Drive.Files.insert(resource, result, optionalArgs);

} 

下一步是將時間戳添加到文件名,並使用計時器使腳本定期執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM