通过应用脚本在谷歌表格中以纯文本格式设置单元格。

30

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

我之所以这样做是因为我想显示美国日期格式(MM / DD / YYYY)。 [我们可以假设OP的Google账户语言环境设置为使用DD/MM/YYYY,这是一种更常见的日期格式。-Ed.]

我像这样创建字符串:

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格式化单元格。

5个回答

49

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

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

因此,编程格式化文本的神奇值是'@STRING@'!


2
FM。Google 在哪里记录这些东西? - bmacnaughton
2
我发现只用'@'也可以。这个链接会有所帮助 - http://www.blackcj.com/blog/2015/05/18/cell-number-formatting-with-google-apps-script/ - bmacnaughton
@ 在许多示例中都可以找到,但对我来说却不起作用。然而,这个确实有效。谢谢,Christian。 - roma

8

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

在值前面添加引号:'。这对显示的值没有影响,并且在读取值时不包括引号。

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

let backStr = sheet.getRange(x, y).getValue();
assert(dateStr === backStr);

那个很容易,谢谢 :) 我们知道那是否有记录在案? - mlvljr
1
@mlvljr 有点晚了,但是回答你的问题,使用前置撇号将单元格格式化为文本自 Lotus 1-2-3 的时代就已经存在了。我碰巧仍在使用 Excel 2003,你可以在文档中找到这个功能:https://i.imgur.com/1r6wwSl.png - thdoan
@thdoan 感谢(包括老资格者的信息点 :))。祝你有美好的一天! - mlvljr

8
一个补充关于基督教好的回答: 我发现如果您的目标单元格已经手动设置为文本格式,使用range.setValue()设置一个可能不会被解释为文本(例如日期或数字)的值将自动更改数字格式。 因此,如果您想确保保留文本格式,则最好的解决方案是:

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

而不是

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


1
很遗憾,计划的文本内容不适合。只要单元格中有类似日期的内容,就将其格式化即可。找到一种不需要创建日期的方法。
var thisDate1 = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM//d//yyyy");

抱歉回复晚了。所有人都没有到齐。

0

我按照以下方式进行操作,结果符合我的预期。我的B列显示正确的零填充3位数字(例如004),我的C列显示正确的零填充10位数字(例如0060000001)作为文本。我下载了将其转换为带有填充零的Excel文件。我认为这也可以用于将日期作为文本处理。

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


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