Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解决HTML表中列的求和问题_Javascript_Google Apps Script - Fatal编程技术网

Javascript 如何解决HTML表中列的求和问题

Javascript 如何解决HTML表中列的求和问题,javascript,google-apps-script,Javascript,Google Apps Script,如果有人能帮忙,我会很伤心的? 我被这个问题困扰着,我知道我很接近,但需要帮助来找出如何调试这个问题 我有一个从工作表到HTML页面onLoad=“reloadTable()获取值的表 一切都正常,除了当我尝试对一列求和时,我得到的和值=NaN 以我的方式而不是计算 我知道,如果我将表格硬编码到HTML文件中,而不是从工作表中动态加载表格时,它会起作用 我已经检查了格式,看看我是否真的有数字 我已经删除了我的表格标题 我已将CODE.GS脚本更改为getValues(),而不是getDispla

如果有人能帮忙,我会很伤心的? 我被这个问题困扰着,我知道我很接近,但需要帮助来找出如何调试这个问题

我有一个从工作表到HTML页面onLoad=“reloadTable()获取值的表

一切都正常,除了当我尝试对一列求和时,我得到的和值=NaN 以我的方式而不是计算

我知道,如果我将表格硬编码到HTML文件中,而不是从工作表中动态加载表格时,它会起作用

我已经检查了格式,看看我是否真的有数字 我已经删除了我的表格标题 我已将CODE.GS脚本更改为getValues(),而不是getDisplayValues() 什么都不管用。 如果删除parseInt(),它将返回一个列[2]的数字字符串 像这样 总和值=05816111120

这是我遇到问题的函数

function sum() {
        var table = document.getElementById("table1"), sumVal = 0;
        for(var i = 1; i < table.rows.length; i++)
        {
            sumVal = sumVal + parseInt(table.rows[i].cells[2].innerHTML);
        }
        document.getElementById("val").innerHTML = "Sum Value = " + sumVal;
        console.log(sumVal);
}
函数和(){
var table=document.getElementById(“表1”),sumVal=0;
对于(变量i=1;i
表视图

这就是我的表如何加载的,它工作正常

<script>
function reloadTable() {
          google.script.run.withSuccessHandler( function (table) {
         document.getElementById("ParcelCurrentClientCurrentInvoice").innerHTML = table;// pass table data to HTML

setTimeout(sum,2000);// run func. to sum column 3 of loaded table after 2 seconds

}
).getTable();//get data table from sheet server side

 }
</script>

函数重载表(){
google.script.run.withSuccessHandler(函数(表){
document.getElementById(“ParcelCurrentClientCurrentInvoice”).innerHTML=table;//将表数据传递给HTML
setTimeout(sum,2000);//运行func.在2秒后对加载表的第3列求和
}
).getTable();//从图纸服务器端获取数据表
}
serverSide.GS

 function getTable() {
  var sheet = SpreadsheetApp.openById("1ZawJJjI-Xhfgsdfgdfgsdfgsdfgsdfg").getSheetByName("RequisicaoConsolidationList");
   //var lastRow = sheet.getLastRow();
   var lastRow = getLastPopulatedRow(sheet); 
  var data = sheet.getRange(4,7,lastRow,4).getDisplayValues();
  var table = "<table id='table1' border='0' ><tr> <th>ID</th> <th>DATA</th> <th>QTD</th> <th>VALOR</th><th><input type='checkbox' name='check-All' onchange='checkAlltable1()' ></th> </tr>";
   //<td><input type='checkbox' /></td>
  for( var i=0; i<data.length; i++ ) {
    table = table.concat("<tr>");
    for( var j=0; j<data[0].length; j++ ) {
      table = table.concat("<td>");
      table = table.concat(data[i][j].toString());
      table = table.concat("</td>");
    }  

    table = table.concat("<td><input type='checkbox' name='check-tab1'></td></tr>");
     }
     table= table.concat("</table>");
  Logger.log(table);
  return table;
}
函数getTable(){
var sheet=SpreadsheetApp.openById(“1ZawJJjI XHFGSSDFGDFGSDFG”).getSheetByName(“RequisicaoConsolidationList”);
//var lastRow=sheet.getLastRow();
var lastRow=getLastPopulatedRow(表格);
var data=sheet.getRange(4,7,lastRow,4).getDisplayValues();
var table=“ID DATA QTD VALOR”;
//

对于(var i=0;i您遇到的问题是,您正在获取空单元格并尝试添加它们的数值,这反过来会使整个总和变成
NaN
。您可以在添加之前检查值,如下所示

// get the cell value
var cellValue = table.rows[i].cells[2].innerHTML;

// check that the value is a number before adding it to the total
if (!isNaN(cellValue)) {
    sumVal = sumVal + parseFloat(cellValue);
}

根据您稍后的评论,我还使用了
parseFloat()
,因为数字并不总是整数。

您遇到的问题是,您将得到空单元格并尝试添加它们的数值,这反过来会使整个总和变为
NaN
。您可以在添加之前检查该值,如下所示

// get the cell value
var cellValue = table.rows[i].cells[2].innerHTML;

// check that the value is a number before adding it to the total
if (!isNaN(cellValue)) {
    sumVal = sumVal + parseFloat(cellValue);
}

根据您稍后的评论,我还使用了
parseFloat()
因为数字并不总是整数。

请插入一点控制台登录,查看它试图添加的值。我怀疑大多数情况下您获得的是有效的数字,但请尝试添加字符串。查看表格,可能是底部的空行导致了问题。或者,检查InnerHtml!=“首先,在添加它之前。@Archer,你摇滚,你是对的,最后的重影行是问题所在。我从for循环中减去了它们,就像这样:data.length-2;结果成功了。有没有办法告诉脚本忽略那些空行或单元格?你说的“检查innerHTML!=”是什么意思您是指在代码中放置if语句吗?另一件事是,我的行在小数点ei后有数字:150.15+10.10应该=160.25,但它将其舍入为160,我使用了sumVal.toFixed(2);但这只会将.00添加到我的结果中,比如160.00,也许这应该是另一个问题。很高兴这有帮助。是的,我的意思是在添加值之前,只插入一个if语句来检查值是否为NaN。另外,使用
parseFloat()
解析非整数。我将为您提供一个答案。登录控制台查看它试图添加的值。我怀疑您大部分时间都在获取有效数字,但随后尝试添加字符串。查看表,可能是底部的空行导致了问题。Alterna首先,请检查innerHtml!=“在添加它之前。@Archer,你说得对,最后的重影行是问题所在。我从for循环中减去了它们,就像这样:data.length-2;它就起作用了。有没有办法告诉脚本忽略那些空行或单元格?你说的“检查innerHtml!=“检查”是什么意思?”您是指在代码中放置if语句吗?另一件事是,我的行在小数点ei后有数字:150.15+10.10应该=160.25,但它将其舍入为160,我使用了sumVal.toFixed(2);但这只会将.00添加到我的结果中,比如160.00,也许这应该是另一个问题。很高兴这有帮助。是的,我的意思是,在添加值之前,只需放入一个if语句来检查值是否为NaN。另外,使用
parseFloat()
来解析非整数。我将为您提供一个答案。