2016-05-06 18 views
1

URLからzipを取得し、Googleスプレッドシートに自動的にインポートしようとしています。GoogleスプレッドシートにZIPデータをインポート

ジップにはCSVデータのファイルが1つ含まれています。

私はCSVデータをGoogleスプレッドシートにインポートできますが、Googleスプレッドシートにアップロードする前に、zipをダウンロードしてファイルを抽出しなければならないというステップを省きたいと思っています。

私の質問によれば、URLからZip形式のCSVファイルをGoogleスプレッドシートに直接インポートすることは可能ですか?そうでない場合、これはGoogle Apps Scriptでどのように行われますか?

答えて

0

質問に答えるために、CSVを含むZipファイルを直接スプレッドシートにインポートすることはできません。あなたの2番目の質問に答えるには:

この質問は広くて、3ビットに分解する必要があります。

  1. あなたが軌道に乗るために
  2. 、私は簡単にこれらの三つの領域のそれぞれをカバーします

あなたのシートにCSVを挿入ジップ

  • からCSVを抽出するURL
  • から郵便番号を取得正しい方向で、私はあなたのための本格的な解決策を書くつもりはありません。私はいくつかのコード例を提供して、あなたが簡単に行くことができるようにしています。これはエンドツーエンドのソリューションではありません。

    URLあなたがURLFetchApp Serviceでこれを行うことができ

    から郵便番号を取得します。

    何かのように:あなたは、ZIPファイルの内容を取得ZIPでCSVファイルを見つけ、その後、としてそれを解析する必要がジップ

    からCSVを抽出

    var urlData = UrlFetchApp.fetch(link); 
    var zipBlob = urlData.getBlob(); 
    var files = Utilities.unzip(blob); 
    

    CSVを配列に追加します。私の例では、Apps Script CSVパーサーがバグであるため、正規表現を使用してCSVをエスケープします。

    function GetCSVFromZip(zipBlob){ 
        var files = Utilities.unzip(zipBlob); 
        var csvAttachment = FindBlobByName(files, 'myPartialName'); 
        if(csvAttachment !== -1){ 
        var dataString = csvAttachment.getDataAsString(); 
        var escapedString = dataString.replace(/(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]\r\n(?:\\[\s\S][^'\\]\r\n)*')/g, '\r\n'); //http://stackoverflow.com/a/29452781/3547347 
        var csv = Utilities.parseCsv(escapedString); 
        } 
    } 
    
    //Finds a blob by a partial name match, assumes no multiple matches 
    function FindBlobByName(blob, name){ 
        for(var i = 0; i < blob.length; i++){ 
        var blobName = blob[i].getName(); 
        var regex = new RegExp(name, 'i'); 
        var result = blobName.match(regex); 
        if(result){ 
         return blob[i]; 
        }  
        } 
        return -1; 
    } 
    

    あなたのシートにCSVを挿入

    あなたはこのためにSpreadsheetApp Serviceを使用する必要があります。スプレッドシートを取得し、データ範囲を取得し、その値をCSV配列に設定します。これらの線に沿って何か:

    var sheet = SpreadsheetApp.openById(id).getSheetByName(name); 
    var range = sheet.getRange(1, 1, csv.length, csv[0].length); 
    range.setValues(csv); 
    
  • 1

    あなたの入力のためのダグラスありがとうございます。あなたのコードの助けを借りて私はそれを簡素化し、リンクからzipをスプレッドシートに直接読むことができました。ここに私のコードは次のとおり

    関数testzip(){

    var url = "url goes here" 
    var zipblob = UrlFetchApp.fetch(url).getBlob(); 
    var unzipblob = Utilities.unzip(zipblob); 
    var unzipstr=unzipblob[0].getDataAsString(); 
    var csv = Utilities.parseCsv(unzipstr); 
    
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
    ss.getRange(1, 1, csv.length, csv[0].length).setValues(csv); 
    

    }

    関連する問題