簡體   English   中英

應用腳本新的 Google 表格創建問題

[英]App Script new Google Sheet creation issue

我正在嘗試編寫一個應用程序腳本,該腳本從多個不同的電子表格(完全獨立的文檔)中獲取字符串數據並將它們全部放入一個新的電子表格中。 當我運行記錄器時,它會顯示我想要的所有數據。 我希望每條數據都顯示在 A 列中,但是當我運行我的腳本時,它只在電子表格中放置 1 個數據點,而不是全部。 有人可以給我一些指導嗎? 這是我的代碼:

function pullTogether() {
  var files = DriveApp.getFolderById('Folder ID').searchFiles('title != "nothing"');
  const rangeName = 'Sheet1!B2:C';
  while(files.hasNext()){
    var xFile = files.next();
    var name = xFile.getId();
    
    const values = Sheets.Spreadsheets.Values.get(name, rangeName).values;
    for (const row in values) {
      var a1 = (values[row][0]);
      Logger.log(a1);
    
  var ss = SpreadsheetApp.openById("ID of new spreadsheet"); //I have the real ID in my code
  var cell = ss.getRange("A2");
  cell.setValue(a1);
     
}
}

}

我相信你的目標如下。

  • 您想從特定文件夾下每個電子表格的“B”列中檢索值。
  • 您想將檢索到的值放入目標工作表的“A”列。

修改點:

  • 關於but when I run my script, it only puts 1 data point in the spreadsheet instead of all of them. ,當我看到你的腳本時,檢索到的值總是放在目標工作表的單元格“A2”中。 我認為這可能是您的問題的原因。

  • 在您的腳本中,我認為當使用以下流程時,流程成本會變低。 通過此流程,您的問題也可以解決。

  • 在您的情況下,即使不使用 Sheets API,腳本也可能使用getValues()工作。

當這些點反映在你的腳本中時,它變成如下。

修改后的腳本:

請設置文件夾 ID 和目標電子表格 ID。

function pullTogether() {
  // Retrieve values from each Spreadsheet.
  var values = [];
  var files = DriveApp.getFolderById('Folder ID').searchFiles(`title != 'nothing' and mimeType='${MimeType.GOOGLE_SHEETS}'`);
  var sheetName = 'Sheet1'
  while (files.hasNext()) {
    var xFile = files.next();
    var sheet = SpreadsheetApp.open(xFile).getSheetByName(sheetName);
    if (sheet) {
      var v = sheet.getRange("B2:B" + sheet.getLastRow()).getValues();
      values = [...values, ...v];
    }
  }

  // Put values to the destination sheet.
  var ss = SpreadsheetApp.openById("ID of new spreadsheet"); //I have the real ID in my code
  var dstSheet = ss.getSheets()[0];
  dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}

筆記:

  • 雖然我不確定你的實際情況,但是當上面的腳本在大數據下不起作用時,請進行如下修改。

    •  dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
    •  Sheets.Spreadsheets.Values.update({ values }, ss.getId(), `'${dstSheet.getSheetName()}'!A2`, { valueInputOption: "USER_ENTERED" });

參考:

暫無
暫無

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

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