29

使用 Google Apps 脚本,我想将 Google 表格单元格的格式设置为纯文本。

我想这样做的原因是因为我想以美国日期格式 (MM/DD/YYYY) 显示日期。[我们可以假设 OP 的 Google 帐户中的语言环境设置为使用 DD/MM/YYYY,这是一种更常见的日期格式。——编者。]

我创建这样的字符串:

var thisDate = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM / d / yyyy");

...返回美国格式的日期06/13/2012,这就是我想要的。但是,当我将单元格的值设置为该字符串时:

sheet.getRange (1, n). setValue (thisDate);

...日期根据我的语言环境13/06/2012格式化为单元格,而不是美国格式。

以下操作也失败了,因为日期以标准格式返回,而不是美国格式:

sheet.getRange (1, n). getValue () == "06/13/2012"

当单元格被格式化为纯文本而不是日期时,一切正常。

所以,我的问题是,如何使用 JavaScript 格式化单元格。

4

5 回答 5

43

另一个答案,在javascript中将格式设置为“纯文本”,不起作用。但是,这样做:

sheet.getRange(1,n).setNumberFormat('@STRING@');

所以以编程方式格式化文本的神奇价值是'@STRING@'!

于 2013-10-23T14:57:01.657 回答
8

Christian good answer的补充:我注意到,如果您的目标单元格已经(手动)设置为文本格式,则设置一个range.setValue() 可能不会被解释为文本(如日期或数字)的值将会改变自动数字格式。所以好的解决方案,如果你绝对想保持文本格式是

range.setValue("01293849847").numberFormat("@");

并不是

range.numberFormat("@").setValue("01293849847");

于 2016-06-23T23:34:54.067 回答
7

另一种强制将值保存为纯文本的方法:

前加引号:'. 这对显示的值没有影响,并且通过读回值,不包括引号。

let dateStr = '07-07-20017';
sheet.getRange(x, y).setValue("'" + dateStr);

let backStr = sheet.getRange(x, y).getValue();
assert(dateStr === backStr);
于 2017-07-07T09:32:47.483 回答
1

不幸的是,计划的文本不合适。一旦单元格获得日期之类的内容,只需格式化单元格即可。找到了一种不创建日期的方法)

var thisDate1 = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM//d//yyyy");

抱歉这么晚才回复。所有的手都没有伸到。

于 2013-03-06T07:46:08.293 回答
0

我像下面那样做了,它按我的预期工作。我的 B 列显示正确的零填充 3 位数字(例如,004),我的 C 列显示正确的零填充 10 位数字(例如,0060000001)作为文本。我将它转换为 Excel 的文件下载为带有填充零的文本。我认为它也可以将日期作为文本来解决问题。

winSS.getRange("US!B2:B").setNumberFormat("000").setNumberFormat("@"); winSS.getRange("US!C2:C").setNumberFormat("0000000000").setNumberFormat("@");

于 2017-11-25T09:39:46.683 回答