我正在构建一个Google脚本,它可以自动地将Google电子表格写入Smartsheet,但是由于父母/sibbling已经形成了格式,所以不需要手动索引,因为我已经在电子表格中通过一个编号列完成了这一操作。
我设法写到了Smartsheet,但我似乎想不出如何发送包含父/sibblings集的批处理(600+)行,这些行位于同一个urlFetch调用中。
一些问题应该解决我的问题:
是否可以确定/指定我将要包含的"rowId“?
在提供行时可以设置"parentRowNumber“吗?
是否有可能在不知道"rowId“的情况下对插入行进行批处理?
由于我还没有在这里找到google应用程序-script+ smartsheet-api,下面是如何插入一行(工作代码):
function adcionarLinhaSmartSheet(){
//Static for testing
var rows = [];
rows[0] = {};
rows[0].cells = [];
rows[0].cells[0] = {};
rows[0].cells[0].columnId = "[ROW_ID]";
rows[0].cells[0].value = 14;
rows[0].cells[0].strict = false;
var payload = {"toBottom":true, "rows":rows};
var dadosEnviar = {headers:{Authorization:"Bearer [ACCESS_TOKEN]", "content-type":"application/json"}, "Method":"post", "payload":JSON.stringify(payload)};
var planilhaSmart = UrlFetchApp.fetch("https://api.smartsheet.com/1.1/sheet/[SHEET_ID]/rows", dadosEnviar);
}发布于 2014-08-13 21:46:49
您可以用一个POST将多个行插入到Smartsheet,但该调用中的所有行都将以相同的继承级别添加到工作表中。因此,要使用具有父/子关系的行创建工作表,可以执行以下操作:
首先,进行一个调用,将所有父级行插入到工作表中。
然后,使用新创建的行的rowIds,进行额外的调用,为每个父程序发布所有子行。您需要对每个父行的子行组进行单独的调用。
发布于 2014-08-15 21:17:32
对于最初的问题,答案是否定的,但正如书法家所回答的那样,这不是很快,也不是很快,而是有效的。
function preencherSmartSheet(){
var v_sheetId = ##########; //Id planilha, definida no cronograma
var dadosOrc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orçamento").getRange("A3:K").getValues();
var rows = [], v_maxNivel = 0, v_linhasIds = [], calls = 0, payload, tempId;
//Enviado ao smartsheet
var dadosEnviar = accessToken; // Definido na aba Smartsheet API.gs
dadosEnviar.Method = "post"; //post = incluir
//Pega os dados da planilha Smartsheet
var planilhaSmart = JSON.parse(UrlFetchApp.fetch("https://api.smartsheet.com/1.1/sheet/"+v_sheetId, accessToken));
calls++;
//Verifica qual a coluna das tarefas
var idColuna = [];
for(i in planilhaSmart.columns){
if(planilhaSmart.columns[i].title == "Nome da tarefa"){
idColuna[1] = planilhaSmart.columns[i].id;
}else if(planilhaSmart.columns[i].title == "n°"){
idColuna[0] = planilhaSmart.columns[i].id;
}
}
//verifica maior nivel para começar
for(i in dadosOrc){
if(dadosOrc[i][10] > v_maxNivel){
v_maxNivel = dadosOrc[i][10];
}
}
//Formata as linhas em Objeto JSON
for(v_nivelAtual = v_maxNivel; v_nivelAtual >= 0; v_nivelAtual--){
for(i = 0; i < dadosOrc.length; i++){
if(dadosOrc[i][10] == v_nivelAtual){
if(v_nivelAtual == v_maxNivel){
for(; i < dadosOrc.length; i++){
if(dadosOrc[i][10] == v_nivelAtual){
rows.push({"cells":[{"columnId" : idColuna[0].toString(), "strict" : false, "value" : i},
{"columnId" : idColuna[1].toString(), "strict" : true, "value" : dadosOrc[i][0].toString()}]});
}
}
}else{
rows = [];
tempId = i;
for(; i < dadosOrc.length && dadosOrc[i][10] <= v_nivelAtual; i++){
if(dadosOrc[i][10] == v_nivelAtual){
rows.push({"cells":[{"columnId" : idColuna[0].toString(), "strict" : false, "value" : i},
{"columnId" : idColuna[1].toString(), "strict" : true, "value" : dadosOrc[i][0].toString()}]});
}
}
}
if(v_nivelAtual < v_maxNivel){
payload = {"toBottom":true, "rows":rows, "parentId" : dadosOrc[tempId][1].toString()};
}else{
payload = {"toBottom":true, "rows":rows};
}
dadosEnviar.payload = JSON.stringify(payload);
UrlFetchApp.fetch("https://api.smartsheet.com/1.1/sheet/"+v_sheetId+"/rows", dadosEnviar);
calls++;
}
}
planilhaSmart = JSON.parse(UrlFetchApp.fetch("https://api.smartsheet.com/1.1/sheet/"+v_sheetId, {headers:cabecalhoSmartsheet}));
calls++;
//Array com os id's da linhas pais, indice do array = linha do pai
for(i in planilhaSmart.rows){
v_linhasIds[planilhaSmart.rows[i].cells[0].value] = planilhaSmart.rows[i].id;
}
//Coloca no item 1 do array de dados do orçamento o id da linha pai das mesmas
for(i in dadosOrc){
if((dadosOrc[i][10]*1) == ((v_nivelAtual*1) - 1)){
for(ii = i; ii >= 0; ii--){
if(v_linhasIds[ii]){
dadosOrc[i][1] = v_linhasIds[ii]
ii = 0;
}
}
}
}
}
Logger.log(calls);
}https://stackoverflow.com/questions/25294847
复制相似问题