簡體   English   中英

谷歌工作表腳本編輯器導入多張工作表

[英]google sheet script editor import multiple sheets

客觀的

我正在嘗試使用谷歌腳本編輯器將谷歌驅動器上的 csv 文件導入我的谷歌工作表。 有人可以向我澄清我對腳本的誤解以及我需要調整以允許我將多個工作表請求粘貼到下面的內容嗎? 抱歉,如果這是直接的事情,這是我第一次使用腳本編輯器,我對此並不熟悉。

問題

目前,我的代碼僅填充 1 張數據。 與將第二部分視為我想要填充的下一張工作表相反,使用不同的 csv 工作表 ID。

我試過的

  • 將變量更改為更獨特,以使工作表將我的變量視為不同,因為我認為它每次都在擦除。
  • 查看其他在線幫助論壇,但沒有找到我能理解的類似內容。

當前代碼

function onOpen(e) {

SpreadsheetApp.getUi()

.createMenu('RefreshData')

.addItem('Run getCSV', 'getCSV')

.addToUi()

}



function getCSV() {

//ENTER YOUR CSV FILE ID IN THE getFileByID in the ""

var file = DriveApp.getFileById("<file_id>");

var csvFile = file.getBlob().getDataAsString();

var csvData = Utilities.parseCsv(csvFile);

//CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

sheet.clear();

sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

function getCSV() {

    //ENTER YOUR CSV FILE ID IN THE getFileByID in the ""

    var file = DriveApp.getFileById("<file_id2>");

    var csvFile = file.getBlob().getDataAsString();

    var csvData = Utilities.parseCsv(csvFile);

    //CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

    sheet.clear();

    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

    }

你已經定義了兩次getCSV() ,這會導致問題。 函數名,就像變量一樣,應該是唯一的。 否則,它們將被重寫。

以兩個test()函數為例。 每次運行testAll() ,輸出將始終為 2。

function testAll() {
  test(); // 2.0
  test(); // 2.0
}

function test() {
  Logger.log(1);
}

function test() {
  Logger.log(2);
}

您可以做的是修改getCSV()以便它接受輸入,然后創建一個將數據傳遞給它的新函數。 然后在菜單中調用該新函數。

/**
 * Add a custom menu to the spreadsheet.
 */
function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu("RefreshData")
  .addItem("Get CSVs", "importSheets")
  .addToUi();
}

/**
 * Imports all CSV files.
 */
function getCSVs() {
  // Define the CSV files and where you want them to be saved
  var csvs = [
    { fileId: "FILE_ID_1", sheetName: "Sheet1" },
    { fileId: "FILE_ID_2", sheetName: "Sheet2" }
  ];

  // Import the CSVs
  for (var i = 0; i < csvs.length; i++) {
    getCSV_(csvs[i].fileId, csvs[i].sheetName);
  }
}

/**
 * Get the CSV data from a specified file and import into the desired
 * sheet of the active spreadsheet.
 * @param {String} fileId - The file ID of the CSV file
 * @param {String} sheetName - The name of the destination sheet
 */
function getCSV_(fileId, sheetName) {
  //ENTER YOUR CSV FILE ID IN THE getFileByID
  var file = DriveApp.getFileById(fileId);
  var csvFile = file.getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csvFile);

  //CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  sheet.clear().getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}

創建了一個附加函數 getCSV2,它聲明了工作表名稱和 ID,然后在 getCSV 函數中填充和循環。

function onOpen(e) {

SpreadsheetApp.getUi()

.createMenu('RefreshData')

.addItem('Run getCSV', 'getCSV')

.addToUi()

}

function getCSV() {
  getCSV2("sheet1", "<file_id1>");
  getCSV2("sheet2", "<file_id2>");
}

function getCSV2(name, id) {

var file = DriveApp.getFileById(id);

var csvFile = file.getBlob().getDataAsString();

var csvData = Utilities.parseCsv(csvFile);

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);

sheet.clear();

sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

暫無
暫無

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

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