应用"自动"数字格式

时间:2016-06-26 20:05:21

标签: google-apps-script google-sheets

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

但是,当我在工作表中选择范围时,只需点击"自动"在数字格式菜单上,所有都恢复正常。由于数据写入会以某种方式重置格式,因此预先单击它并没有帮助。

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

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

'Automatic' Number format.

3 个答案:

答案 0 :(得分:1)

我使用xrange复制/应用自动格式:

copyFormatToRange

您可以编写一个打开另一个电子表格的API,读取具有自动格式的任何单元格。

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

然后使用var ss = SpreadsheetApp.openById(SpreadsheetId);//Id of another spreadsheet 到您想要的单元格。

答案 1 :(得分:0)

如果您没有该范围内的日期,则以下解决方案似乎是最佳选择(不使用基于API的解决方案):

myRange.setNumberFormat('0.###############');

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

添加或删除甚至一个 #将“打破咒语”并导致非常大的数字以非科学记数法显示。我还测试了小数点前的变化,但是留下了15x#:

同样有效:myRange.setNumberFormat('#,##0.###############');

因此前缀有一定的灵活性。

无效:myRange.setNumberFormat('#.###############');

显然需要0

最后,

无效:savegameRange.setNumberFormat('0.##############[red]');

这会将数字变为红色,但会打破“魔术”格式。所以没有后缀出现。

同样,如果你有范围内的日期,这将无法正常工作,毫不奇怪,显示为基础数字。并且可能更有问题(但完全可以理解),将它们返回到日期形式的唯一方法是手动应用日期格式,假设您知道哪些单元格是'日期'。

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

答案 2 :(得分:0)

我们可以使用export class ConfirmModalComponent extends BaseModal implements OnInit { choosedCandidates: Array<any> = []; constructor( @Inject('title') public title,//injected variable protected modalService: ModalService ) { super(); } ngOnInit() { } .... } //spec file of my component beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ DelInterviewerConfirmModalComponent ], imports: [ CheckboxModule, TranslateModule ], providers: [ { provide: title, useValue: 'modal title' }, ModalService, RequisitionDetailService ], schemas: [ CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA ], }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(DelInterviewerConfirmModalComponent); component = fixture.componentInstance; component.title = "test"; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); });

下面是示例:

.setNumberFormat('General');