我正在使用以下代码来获取我所有具有数字名称的工作表的所有值。找到工作表数字名称后,必须将第6列的第8行到第108行求和。所有工作表必须在正确的数组中求和。现在,我的脚本在崩溃后将数据添加到数组中,而不是求和。
示例(单元格=值:变量=值)
function CalculTotal() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var substring1;
var colonne=[];
for (var i=0 ; i<sheets.length ; i++)
{
substring1=sheets[i].getName();
if(!isNaN(parseFloat(substring1)) && isFinite(substring1)){
colonne=colonne+(ss.getSheetByName(substring1).getRange(8,6,100).getValues());
}
}
s.getRange(8,4,100).setValues(colonne);
}
答案 0 :(得分:0)
这里是如何添加2个数组的示例,但请注意,这是以2D数组的形式完成的。 getValues()返回一个数组array [i] i =行数,array [i] [j] j是两个索引都从0开始的列。setValues()的工作方式相同,但是放置一个2D数组。
function CalculTotal() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var substring1;
var colonne=[];
// Initialize result array
for( var i=0; i<100; i++ ) colonne[i] = [0];
for (var i=0 ; i<sheets.length ; i++)
{
substring1=sheets[i].getName();
if(!isNaN(parseFloat(substring1)) && isFinite(substring1)){
var values = ss.getSheetByName(substring1).getRange(8,6,100,1).getValues();
for( var j=0; j<values.length; j++ ) {
colonne[j][0] = colonne[j][0]+values[j][0];
}
}
}
s.getRange(8,4,100,1).setValues(colonne);
}
答案 1 :(得分:0)
尝试一下:
function CalcTotal() {
var ss=SpreadsheetApp.getActive();
var sheets=ss.getSheets();
var regex=new RegExp('^[\\d\\.,]+$')
var total=0;
var n=1;
var html='<style>th,td{border:1px solid #000;}</style><table>';
html+=Utilities.formatString('<tr><th>%s</th><th>%s</th><th>%s</th></tr>','Item','Sheet','Sum')
for(var i=0;i<sheets.length;i++){
var name=sheets[i].getName();
var sum=0;
var nameisnum=false;
var result=regex.exec(name);
if(result){
nameisnum=true;
var shi=ss.getSheetByName(name);
var rgi=shi.getRange(8,6,101,1);
var vAi=rgi.getValues();
for(var j=0;j<vAi.length;j++){
sum+=vAi[j][0];
}
if(nameisnum){
html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',n++,name,sum);
total+=sum;
}
}
}
html+=Utilities.formatString('<tr><td colspan="2">Total:</td><td>%s</td></tr>',total);
html+='</table>';
var ui=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModelessDialog(ui, 'Sheet Sums');
}