6

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

我知道我想要的会导致十进制值的舍入错误,但在这种情况下我不在乎。我只想获取格式化的值。

谢谢你。

4

3 回答 3

2

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

如果它是一个字符串,请保持原样,如果它是一个日期,用于Utilities.formatDate以您想要的方式显示它(参见此处的文档),如果它是一个数字,您也可以根据需要使用格式化它Utilities.formatString参见此处的文档)。

要获取类型,请使用instanceof,例如,请查看最近的这篇文章

于 2013-11-06T18:59:07.683 回答
2

有一个库!SheetConverter 库

要点在这里

以下是获取单个格式化单元格的方法:

var formattedValue = SheetConverter.convertCell(value, format);

您会发现其他好东西可以将整个范围转换为 HTML 表格,或为单个单元格生成 HTML(包括字体、背景颜色、文本颜色和大多数其他格式元素)。

披露:我是图书馆作者。但这不是我在“ScriptExamples”网站上的照片!

于 2014-11-04T21:54:29.540 回答
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()获得更大的范围。

于 2021-02-20T23:47:28.370 回答