Google Sheets 行追加

Google Sheets 行追加
GoogleSheets-appendCells-20171031-addonxml
(md5:2742f82d98612316cee9df79d7c1dbe9)

    • W’ : W で選択したデータ項目に格納されている Spreadsheet ID
    • X’ : X で選択したデータ項目に格納されている Sheet GID
    • A’ – J’: A -J で選択したデータ項目に格納されているデータ
    • W’ で指定した Spreadsheet の Sheet X’ にて、シート末尾に1行追加し、その各セルにデータを入力します(A列〜J列)
    • 通信ログが Y で選択したデータ項目に格納されます
    • 選択型(チェックボックス)、テーブル型、掲示板型を A〜J で指定することはできません
    • 選択型は表示ラベル、ユーザ型・組織型は名称、ファイル型はファイル名が出力されます
    • 日付型(月日/年月/年)は、「年月日」のうち不足する要素が「2000-01-01」の値で補完された日付として出力されます
    • https://docs.google.com/spreadsheets/d/1exampleEXAMPLEexampleEXAMPLEexampleEXAMPLE0/edit#gid=0

    V. OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)単一行記述必須
    W. Spreadsheet ID (ファイルのID)が格納されている文字列型or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    X. Sheet GID (WorksheetのID)が格納されている文字列型or選択肢型or数値型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)or数値型必須
    Y. 通信ログが格納される文字列型データを選択してください (更新)データ項目選択文字列型(複数行)
    A. 末尾行のA列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    B. 末尾行のB列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    C. 末尾行のC列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    D. 末尾行のD列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    E. 末尾行のE列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    F. 末尾行のF列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    G. 末尾行のG列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    H. 末尾行のH列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    I. 末尾行のI列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    J. 末尾行のJ列に追加される値が格納されているデータを選択してくださいデータ項目選択文字列型or数値型or日付型or日時型or選択型(ラジオ/セレクト/検索)orユーザ型or組織型orファイル型
    -設定変数名設定ラベル
    Vconf_OAuth2OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)
    Wconf_DataIdWSpreadsheet ID (ファイルのID)が格納されている文字列型or選択肢型データを選択してください
    Xconf_DataIdXSheet GID (WorksheetのID)が格納されている文字列型or選択肢型or数値型データを選択してください
    Yconf_DataIdY通信ログが格納される文字列型データを選択してください (更新)
    Aconf_DataIdA末尾行のA列に追加される値が格納されているデータを選択してください
    Bconf_DataIdB末尾行のB列に追加される値が格納されているデータを選択してください
    Cconf_DataIdC末尾行のC列に追加される値が格納されているデータを選択してください
    Dconf_DataIdD末尾行のD列に追加される値が格納されているデータを選択してください
    Econf_DataIdE末尾行のE列に追加される値が格納されているデータを選択してください
    Fconf_DataIdF末尾行のF列に追加される値が格納されているデータを選択してください
    Gconf_DataIdG末尾行のG列に追加される値が格納されているデータを選択してください
    Hconf_DataIdH末尾行のH列に追加される値が格納されているデータを選択してください
    Iconf_DataIdI末尾行のI列に追加される値が格納されているデータを選択してください
    Jconf_DataIdJ末尾行のJ列に追加される値が格納されているデータを選択してください
    // Google Sheets Append Cells (ver. 20171031)
    // (c) 2017, Questetra, Inc. (the MIT License)
    // by spreadsheets.batchUpdate [AppendCellsRequest] (not by spreadsheets.values.append)
    // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#appendcellsrequest
    
    // OAuth2 config sample at [OAuth 2.0 Setting]
    // - 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 oauth2 = configs.get( "conf_OAuth2" ) + "";
    var dataIdW = configs.get( "conf_DataIdW" ) + "";
    var dataIdX = configs.get( "conf_DataIdX" ) + "";
    var dataIdY = configs.get( "conf_DataIdY" ) + "";
    var dataIdA = configs.get( "conf_DataIdA" ) + "";
    var dataIdB = configs.get( "conf_DataIdB" ) + "";
    var dataIdC = configs.get( "conf_DataIdC" ) + "";
    var dataIdD = configs.get( "conf_DataIdD" ) + "";
    var dataIdE = configs.get( "conf_DataIdE" ) + "";
    var dataIdF = configs.get( "conf_DataIdF" ) + "";
    var dataIdG = configs.get( "conf_DataIdG" ) + "";
    var dataIdH = configs.get( "conf_DataIdH" ) + "";
    var dataIdI = configs.get( "conf_DataIdI" ) + "";
    var dataIdJ = configs.get( "conf_DataIdJ" ) + "";
    // convert 'java.lang.String' to 'javascript string'
    
    
    //// == Data Retrieving / ワークフローデータの参照 ==
    var spreadsheetId = "";
    if( engine.findDataDefinitionByNumber( dataIdW ).matchDataType( "SELECT_SINGLE" ) ){
        spreadsheetId = engine.findDataByNumber( dataIdW ).get(0).getValue() + "";
    }else{
        spreadsheetId = engine.findDataByNumber( dataIdW ) + "";
    }
    var sheetId       = "";
    if( engine.findDataDefinitionByNumber( dataIdX ).matchDataType( "SELECT_SINGLE" ) ){
        sheetId       = engine.findDataByNumber( dataIdX ).get(0).getValue() + "";
    }else if( engine.findDataDefinitionByNumber( dataIdX ).matchDataType( "DECIMAL" ) ){
        sheetId       = engine.findDataByNumber( dataIdX ) + "";
        sheetId       = sheetId.replace(/,/g,"").replace(/\./g,""); // Remove dots and commas
    }else{
        sheetId       = engine.findDataByNumber( dataIdX ) + "";
    }
    
    
    //// == Calculating / 演算 ==
    // preparing for API Request
    var apiRequest = httpClient.begin(); // HttpRequestWrapper
    // com.questetra.bpms.core.event.scripttask.HttpClientWrapper
    
    // Request HEADER (OAuth2 Token, HTTP Basic Auth, etc)
    var token  = httpClient.getOAuth2Token( oauth2 );
    apiRequest = apiRequest.bearer( token );
    
    // Request PATH (https://example.com/abc/def/)
    var apiUri = "https://sheets.googleapis.com/v4/spreadsheets/";
        apiUri += spreadsheetId + ":batchUpdate";
    
    // Request QUERY (?a=b)
    // (no set)
    
    // Request BODY (JSON, Form Parameters, etc)
    function cellDataObject( dataId ){
      var dataObj = {};
      dataObj.userEnteredValue = {};
      if( dataId === "" ){
        dataObj.userEnteredValue.stringValue = "";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "SELECT_SINGLE" ) ){
        dataObj.userEnteredValue.stringValue = engine.findDataByNumber( dataId ).get(0).getDisplay() + "";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "FILE" ) ){
        dataObj.userEnteredValue.stringValue = engine.findDataByNumber( dataId ).get(0).getName() + "";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "QUSER" ) ){
        dataObj.userEnteredValue.stringValue = engine.findDataByNumber( dataId ).getName() + "";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "QGROUP" ) ){
        dataObj.userEnteredValue.stringValue = engine.findDataByNumber( dataId ).getName() + "";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "DATE" ) ){
        var serialDays = ( engine.findDataByNumber( dataId ).getTime() + engine.getTimeZoneOffsetInMinutes() * 60000 ) / 86400000 + 25569;
        dataObj.userEnteredValue.numberValue = serialDays;
        dataObj.userEnteredFormat = {};
        dataObj.userEnteredFormat.numberFormat = {};
        dataObj.userEnteredFormat.numberFormat.type = "DATE";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "DATETIME" ) ){
        var serialDays2 = ( engine.findDataByNumber( dataId ).getTime() + engine.getTimeZoneOffsetInMinutes() * 60000 ) / 86400000 + 25569;
        dataObj.userEnteredValue.numberValue = serialDays2;
        dataObj.userEnteredFormat = {};
        dataObj.userEnteredFormat.numberFormat = {};
        dataObj.userEnteredFormat.numberFormat.type = "DATE_TIME";
      }else if( engine.findDataDefinitionByNumber( dataId ).matchDataType( "DECIMAL" ) ){
        dataObj.userEnteredValue.numberValue = engine.findDataByNumber( dataId ) - 0;
      }else{ // for "STRING" 
        dataObj.userEnteredValue.stringValue = engine.findDataByNumber( dataId ) + "";
      }
      return dataObj;
    }
    var requestObj = {};
      requestObj.requests = [];
      requestObj.requests[0] = {};
      requestObj.requests[0].appendCells = {};
      requestObj.requests[0].appendCells.sheetId = sheetId;
      requestObj.requests[0].appendCells.fields = "*";
      requestObj.requests[0].appendCells.rows = [];
      requestObj.requests[0].appendCells.rows[0] = {};
      requestObj.requests[0].appendCells.rows[0].values = [];
    
      requestObj.requests[0].appendCells.rows[0].values[0] = cellDataObject( dataIdA );
      requestObj.requests[0].appendCells.rows[0].values[1] = cellDataObject( dataIdB );
      requestObj.requests[0].appendCells.rows[0].values[2] = cellDataObject( dataIdC );
      requestObj.requests[0].appendCells.rows[0].values[3] = cellDataObject( dataIdD );
      requestObj.requests[0].appendCells.rows[0].values[4] = cellDataObject( dataIdE );
      requestObj.requests[0].appendCells.rows[0].values[5] = cellDataObject( dataIdF );
      requestObj.requests[0].appendCells.rows[0].values[6] = cellDataObject( dataIdG );
      requestObj.requests[0].appendCells.rows[0].values[7] = cellDataObject( dataIdH );
      requestObj.requests[0].appendCells.rows[0].values[8] = cellDataObject( dataIdI );
      requestObj.requests[0].appendCells.rows[0].values[9] = cellDataObject( dataIdJ );
    
    apiRequest = apiRequest.body( JSON.stringify( requestObj ), "application/json" );
    
    // Access to the API (POST, GET, PUT, etc)
    var response = apiRequest.post( apiUri ); // HttpResponseWrapper
    var httpStatus = response.getStatusCode() + "";
    var accessLog = "---POST request--- " + httpStatus + "\n";
    accessLog += response.getResponseAsString() + "\n";
    //var responseObj = JSON.parse( response.getResponseAsString() );
    
    // Retrieve Properties from Response-JSON
    // (no action)
    
    // Error Handling - https://stripe.com/docs/api#errors
    // (no action)
    
    
    //// == Data Updating / ワークフローデータへの代入 ==
    if ( dataIdY !== "" ){ engine.setDataByNumber( dataIdY, accessLog ); }