【发布时间】:2020-09-08 21:08:23
【问题描述】:
我目前正在使用 Google Apps 脚本来实现供应链数据库的查看器。 为了将查看器与当前数据库(谷歌电子表格)同步,我将值和所有格式导入到新工作表中,这意味着查看器基本上是当前数据库的副本。
但是执行脚本总是需要大约 1 分钟的时间。我试图通过在代码的不同位置记录一些调试消息来找到问题。
起初,Viewer.setFrozenRows(1); 的行似乎是问题所在(这很奇怪,因为我实际上只冻结了第一行),但是当注释掉这一行时,之后的行(Viewer.setFrozenColumns(Database.getFrozenColumns());)似乎是问题所在。
很遗憾,我无法与您共享数据库表,但也许有人已经从代码中发现了问题。
一些附加信息:数据库表有1300行100列,我在下面添加了当前代码的日志图片。
function LoadViewer(view) {
Logger.log("LoadViewer Start");
if (view == null) {
view = 0;
}
var Database = SpreadsheetApp.openByUrl('[SHEET_URL].getSheetByName('Database');
var Viewer = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var numberOfColms = Database.getLastColumn();
var numberOfRows = Database.getLastRow();
var rules = Database.getConditionalFormatRules();
var headerRowHeight = Database.getRowHeight(1);
var dataRowHeight = Database.getRowHeight(2);
var Values = Database.getRange(1, 1, numberOfRows, numberOfColms).getValues();
Logger.log("Declarations Finished");
Viewer.getRange(1, 1,numberOfRows,numberOfColms).setValues(Values);
if(!Viewer.getRange(1, 1,numberOfRows,numberOfColms).getFilter())
Viewer.getRange(1, 1,numberOfRows,numberOfColms).createFilter();
Viewer.setConditionalFormatRules(rules);
Viewer.getRange(1, 1, 1, numberOfColms).setFontWeight('bold');
Viewer.autoResizeColumns(1, numberOfColms);
Viewer.setRowHeight(1, headerRowHeight);
Logger.log("1st Half of functions finished");
Viewer.setRowHeights(2, numberOfRows-1, dataRowHeight);
Logger.log("Freeze Rows");
//Viewer.setFrozenRows(1);
Logger.log("Freeze Columns");
Viewer.setFrozenColumns(Database.getFrozenColumns());
Logger.log("Loop Start");
for(var i = 1; i<=numberOfColms; i++){
Viewer.setColumnWidth(i, Database.getColumnWidth(i));
}
Logger.log("Loop End");
Viewer.getRange(1, 1,1,numberOfColms).setVerticalAlignment('middle').setWrap(true);
Logger.log("Load Viewer End");
}
【问题讨论】:
标签: google-apps-script google-sheets