通过Apps脚本以纯文本格式设置Google表格单元格

Ant*_*Pil 21 format plaintext google-sheets google-apps-script

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

我想这样做的原因是因为我想以美国日期格式(MM/DD/YYYY)显示日期.[我们可以假设OP的Google帐户中的区域设置设置为使用DD/MM/YYYY,这是一种更常见的日期格式.-Ed.]

我创建这样的字符串:

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

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

sheet.getRange (1, n). setValue (thisDate);
Run Code Online (Sandbox Code Playgroud)

...日期根据我的区域设置格式化为单元格,13/06/ 2012,而不是美国格式.

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

sheet.getRange (1, n). getValue () == "06/13/2012"
Run Code Online (Sandbox Code Playgroud)

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

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

小智 32

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

sheet.getRange(1,n).setNumberFormat('@STRING@');
Run Code Online (Sandbox Code Playgroud)

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

  • 调频。Google会在任何地方记录这些东西吗? (2认同)
  • 我发现只是'@'也可以。此链接有帮助-http://www.blackcj.com/blog/2015/05/18/cell-number-formatting-with-google-apps-script/ (2认同)

ten*_*its 6

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

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

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

let backStr = sheet.getRange(x, y).getValue();
assert(dateStr === backStr);
Run Code Online (Sandbox Code Playgroud)


Céd*_*LAS 5

对基督徒的好回答的补充:我注意到如果你的目标单元格已经设置为文本格式(手动),设置一个range.setValue() 可能没有被解释为文本的值(如日期或数字)将会改变自动数字格式.所以很好的解决方案,如果你想要保持文本格式是

range.setValue( "01293849847")的NumberFormat( "@").

并不是

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


Ant*_*Pil 1

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

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

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