gpt4 book ai didi

multidimensional-array - 从数组到 setValues 给出 : "Cannot convert to ."

转载 作者:行者123 更新时间:2023-12-03 17:43:42 28 4
gpt4 key购买 nike

背景。我想从周格式更改时间表(每行显示 7 天,没有日期仅在来自 yyww 的周中可用(例如 1225)。在另一张表中,一列列出周,另一列列出日期。

方法。我将这两张表放入两个数组中,将我设置的第三个数组打包到第三个表中。

问题。此行给出错误消息:“无法转换为。”

  sheet_IndataTabell.getRange(1,1,IndataTable.length+1,7).setValues(IndataTable);

来源。
您可以查看文档 here以及下面的完整功能:
function UpdateTable() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet_Indata = ss.getSheetByName("Indata");
var sheet_IndataTabell = ss.getSheetByName("Indata_Tabell");
var sheet_Calendar = ss.getSheetByName("Kalender");

//Get the table into arrays
var Indata = sheet_Indata.getDataRange();
var CalendarTable = sheet_Calendar.getDataRange();

//Gets the values in the Indata to an Array
var NumberRows = Indata.getLastRow();
var NumberCols = Indata.getLastColumn();
//Browser.msgBox(NumberRows + " " + NumberCols);
var IndataArray = new Array(NumberRows,NumberCols);
var IndataArray = Indata.getValues();

//Create an Array to store the result
var IndataTable = new Array(((NumberCols-1)*(NumberRows-1)),7);
//Browser.msgBox("First the IndataTable is defined as: (NumberCols-1)*(NumberRows-1) (" + (NumberCols-1)*(NumberRows-1) + ").");

//Gets the values in the Calendar to an Array
var NumberRows_Cal = CalendarTable.getLastRow();
var NumberCols_Cal = CalendarTable.getLastColumn();
//Browser.msgBox(NumberRows + " " + NumberCols);
var CalendarArray = new Array(NumberRows_Cal,NumberCols_Cal);
var CalendarArray = CalendarTable.getValues();

for (i=1; i<(IndataArray.length); i++)
{

for (j=3; j<10; j++) {

IndataTable[i*7+j-3-7] = {};

//adds the users
IndataTable[i*7+j-3-7][0] = IndataArray[i][1];

//adds the week numbers
var Vecka = IndataArray[i][2];
IndataTable[i*7+j-3-7][1] = Vecka;

//adds the hours
IndataTable[i*7+j-3-7][2] = IndataArray[i][j];

//adds the projects
IndataTable[i*7+j-3-7][3] = IndataArray[i][10];

//adds the day
var Dag = (j-2);
IndataTable[i*7+j-3-7][4] = Dag;

//Gets the date from the Calendar
IndataTable[i*7+j-3-7][5] = "=VLOOKUP(G" + (i*7+j-9) + ";Kalender!$B$1:C;2)+E" + (i*7+j-9) + "-1";

IndataTable[i*7+j-3-7][6] = Vecka+"_"+Dag;

//Browser.msgBox("[" + (i*7+j-3-7) + "][n]: " + IndataTable[i*7+j-3-7][0] + ", " + IndataTable[i*7+j-3-7][1] + ", " + IndataTable[i*7+j-3-7][2] + ", " + IndataTable[i*7+j-3-7][3] + ", " + IndataTable[i*7+j-3-7][4] + ", " + IndataTable[i*7+j-3-7][5] + ", " + IndataTable[i*7+j-3-7][6]);

}

}


sheet_IndataTabell.clear();
//Browser.msgBox("IndataTable.length: " + IndataTable.length);
//Browser.msgBox("IndataTable[0].length: " + IndataTable[0].length);
//Browser.msgBox("Last row on Range: " + sheet_IndataTabell.getRange(1, 1, IndataTable.length,7).getLastRow());
//Browser.msgBox(IndataTable);

sheet_IndataTabell.getRange("A1:G28").setValues(IndataTable);

//sheet_Indata.sort(3,true);

//Browser.msgBox("Uppdatering klar!");
sheet_IndataTabell.getRange("J1").setValue(Date());

}

最佳答案

setValues()getValues()始终使用二维数组,即使范围只有 1 行高,因此您应该使用:

LINE 212     sheet_IndataTabell.getRange(1, 1, 1, 2).setValues([IndataTable_Temp]) 

(注意我添加的那对括号。)

此外,即使这不是问题,您也不需要在使用 Range.getValues() 之前定义数组的大小。 ,只需放下 (NumberRows_Cal,NumberCols_Cal)你把它作为参数,
var CalendarArray = new Array() 

足够了。

编辑:关于您的评论:请在第 225 行的代码中添加这两个 Logger.log,当您获得 2 个数组时,其中一个在 setValues() 中不可用,您将看到发生了什么:
    Logger.log(IndataTable);//this one contains JS objects between {}
Logger.log(IndataTable_Temp);// this one contains array elements between [[]]
//Writes the array content to the sheet
sheet_IndataTabell.getRange(1, 1, i, 11).setValues(IndataTable_Temp);

EDIT2 :我对脚本的末尾做了一个小改动,现在数据是纯字符串,数组是真正的 2D(再次看括号):
  //Reconstruction the Array, I do not know why this is needed
var IndataTable_Temp = new Array();
for (i=0; i<IndataTable.length; i++) {
// Logger.log(typeof(IndataTable[i][0]))
IndataTable_Temp.push([
IndataTable[i][0],
IndataTable[i][1],
IndataTable[i][2],
IndataTable[i][3],
IndataTable[i][4],
IndataTable[i][5],
IndataTable[i][6],
IndataTable[i][7],
IndataTable[i][8],
IndataTable[i][9],
IndataTable[i][10]
]);
}
Logger.log(IndataTable)
Logger.log(IndataTable_Temp)
//Writes the array content to the sheet
sheet_IndataTabell.getRange(1, 1, IndataTable_Temp.length, IndataTable_Temp[0].length).setValues(IndataTable_Temp);

//Sets timestamp
sheet_IndataTabell.getRange("L1").setValue(Date());

关于multidimensional-array - 从数组到 setValues 给出 : "Cannot convert to .",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061470/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com