Google Sheets 行追加 (Table)

指定した Spreadsheet の Sheet の最下行に、テーブル型データ項目の値を追加し、通信をデータ項目に格納します。

    A. テーブル型データを選択してくださいデータ項目選択テーブル型必須
    B. 送出データの項目 ID をセットしてください (例 "0,1,5d,3n,6")単一行記述必須
    C. OAuth2通信許可設定名 (←[OAuth 2.0 設定])単一行記述必須
    D. Spreadsheet ID が格納されている文字列型or選択肢型データを選択してください(存在しない場合、エラー)データ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    E. Sheet タイトルが格納されている文字列型or選択肢型データを選択してください(存在しない場合、追加)データ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    F. 通信ログが格納される文字列型データを選択してください (更新)データ項目選択文字列型(複数行)必須
    -設定変数名設定ラベル
    Aconf_DataIdAテーブル型データを選択してください
    Bconf_ColIds送出データの項目 ID をセットしてください (例 "0,1,5d,3n,6")
    Cconf_OAuth2OAuth2通信許可設定名 (←[OAuth 2.0 設定])
    Dconf_DataIdDSpreadsheet ID が格納されている文字列型or選択肢型データを選択してください(存在しない場合、エラー)
    Econf_DataIdESheet タイトルが格納されている文字列型or選択肢型データを選択してください(存在しない場合、追加)
    Fconf_DataIdF通信ログが格納される文字列型データを選択してください (更新)
    // Append Table Records to Google Sheets (ver. 20160915)
    // (c) 2016, Questetra, Inc. (the MIT License)
    
    // OAuth2 config
    // Authorization Endpoint URL: https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
    // Token Endpoint URL: https://accounts.google.com/o/oauth2/token
    // Scope: https://www.googleapis.com/auth/spreadsheets
    // Consumer Key: (Get by Google Developers Console)
    // Consumer Secret: (Get by Google Developers Console)
    
    //// == 自動工程コンフィグの参照 / Config Retrieving ==
    var dataIdA = configs.get( "conf_DataIdA" ); // (returns Number)
    var colIds = configs.get( "conf_ColIds" ) + "";
    var oauth2 = configs.get( "conf_OAuth2" );
    var dataIdD = configs.get( "conf_DataIdD" ); // (returns Number)
    var dataIdE = configs.get( "conf_DataIdE" ); // (returns Number)
    var dataIdF = configs.get( "conf_DataIdF" ); // (returns Number)
    
    //// == ワークフローデータの参照 / Data Retrieving ==
    var myTable = data.get( dataIdA );
    // myTable: com.questetra.bpms.core.model.formdata.ListArray
    var docId = "";
    if( data.get( dataIdD ) instanceof java.util.ArrayList ){
      docId = data.get( dataIdD ).get(0).getValue() + "";
    }else if( data.get( dataIdD ) instanceof java.lang.String ){
      docId = data.get( dataIdD ) + "";
    }
    var sheet = "";
    if( data.get( dataIdE ) instanceof java.util.ArrayList ){
      sheet = data.get( dataIdE ).get(0).getValue() + "";
    }else if( data.get( dataIdE ) instanceof java.lang.String ){
      sheet = data.get( dataIdE ) + "";
    }
    
    //// == 演算 / Calculating ==
    var accessLog = "";
    var responseJson = "";
    var sheetId = -1;
    var token = httpClient.getOAuth2Token( oauth2 );
    
    try{
      // check spreadsheet
      var uri = "https://sheets.googleapis.com/v4/spreadsheets/";
      uri += docId;
      uri += "?includeGridData=false";
      var response = httpClient.begin()
        .bearer(token)
        .get( uri ); 
      accessLog += "---GET request--- " + response.getStatusCode() + "\n";
      responseJson = response.getResponseAsString();
      if( response.getStatusCode() == 200 ){
        var jsonObj = JSON.parse( responseJson );
        accessLog += " SPREADSHEET TITLE: \"" + jsonObj.properties.title + "\" has";
        accessLog += jsonObj.sheets.length + " sheets\n";
        for( var i = 0; i < jsonObj.sheets.length; i++ ){
          if( jsonObj.sheets[i].properties.title == sheet ){
            sheetId = parseInt( jsonObj.sheets[i].properties.sheetId, 10 );
            accessLog += " SHEET TITLE: \"" + sheet + "\" exists (id: " + sheetId + ")\n";
          }else{
            accessLog += " SHEET TITLE: \"" + sheet + "\" does not exist\n";
          }
        }
      }else{
        sheetId = -2;
      }
    
      // add sheet (not exsist)
      if( sheetId == -1 ){  
        var uri2 = "https://sheets.googleapis.com/v4/spreadsheets/";
        uri2 += docId;
        uri2 += ":batchUpdate";
    
        sheetId = processInstance.getProcessInstanceId() - 0;
        var myObj2 = {};
        myObj2.requests = []; // Array
        myObj2.requests[0] = {};
        myObj2.requests[0].addSheet = {};
        myObj2.requests[0].addSheet.properties = {};
        myObj2.requests[0].addSheet.properties.sheetId = sheetId;
        myObj2.requests[0].addSheet.properties.title = sheet;
    
        var response2 = httpClient.begin()
          .bearer(token)
          .body( JSON.stringify( myObj2 ), "application/json" )
          .post( uri2 ); 
        accessLog += "---POST request--- " + response2.getStatusCode() + "\n";
        if( response2.getStatusCode() == 200 ){
          accessLog += " SHEET TITLE: \"" + sheet + "\" created (id: " + sheetId + ")\n";
        }
      }
    
      // append records
      if( sheetId >= 0 ){
        if( myTable !== null){
          var colIdArray = colIds.split(",");
          var numOfCols = colIdArray.length;
          var numOfRows = myTable.size() - 0; // 行(Tableの高さ)
    
          var myObj3 = {};
          myObj3.requests = []; // Array
          myObj3.requests[0] = {};
          myObj3.requests[0].appendCells = {};
          myObj3.requests[0].appendCells.rows = []; // Array
          myObj3.requests[0].appendCells.sheetId = sheetId;
          myObj3.requests[0].appendCells.fields = "*";
    
          for( var i = 0; i < numOfRows; i++ ){
            myObj3.requests[0].appendCells.rows[i] = {};
            myObj3.requests[0].appendCells.rows[i].values = []; // Array
            for( var j = 0; j < numOfCols; j++ ){
              if( colIdArray[j].slice(-1) == "n" ){
                var cellValue = myTable.get(i, parseInt( colIdArray[j] ) ) - 0;
                myObj3.requests[0].appendCells.rows[i].values[j]
                = {"userEnteredValue": {"numberValue" : cellValue } }; 
              }else if( colIdArray[j].slice(-1) == "d" ){
                var dateTimeSerialNumber = new Date( myTable.get(i, parseInt( colIdArray[j] ) ) )/86400000 + 25569;
                myObj3.requests[0].appendCells.rows[i].values[j]
                = {"userEnteredFormat": {"numberFormat": { "type": "DATE_TIME" } },
                   "userEnteredValue": {"numberValue": dateTimeSerialNumber }}; 
              }else{
                var cellValue = myTable.get(i, parseInt( colIdArray[j] ) ) + "";
                myObj3.requests[0].appendCells.rows[i].values[j]
                = {"userEnteredValue": {"stringValue": cellValue }}; 
              }
            }
          }
    
          var uri3 = "https://sheets.googleapis.com/v4/spreadsheets/";
          uri3 += docId;
          uri3 += ":batchUpdate";
    
          var response3 = httpClient.begin()
            .bearer(token)
            .body( JSON.stringify( myObj3 ), "application/json" )
            .post( uri3 ); 
          accessLog += "---POST request--- " + response3.getStatusCode() + "\n";
          if( response3.getStatusCode() == 200 ){
            accessLog += " ADDED DATA: " + colIds + " x " + numOfRows + "cells\n";
          }
        }
      }
    }catch(e){
      accessLog += e.message + "\n";
    }
    
    //// == ワークフローデータへの代入 / Data Updating ==
    retVal.put( dataIdF, accessLog );
    

    • A’: Aで選択したデータ項目に格納されているテーブル
    • D’: Dで選択したデータ項目に格納されている Google Spreadsheet ID **
    • E’: Eで選択したデータ項目に格納されている Sheet Title
    • Spreadsheet D’ の Sheet E’ (存在しない場合はシート追加)の最下行に、テーブルA’が自動追記されます。
    • 通信ログがFで選択したデータ項目に格納されます
    • “0,1,5d,3n,6” は、ID:0を文字列として、ID:1を文字列として、ID:5を日時として、ID:3を数字として、ID:6を文字列として追記することを意味します
    • ** https://docs.google.com/spreadsheets/d/1exampleEXAMPLEexampleEXAMPLEexampleEXAMPLE0/edit#gid=0