是否可以通过GAS以编程方式应用“自动”数字格式?我的问题是,当我编写数字列时,表格似乎试图应用适当的格式,但有时会出错。也就是说,特定的小整数(有时为1)将被格式化为日期。该范围是用一个myRange. setValue()
方法编写的,我看不到任何错误模式,因此看不到任何防止意外错误格式的方法。
但是,当我在工作表中选择范围并单击数字格式菜单上的“自动”时,一切都会恢复正常。单击前面的那个没有帮助,因为数据写入会以某种方式重置格式。
尽管介绍冗长,但我的问题非常简单:如何以编程方式应用“自动”数字格式。我认为这是非常基本的,尤其是因为谷歌和这里的搜索没有帮助。
我目前的后备解决方案是使用myRange. setNumberFormat("0")
作为整个范围的格式。这并不理想,因为一些数字非常大,更容易用科学符号阅读。范围内也有一些文本字符串,但无论应用何种格式,这些格式都是正确的。我也希望避免在用户交互界面中只需单击几下即可迭代数据并测试值以确定最佳格式。
您可以尝试. setNumberFormat('General');
以下是示例:
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange("B:B").setNumberFormat("General");
我很难找到任何有记录的东西,并且尝试了以前建议的几乎所有东西(null、“General”、“0.###############', ”的“魔术”格式等)。
在我的特殊情况下,我之前将范围设置为严格纯文本,然后用复选框数据验证替换。每当选中该框时,它都会转换为文本“TRUE”,而不是保留复选框。“常规”和“魔术”格式在功能上运行良好,但实际上并没有将格式显式设置回“自动”。
我终于决定,为什么不试试这个:
range.setNumberFormat('Automatic');
它起作用了。这真的应该被记录下来,但至少有一点常识让我找到了答案。
我使用copy FormatToRange
复制/应用自动格式:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var source_cell = sheet.getRange("A1");//A1: cell having automatic format
source_cell.copyFormatToRange(sheet,1,1,2,2);//copy format of cell A1 to cell A2
您可以编写一个打开另一个电子表格的API,读取具有自动格式的任何单元格。
var ss = SpreadsheetApp.openById(SpreadsheetId);//Id of another spreadsheet
然后使用copy FormatToRange
到您想要的单元格。