【问题标题】:google sheet script editor import multiple sheets谷歌工作表脚本编辑器导入多张工作表
【发布时间】:2019-12-09 11:48:16
【问题描述】:

目标

我正在尝试使用谷歌脚本编辑器将谷歌驱动器上的 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);

    }

【问题讨论】:

  • 看起来您正在使用相同的函数名称来提取 2 个不同的 CSV - getCSV()。在这种情况下,建议您重命名其中一个并从另一个调用它。

标签: csv google-apps-script google-sheets


【解决方案1】:

您已经定义了两次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);
}

【讨论】:

    【解决方案2】:

    创建了一个附加函数 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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多