为什么方法setValue与Browser.msgBox输出的不同?

时间:2019-04-28 03:24:08

标签: javascript google-apps-script google-sheets spreadsheet

由于我无法使.toFixed(2)正常工作,因此我设计了自己的代码,在“。”之后添加所需的十进制数字。通过简单地将两个带有+号的字符串连接起来。

当Browser.msgBox输出正确连接的2个字符串为“ 1.00”时, 似乎getRange.setValue仅将2个字符串中的第一个输出为“ 1”:(

function myFunction() {
var ss_calc = SpreadsheetApp.openById("1cFt0DbnpWGHquKk4ijxdKhwkaF8GhumWDWjTpHuSXbQ");
var sheet_calc = ss_calc.getSheetByName("Calcs");      
var ss_source = SpreadsheetApp.openById("1gXeXmiw9EnzQXaiE7H8_zrilE2zyotlSuuIS8X9IxfQ");
var sheet_source = ss_source.getSheetByName("Farmah");  

var decDig = ""; var strDec = ""; var impVal = "";
impVal = sheet_source.getRange(12,7).getValue().toString();
if (JSON.stringify(impVal).indexOf(".")>-1) 
 { if (JSON.stringify(impVal).split(".")[1].length < 2 ) 
  { 
   if (JSON.stringify(impVal).split(".")[1].length < 1) 
    { 
     decDig = "00"; 
    }
   else 
    { 
     decDig = "0"; 
    }
   }
  } 
else 
{ 
 decDig = ".00"; 
}
var strDec = impVal.toString() + decDig.toString();
Browser.msgBox(JSON.stringify(impVal).indexOf(".")+ "\\n" +
           impVal.toString()+ "\\n" +
           decDig+ "\\n" +
           strDec);
sheet_calc.getRange(1,1).setValue(strDec);
}  

来自sheet_calc.getRange(1,1).setValue(strDec);我期望得到输出“ 1.00”,但我只会得到“ 1”:(

我想念什么?

以下是指向Google电子表格的链接(任何具有该链接的人都可以编辑:)

(以上代码必须由脚本编辑器在下面的第一个电子表格中手动触发):

https://docs.google.com/spreadsheets/d/1cFt0DbnpWGHquKk4ijxdKhwkaF8GhumWDWjTpHuSXbQ/edit?usp=sharing

https://docs.google.com/spreadsheets/d/1gXeXmiw9EnzQXaiE7H8_zrilE2zyotlSuuIS8X9IxfQ/edit?usp=sharing

2 个答案:

答案 0 :(得分:1)

  • 您要将1.00的值放入单元格“ A1”。

如果我的理解是正确的,那么该修改如何?我认为您遇到问题的原因是,将setValue()放置的值转换为数字。由此显示1。为了将值设为1.00,我认为有3种模式。请根据您的情况选择其中之一。

模式1:

在这种模式下,根据您的问题,使用setNumberFormat("@")将值作为字符串放置。

发件人:

sheet_calc.getRange(1,1).setValue(strDec);

收件人:

sheet_calc.getRange(1,1).setNumberFormat("@").setValue(strDec);

模式2:

在这种模式下,根据您的问题,使用setNumberFormat("0.00")设置单元格的格式。

发件人:

sheet_calc.getRange(1,1).setValue(strDec);

收件人:

sheet_calc.getRange(1,1).setNumberFormat("0.00").setValue(strDec);

模式3:

在这种模式下,从共享电子表格的脚本中,当decDig".00"时,将设置格式。

发件人:

sheet_calc.getRange(x+6,c).setValue(strDec);

收件人:

var range = sheet_calc.getRange(x+6,c);
if (decDig) {
  range.setNumberFormat("0.00").setValue(strDec); // or setNumberFormat("@")
} else {
  range.setValue(strDec);
}

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:1)

  

我期望从sheet_calc.getRange(1,1).setValue(strDec);获得输出"1.00",但我只会得到"1":(

Google表格以及其他电子表格应用程序具有自动数据类型分配功能,因此,看起来像数字的东西会转换为Google表格数字数据类型,等等。

您可以在'前面加上一个值,以强制将值视为文本,也可以设置数字格式,使数字以两位小数显示。可以预先应用单元格格式,即使用Google Sheets UI命令,也可以使用Apps脚本为您设置格式。