使用Google Apps脚本,我想将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格式化单元格。
答案 0 :(得分:28)
另一个答案是,在javascript中将格式设置为“纯文本”不起作用。但是,这样做:
sheet.getRange(1,n).setNumberFormat('@STRING@');
因此,以编程方式格式化文本的神奇值是'@STRING @'!
答案 1 :(得分:5)
基督徒善意答案的补充:
我注意到如果您的目标单元格已设置为文本格式(手动),请使用range.setValue()
设置值
可能未被解释为文本(如日期或数字),将自动更改数字格式。
所以,如果你想要保持文本格式,那么好的解决方案就是
range.setValue( “01293849847”)的NumberFormat( “@”);
而不是
range.numberFormat( “@”)的setValue( “01293849847”);
答案 2 :(得分:1)
不幸的是,该计划的文字并不合适。只要单元格像日期一样,就记录文档,然后格式化单元格。 找到了一种不创建日期的方法)
var thisDate1 = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM//d//yyyy");
抱歉这么晚回复。所有的手都没有到达。
答案 3 :(得分:1)
强制将值保存为纯文本的另一种方法:
添加引号: '
。这对显示值和读取值都没有影响
返回不包括quatation标记。
let dateStr = '07-07-20017';
sheet.getRange(x, y).setValue("'" + dateStr);
let backStr = sheet.getRange(x, y).getValue();
assert(dateStr === backStr);
答案 4 :(得分:0)
我在下面这样做,它按照我的预期工作。我的B列显示正确的零填充3位数(例如,004),并且我的C列显示正确的零填充10位数(例如,0060000001)作为文本。我将其转换为Excel的文件作为带有填充零的文本下载。我认为它也可以用Date作为文本。
。winSS.getRange( “!US B2:B”)。setNumberFormat( “000”)setNumberFormat( “@”); winSS.getRange( “!US C2:C”)。setNumberFormat( “0000000000”)setNumberFormat( “@”);