Google应用程序脚本数组未按预期写入工作表



使用谷歌应用程序脚本,我试图将多个谷歌工作表中的数据合并到一个工作表中。为此,我使用push将每张图纸的值保存到一个数组中。数组似乎正确地保存了数据,但是在写入数据时出现了一些不正常的情况。它似乎是用来写出数组的长度函数。

以下是日志文件中的数组值:

[[[Text 1, Text 2, Gallon, 17.12, Tier 2 Generic Chem, 1.0, 125.0, 280.0, 120.0, , 95.0, 55.0, , , , 150.0, , 826.0, 14141.12, , , ], [Text 3, Text 4, Gallon, 16.11, Tier 2 Generic Chem, , , 270.0, , , , , , , , , , 270.0, 4349.7, , , ]]] 

问题似乎与以下代码有关,可能是因为上面的数组中有3个,但我不确定如何修复它,所以它引用了正确的元素。

consol_sheet.getRange(2,1,finalvalues2.length,finalvalues2[0].length).setValues(finalvalues2);

期望值:

finalvalues2.length = 2finalvalues2[0].length = 21

完整代码:

function getLastDataRow(sheet) {
var lastRow = sheet.getLastRow();
var range = sheet.getRange("B" + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}              
}
function iterateSheets2() 
{
var ss=SpreadsheetApp.getActive();
var folder=DriveApp.getFolderById('1k6ja-fmgxiVSY_Kw3kuwLTXWIkQCmTmD');//replace id with actual id of folder
var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
var consol_sheet = SpreadsheetApp.openById('1HpQYDC8eRVLbEzOOGKsqHE6RGBKTE-6sqx5kTf8-TzM').getActiveSheet();
consol_sheet.clear()
var final_values = [];
var finalvalues2 = [];
while(files.hasNext())
{
var file=files.next();
Logger.log(file.getName());  

var ts=SpreadsheetApp.openById(file.getId());  //file.getId()            
var allShts = ts.getSheetByName('FY20')                    
var lr = getLastDataRow(allShts)       
var consol_values = allShts.getRange(9,1,lr-8,22).getValues();                   
finalvalues2.push(consol_values[0]) 
Logger.log(finalvalues2)


}
// consol_sheet.getRange(2,1,consol_values.length,consol_values[0].length).setValues(consol_values);
consol_sheet.getRange(2,1,finalvalues2.length,finalvalues2[0].length).setValues(finalvalues2);

您的数组是三维的,要在电子表格中设置值,您需要一个二维的值范围

不确定你是如何获得这个阵列的,但你可以用将其转换为二维

finalvalues2 = finalvalues2[0];

随后,您在图纸中设置值的请求应按预期工作。

更新

如果你的三维数组有多个二维条目,转换它的一种优雅方法是使用concat和apply((的组合:

finalvalues2 = [].concat.apply([],finalvalues2);

相关内容

最新更新