1

ImportRange 関数を介して他のスプレッドシートからデータを取得し、そのデータに基づいて数値を計算するシートがいくつかある Google スプレッドシートがあります。次に、コード スニペットを 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();
}
4

0 に答える 0