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

标签 javascript google-apps-script google-sheets

因为我无法使 .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”:(

我错过了什么?

这里是谷歌电子表格的链接(知道链接的任何人都可以编辑:)

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

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

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

最佳答案

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

如果我的理解是正确的,这个修改怎么样?我认为你的问题的原因是通过 setValue() 放置的值被转换为数字。这样,显示了 1。为了将值设置为 1.00,我认为有 3 种模式。请根据您的情况选择其中之一。

模式一:

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

来自:

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

收件人:

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

模式二:

在此模式中,根据您的问题,单元格的格式是使用 setNumberFormat("0.00") 设置的。

来自:

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

收件人:

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

模式三:

在此模式中,从共享电子表格的脚本中,当 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);
}

引用:

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

关于javascript - 为什么方法 setValue 的输出与 Browser.msgBox 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886755/

相关文章:

javascript - 如何将当前日期增加 1 天?

javascript - HTML &lt;input&gt; 必需属性无法阻止表单在 Apps 脚本应用程序中提交

javascript - 使用 REGEX 匹配用户输入

function - 如何将范围传递到 Google 电子表格中的自定义函数?

google-apps-script - 在谷歌表格上查询和比较日期

javascript - 在 Backbone.js 中插入后如何知道 DOM 何时再次准备就绪

javascript - 使用 switch 命令的日期验证不起作用

google-sheets - 我想我已经疯了 : Google Sheet Lookup

charts - 更改堆叠图表中的系列顺序

javascript - 合并网格会降低 FPS