2016-09-21 12 views
0

ERPからGAアカウントにCSVを電子メールで送信し、そのアカウントにラベルを適用するプロセスを設定しました。添付ファイルを解析し、別のGAプロジェクトのデータソースとして使用するスプレッドシートを更新したいと思います。私はいつも私の脳が配線されているかのように何かをしようとすると、内側のループに常に執着しています。基本的に私は、スプレッドシートなどのような添付のCSVファイルの静的名前のセットのタブを設定した:電子メール添付ファイルを使用してスプレッドシートを更新

*//Static array values will never change 
    var sheetNames = ["Wage Codes", "Phase Codes", "Cost Types", "Department"] 
    var csvName = ["Wage_Codes.csv", "Phase_Codes.csv", "Cost_Types.csv", "Department_Codes.csv"]* 

Iは各アレイはcsvNameからデータをインポートし、sheetNamesにセルの値を設定することをループしたいです

私は、添付CSVファイルから配列を取得し、これを使用してロガーにそれらを読むことができます:

var label = "Timesheet Data" 

するvarスレッド= GmailApp.getUserLabelByName(ラベル).getThreads();

//静的配列の値は するvar sheetNamesの= [ "賃金コード"、 "フェーズコード"、 "コストタイプ"、 "部門"] するvar csvName = [ "Wage_Codes.csv"、「Phase_Codesを変更することはありません。 CSV」、 『Cost_Types.csv』、 『Department_Codes.csv』]

//strip CSV attachemnts from emails and put in GDrive 
    var count = thread[0].getMessageCount(); 
    for (var i = 0 ; i < count; i++) { 
    var attachments = thread[0].getMessages()[i].getAttachments()[0]; 
    var csvData = Utilities.parseCsv(attachments.getDataAsString(), ","); 

    Logger.log(csvData); 

そして、私はこれを使って、個別にダウンロードしたベースでこれを行うことができます。

における内部ループにそれを置く
function importDeptCodes() { 
    var ss = SpreadsheetApp.openById('sheetID').getSheetByName('Cost Types'); 
    var file = DriveApp.getFilesByName('Cost_Types.csv').next(); 
    var arry = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    ss.getRange(1, 1, arry.length, arry[0].length).setValues(arry); 
    Logger.log(arry) 
} 

最初のコードサンプルは、私の脳が大きな音を立てている場所です。

yhe jのループが1つの上のレベルであり、部署シートにEVERYTHINGへの唯一の輸入の方法、それは今

function importCodes() { 
    var sheetNames = ["Wage Codes", "Phase Codes", "Cost Types", "Department"] 
    var csvName = ["Wage_Codes.csv", "Phase_Codes.csv", "Cost_Types.csv", "Department_Codes.csv"] 
    var ss = SpreadsheetApp.openById('sheetID'); 

    for (var i = 0; i < sheetNames.length; i++) { 
    var ss = SpreadsheetApp.openById('sheetID'); 
    var sheet = ss.getSheetByName(sheetNames.valueOf()[i]); 

     Logger.log(sheet.getName()) 
} 
    for (var j=0; j < csvName.length; j++) { 
    var file = DriveApp.getFilesByName(csvName.valueOf()[j]).next(); 
    var arry = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    sheet.getRange(1, 1, arry.length, arry[0].length).setValues(arry); 
    Logger.log(sheet) 
    } 

} 
+0

添付ファイルからCSVファイルを取得した後、あなたはプログラムで必要に応じてデータを追加/交換は、Google Appsスクリプトを使用して、既存のGoogleスプレッドシートにあなたのドライブでcsvファイルからデータをインポートすることができます。 アップロードに使用したCSVファイルまたはXLSファイルからGoogleスプレッドシートに自動的にデータをインポートする方法(http://stackoverflow.com/questions/26854563/how-アップロードからデータを自動的にインポートする - csv-or-xls-file-to-google-sheet)それが役に立てば幸い! – Teyam

答えて

0

あなたはCSV取得することができているとき、それはすべて4時間をインポートしている次のコードを使用してファイル名を添付ファイルから検索し、対応するシートを見つけてデータをインポートします。

var attachment = thread[0].getMessages()[i].getAttachments()[0]; 
    var fileIndex = csvName.indexOf(attachment.getName()); 
    if (fileindex !== -1) { 
    var sheet = ss.getSheetByName(sheetNames[fileIndex]); 
    // write the import code here 
    } 
+0

私は混乱しています。あなたのブログのAmitからこのアイデアを得ました。問題を実装するだけです。 – Rockn

+0

Amit Kicks ass! –

+0

ありがとうAmit!すべてのスプーンを食べることなくそれを整理しました。チャンピオンのように動作します。 – Rockn

関連する問題