我想使用Google Apps脚本通过连接Google电子表格中选定的单元格来创建字符串。问题是我不知道单元格是包含数字,日期还是文本。当值是数字或日期时,我想获得格式化的值,即它在电子表格中的显示方式。
例如,这是一个函数,它将返回命名范围的值。
function getValueByName() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theRange = ss.getRangeByName("theNamedRange");
return theRange.getValue();
}
如果命名范围包含格式为11/6/2013的日期,则此函数将返回值“Wed Nov 06 2013 01:00:00 GMT-0700(MST)”。
我明白我想要的东西会导致十进制值的舍入错误,但在这种情况下我并不关心。我只是想获得格式化的值。
谢谢。
答案 0 :(得分:2)
您必须知道来自每个单元格的数据类型,并在每种情况下以正确的方式处理...
如果它是一个字符串,请保持原样,如果是日期使用Utilities.formatDate
以您想要的方式显示它(see doc here),如果它是一个数字,您也可以根据需要对其进行格式化使用Utilities.formatString
(see doc here)。
要获取该类型,请使用instanceof
,以查看示例at this recent post
答案 1 :(得分:2)
有一个lib! SheetConverter library
要点here。
以下是如何获得单个格式化单元格的信息:
var formattedValue = SheetConverter.convertCell(value, format);
您可以找到将整个范围转换为HTML表格的其他好东西,或为单个单元格生成HTML(包括字体,背景颜色,文本颜色和大多数其他格式元素)。
披露:我是图书馆作者。但这不是我在“ScriptExamples”网站上的图片!
答案 2 :(得分:0)
我相信现有的答案现在已经过时了,因为新函数 getDisplayValue() 似乎是 OP 正在寻找的。strong>
使用您的示例,我们可以获得如下所示的范围(单元格)的格式化值,在本例中为 30%:
function getValueByName() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theRange = ss.getRangeByName("A1Notation");
var value = theRange.getValue() // 0.3
var formattedValue = theRange.getDisplayValue(); // 30%
return formattedValue;
}
这将返回范围内左上角单元格的显示值,如果范围只有一个值,则非常有用。使用 getDisplayValues() 以获得更大的范围。