Javascript 如何解决HTML表中列的求和问题
如果有人能帮忙,我会很伤心的? 我被这个问题困扰着,我知道我很接近,但需要帮助来找出如何调试这个问题 我有一个从工作表到HTML页面onLoad=“reloadTable()获取值的表 一切都正常,除了当我尝试对一列求和时,我得到的和值=NaN 以我的方式而不是计算 我知道,如果我将表格硬编码到HTML文件中,而不是从工作表中动态加载表格时,它会起作用 我已经检查了格式,看看我是否真的有数字 我已经删除了我的表格标题 我已将CODE.GS脚本更改为getValues(),而不是getDisplayValues() 什么都不管用。 如果删除parseInt(),它将返回一个列[2]的数字字符串 像这样 总和值=05816111120 这是我遇到问题的函数Javascript 如何解决HTML表中列的求和问题,javascript,google-apps-script,Javascript,Google Apps Script,如果有人能帮忙,我会很伤心的? 我被这个问题困扰着,我知道我很接近,但需要帮助来找出如何调试这个问题 我有一个从工作表到HTML页面onLoad=“reloadTable()获取值的表 一切都正常,除了当我尝试对一列求和时,我得到的和值=NaN 以我的方式而不是计算 我知道,如果我将表格硬编码到HTML文件中,而不是从工作表中动态加载表格时,它会起作用 我已经检查了格式,看看我是否真的有数字 我已经删除了我的表格标题 我已将CODE.GS脚本更改为getValues(),而不是getDispla
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()
来解析非整数。我将为您提供一个答案。