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

8
我想使用Google Apps Script从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个回答

3
我认为现有的答案已经过时了,因为一个名为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()


2

您需要知道来自每个单元格的数据类型,并在每种情况下正确处理它...

如果是字符串,请保持不变,如果是日期,请使用Utilities.formatDate以所需的方式显示它(请参阅此处的文档),如果是数字,则可以使用Utilities.formatString按需要格式化它(请参阅此处的文档)。

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


1
我是否理解,没有简单地检索单元格中显示的文本的方法??这似乎难以置信。 - David M. Perlman

2
这里有一个库可以做到!SheetConverter library
Gist 在这里
下面是获取单个格式化单元格的方法:
var formattedValue = SheetConverter.convertCell(value, format);

你会发现其他好用的工具,可以将整个范围转换为HTML表格,或者生成单个单元格的HTML(包括字体、背景颜色、文本颜色和大多数其他格式化元素)。
声明:我是这个库的作者。但那个“ScriptExamples”网站上的照片不是我的!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接