2017-01-05 6 views
0

ビジネスニーズは何ですか?データは、私がZipierを介して郵便受けに更新する必要のある連絡先からのものです。GoogleドライブのフォルダにあるCSVからGoogleスプレッドシートの特定のシートにデータを追加するにはどうすればよいですか?

Googleドライブの特定のフォルダからインポートしたCSVのデータを追加しようとしています。このデータは、Googleスプレッドシートの特定のシートの最終行に追加する必要があります。

私はGoogle Scriptでやりたいです。

なぜこれがこのデータを更新するzapierに機能をトリガーするため、最後の行に追加する必要があります。

私は他の記事で次のように得たが、これが唯一の新しいシートを作成し、私は何を必要とすることは、特定のシートにデータを追加することです。

    function importData() { 
       var fSource = DriveApp.getFolderById("0B1FOmGiNuwVNMU1SU29kc2dGSkE"); // reports_folder_id = id of folder where csv reports are saved 
       var fi = fSource.getFilesByName('plancomercial.csv'); // latest report file 
       var ss = SpreadsheetApp.openById("1w7iW_DKJPZEcy9C8N9iskh_GpCmmL6N9PiZNSpXtrcc"); // data_sheet_id = id of spreadsheet that holds the data to be updated with new report data 
       if (fi.hasNext()) { // proceed if "plancomercial.csv" file exists in the reports folder 
       var file = fi.next(); 
       var csv = file.getBlob().getDataAsString(); 
       var csvData = CSVToArray(csv); // see below for CSVToArray function 

      var dateObj = new Date(); 
      var month = dateObj.getUTCMonth() + 1; //months from 1-12 
      var day = dateObj.getUTCDate(); 
      var year = dateObj.getUTCFullYear(); 
      var newdate = year + "/" + month + "/" + day; //formating date to be stamped into the sheet label 

       var newsheet = ss.insertSheet('Ciclo '+ newdate,0); // create a 'Ciclo + formated date' sheet to store imported data 
       // loop through csv data array and insert (append) as rows into 'Ciclo + formated date' sheet 
       for (var i=0, lenCsv=csvData.length; i<lenCsv; i++) { 
        newsheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i])); 
       } 
       /* 
       ** report data is now in 'Ciclo + formated date' sheet in the spreadsheet - process it as needed, 
       ** then delete 'NEWDATA' sheet using ss.deleteSheet(newsheet) 
       */ 
       // rename the report.csv file so it is not processed on next scheduled run 
       file.setName("plancomercial-"+(new Date().toString())+".csv"); 
       } 
      }; 


      // http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm 
      // This will parse a delimited string into an array of 
      // arrays. The default delimiter is the comma, but this 
      // can be overriden in the second argument. 

      function CSVToArray(strData, strDelimiter) { 
       // Check to see if the delimiter is defined. If not, 
       // then default to COMMA. 
       strDelimiter = (strDelimiter || ","); 

       // Create a regular expression to parse the CSV values. 
       var objPattern = new RegExp(
       (
        // Delimiters. 
        "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" + 

        // Quoted fields. 
        "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + 

        // Standard fields. 
        "([^\"\\" + strDelimiter + "\\r\\n]*))" 
       ), 
       "gi" 
      ); 

       // Create an array to hold our data. Give the array 
       // a default empty first row. 
       var arrData = [[]]; 

       // Create an array to hold our individual pattern 
       // matching groups. 
       var arrMatches = null; 

       // Keep looping over the regular expression matches 
       // until we can no longer find a match. 
       while (arrMatches = objPattern.exec(strData)){ 

       // Get the delimiter that was found. 
       var strMatchedDelimiter = arrMatches[ 1 ]; 

       // Check to see if the given delimiter has a length 
       // (is not the start of string) and if it matches 
       // field delimiter. If id does not, then we know 
       // that this delimiter is a row delimiter. 
       if (
        strMatchedDelimiter.length && 
        (strMatchedDelimiter != strDelimiter) 
       ){ 

        // Since we have reached a new row of data, 
        // add an empty row to our data array. 
        arrData.push([]); 

       } 

       // Now that we have our delimiter out of the way, 
       // let's check to see which kind of value we 
       // captured (quoted or unquoted). 
       if (arrMatches[ 2 ]){ 

        // We found a quoted value. When we capture 
        // this value, unescape any double quotes. 
        var strMatchedValue = arrMatches[ 2 ].replace(
        new RegExp("\"\"", "g"), 
        "\"" 
       ); 

       } else { 

        // We found a non-quoted value. 
        var strMatchedValue = arrMatches[ 3 ]; 

       } 

       // Now that we have our value string, let's add 
       // it to the data array. 
       arrData[ arrData.length - 1 ].push(strMatchedValue); 
       } 

       // Return the parsed data. 
       return(arrData); 
      };   

ありがとうございます!

答えて

1

次のスクリプトはどうですか?

"setValues"では、多次元配列をスプレッドシートに直接インポートできます。 "getRange" について

、4つのパラメータは、それぞれ行( 座標)、カラム( 座標)、numRowsの数(データ・アレイの数(サイズ))とnumColumnsの(データ配列内の1つの要素の数(サイズ))であります。 Ref

function importData() { 
    var fSource = DriveApp.getFolderById("0B1FOmGiNuwVNMU1SU29kc2dGSkE").getFiles(); // reports_folder_id = id of folder where csv reports are saved 
    var csvfile = 'plancomercial.csv'; // latest report file 
    var ss = SpreadsheetApp.openById("1w7iW_DKJPZEcy9C8N9iskh_GpCmmL6N9PiZNSpXtrcc"); // data_sheet_id = id of spreadsheet that holds the data to be updated with new report data 

    while (fSource.hasNext()) { 
    var file = fSource.next(); 
    if (file.getName() == csvfile) { 
     var dateObj = new Date(); 
     var month = dateObj.getUTCMonth() + 1; //months from 1-12 
     var day = dateObj.getUTCDate(); 
     var year = dateObj.getUTCFullYear(); 
     var newdate = year + "/" + month + "/" + day; //formating date to be stamped into the sheet label 
     var newsheet = ss.insertSheet('Ciclo '+ newdate,0); // create a 'Ciclo + formated date' sheet to store imported data 
     var csv = file.getBlob().getDataAsString(); 
     var csvData = CSVToArray(csv); // see below for CSVToArray function 
     newsheet.getRange(1,1,csvData.length,csvData[0].length).setValues(csvData); 
     /* 
     ** report data is now in 'Ciclo + formated date' sheet in the spreadsheet - process it as needed, 
     ** then delete 'NEWDATA' sheet using ss.deleteSheet(newsheet) 
     */ 
     // rename the report.csv file so it is not processed on next scheduled run 
     file.setName("plancomercial-"+(new Date().toString())+".csv"); 
    } 
    } 
} 
関連する問題