如何使用Google Apps脚本获取单元格的格式化值

时间:2013-11-06 17:47:13

标签: google-apps-script

我想使用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)”。

我明白我想要的东西会导致十进制值的舍入错误,但在这种情况下我并不关心。我只是想获得格式化的值。

谢谢。

3 个答案:

答案 0 :(得分:2)

您必须知道来自每个单元格的数据类型,并在每种情况下以正确的方式处理...

如果它是一个字符串,请保持原样,如果是日期使用Utilities.formatDate以您想要的方式显示它(see doc here),如果它是一个数字,您也可以根据需要对其进行格式化使用Utilities.formatStringsee 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 正在寻找的。


使用您的示例,我们可以获得如下所示的范围(单元格)的格式化值,在本例中为 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() 以获得更大的范围。