我有一個檔案夾,可以接收多個 xlsx 檔案,這些檔案將通過 Google 表單上傳。每周會添加幾次新表,并且需要添加這些資料。
我想將所有這些 xlsx 檔案轉換成一張可以提供資料作業室的作業表。
我已經開始使用這個腳本:
function myFunction() {
//folder ID
var folder = DriveApp.getFolderById("folder ID");
var filesIterator = folder.getFiles();
var file;
var filetype;
var ssID;
var combinedData = [];
var data;
while(filesIterator.hasNext()){
file = filesIterator.next();
filetype = file.getMimeType();
if (filetype === "application/vnd.google-apps.spreadsheet"){
ssID = file.getId();
data = getDataFromSpreadsheet(ssID)
combinedData = combinedData.concat(data);
}//if ends here
}//while ends here
Logger.log(combinedData.length);
}
function getDataFromSpreadsheet(ssID) {
var ss = SpreadsheetApp.openById(ssID);
var ws = ss.getSheets()[0];
var data = ws.getRange("A:W" ws.getLastRow()).getValues();
return data;
}
不幸的是,該陣列回傳 0!我認為這可能是由于 xlsx 問題。
uj5u.com熱心網友回復:
1.獲取excel資料
不幸的是,Apps Script 不能直接處理 excel 值。您需要先將這些檔案轉換為 Google Sheets 才能訪問資料。這很容易做到,并且可以使用 Drive API(您可以在此處查看檔案)通過代碼頂部的以下兩行來完成。
var filesToConvert = DriveApp.getFolderById(folderId).getFilesByType(MimeType.MICROSOFT_EXCEL);
while (filesToConvert.hasNext()){ Drive.Files.copy({mimeType: MimeType.GOOGLE_SHEETS, parents: [{id: folderId}]}, filesToConvert.next().getId());}
請注意,這會通過創建 excel 的 Google 表格副本來復制現有檔案,但不會洗掉 excel 檔案本身。另請注意,您需要激活 Drive API 服務。
2.從combinedData中洗掉重復項
這不像從常規陣列中洗掉重復項那么簡單,就像combinedData陣列陣列一樣。然而,它可以通過創建一個中間物件來實作,該物件將行陣列的字串化版本存盤為鍵,并將行陣列本身存盤為值:
var intermidiateStep = {};
combinedData.forEach(row => {intermidiateStep[row.join(":")] = row;})
var finalData = Object.keys(intermidiateStep).map(row=>intermidiateStep[row]);
額外的
我還在您的代碼中發現了另一個錯誤。在宣告要讀取的值的范圍時,您應該添加 1(或您要讀取的第一行),因此
var data = ws.getRange("A1:W" ws.getLastRow()).getValues();
代替:
var data = ws.getRange("A:W" ws.getLastRow()).getValues();
就目前而言,Apps 腳本無法理解您想要閱讀的確切范圍,只是假設它是整個頁面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/403420.html
標籤:
