我有一个 Google 电子表格,其中包含几张表格,这些表格通过 ImportRange 函数从其他电子表格中获取数据,然后根据该数据计算数值。然后,我将代码片段组装为 Web 应用程序,以检索电子表格的第一张表并将其显示为弹性表。
除了 doGet 函数,我添加了一个“刷新器”来从电子表格中检索数据,因为当 Ss 关闭时,不执行任何计算,脚本只会读取空单元格。
然而,即使“刷新器”已经到位,它也只#VALUE!
显示数字应该显示的位置。
我不确定在哪里修复我的代码,请给我提示!
谢谢!
我正在添加一个实际的屏幕截图来进一步说明这个问题。出现的字母数字值是电子表格的“本机”值,而不是通过 importRange 函数来自其他电子表格的值。该脚本放置在“google 站点根目录”中,而不是电子表格中。
function doGet(){
var app = UiApp.createApplication();
var panel = app.createVerticalPanel();
var flexTable = app.createFlexTable().setStyleAttribute('border', '3px solid MidnightBlue')
.setStyleAttribute('borderCollapse','collapse')
.setBorderWidth(2);
//Get Data from spreadsheet
var spreadsheetId = 'xxxx.xxx.xxxx';
var dataArray = getData(spreadsheetId);
//Load data into table cells
for (var row = 0; row<dataArray.length; row++){
for (var col = 0; col<dataArray[row].length; col++){
flexTable.setText(row, col, dataArray[row][col].toString());
}
}
panel.add(flexTable);
app.add(panel);
return app;
}
function refreshSheet(spreadsheetId, sheet) {
var spreadsheetId = SpreadsheetApp.openById('xxxxxxx.xxxxxxxx');
var sheet = spreadsheetId.getSheetByName('Sheet_to_Display');
var dataArrayRange = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn());
var dataArray = dataArrayRange.getValues(); // necessary to refresh custom functions
var notValueFound = true;
while(notValueFound) {
for(var i = 0; i < dataArray.length; i++) {
if(dataArray[i].indexOf('#VALUE!') >= 0) {
notValueFound = true;
dataArray = dataArrayRange.getValues();
break;
} // end if
else if(i == dataArray.length - 1) notValueFound = false;
} // end for
} // end while
}
function getData (spreadsheetId){
var ss = SpreadsheetApp.openById(spreadsheetId);
var sheet = ss.getSheets()[0].getDataRange();
return sheet.getValues();
}