应用"自动"数字格式

Ben*_*her 6 google-sheets google-apps-script

是否可以通过GAS以编程方式应用"自动"数字格式?我的问题是,当我编写数字列时,Sheets似乎尝试应用适当的格式,但有时会出错.也就是说,特定的小整数(有时为1)将被格式化为日期.范围是用一种myRange.setValues()方法编写的,我看不出任何错误的模式,因此看不到任何方法来防止意外错误格式化.

但是,当我在工作表中选择范围并在数字格式菜单上单击"自动"时,所有都恢复正常.由于数据写入以某种方式重置格式,因此无需单击该页面即可.

尽管冗长的介绍,我的问题很简单:如何以编程方式应用"自动"数字格式.我认为这是非常基本的,特别是因为谷歌和搜索在这里没有帮助.

我目前的后备解决方案是myRange.setNumberFormat("0")用作整个范围的格式.这并不理想,因为有些数字非常大并且更容易用科学记数法阅读.该范围内还有一些文本字符串,但无论应用何种格式,这些格式都是正确的.我还希望避免迭代数据并测试值以确定最佳格式,只需在用户界面中点击几下即可.

'自动'数字格式.

小智 5

我们可以用 .setNumberFormat('General');

下面是示例:

var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange("B:B").setNumberFormat("General");
Run Code Online (Sandbox Code Playgroud)


Ben*_*her 0

如果您没有该范围内的日期,以下解决方案似乎是最佳可用选项(无需求助于基于 API 的解决方案):

myRange.setNumberFormat('0.###############');
Run Code Online (Sandbox Code Playgroud)

零点 15x'#' 似乎是一种“神奇”数字格式,它允许非常大的数字显示为科学记数法,并允许较小的整数和小数以数字格式预应用的“标准”格式显示。这也是为包含使用用户界面中的“自动”选择格式化的非日期的单元格返回的格式。

即使添加或删除一个 #也会“破坏咒语”并导致非常大的数字以非科学计数法显示。我还测试了小数点之前的更改,但保留了 15x#:

还有功能性: myRange.setNumberFormat('#,##0.###############');

所以前缀有一定的灵活性。

非功能性: myRange.setNumberFormat('#.###############');

显然是0必需的。

最后,

非功能性: savegameRange.setNumberFormat('0.##############[red]');

这会将数字变成红色,但会破坏“神奇”格式。所以不会出现任何后缀。


同样,如果您的日期在该范围内,则这将不起作用,因为它们将毫不奇怪地显示为基础数字。并且可能存在更多问题(但完全可以理解),将它们返回到日期形式的唯一方法是手动应用日期格式,假设您知道哪些单元格“是”日期。

完整复制“自动”数字格式需要遍历范围以查找日期并应用所需的日期格式,但否则应用“魔术”格式。(我的原始数据集是数字和字符串的混合,因此上面给出的简单方法有效。)