Google Apps Scriptを使ってスプレッドシートにGoogleドライブ内の任意のフォルダ内に存在するCSVファイルを取り込みたいです。
取り込み時にスプレッドシートの特定のセルに記載した文字列(10行程度)を参照して、CSVから該当の文字列のあるレコードのみを記載したいです。
取り込むCSVは以下のようなカタチ
上記を『Type』列をAHREFで絞り込み、さらに『url』列をスプレッドシートの『シート1』に
記載したUrlを参照して該当のurlが存在してるレコードのみを『シート2』に取り込みたいです。
シート1に『http://www.456.com/』、『http://www.789.com/』を記載
シート2に書き込まれるのは以下
Type | Source | url |
---|---|---|
AHREF | http://www.123.com/ | http://www.456.com/ |
AHREF | http://www.123.com/ | http://www.789.com/ |
上記、以下のスクリプトによってCSVを取り込むことはできているのですが、その後の絞り込みをどう実装すべきなのかわからないためご教示いただきたいです。
function
1 2 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 3 4 var csvFolderkey = sheet.getSheetByName('取り込みフォルダ指定').getRange('B2').getValue(); 5 6 if(csvFolderkey == ""){ 7 Browser.msgBox("CSVファイルの格納フォルダのIDが記入されていません"); 8 return 0; 9 } 10 11 var files = DriveApp.searchFiles("'"+csvFolderkey+"' in parents"); 12 var csvFile = ""; 13 14 while (files.hasNext()) { 15 16 csvFile = csvFile + files.next().getBlob().getDataAsString("UTF-8"); 17 } 18 19 var CSV = {}; 20 CSV.parse2 = function(str) { 21 var i, c, r, q, l, m, v, j, len=str.length, rows = [], row = []; 22 m = (l = str.indexOf('\r\n')<0 ? str.indexOf('\r')<0 ? '\n' : '\r' : '\r\n').length; 23 for(i=0,c=r=-1; i<len; i++) { 24 if (str.charAt(i) === '"') { 25 for(j=0,q=i+1; q<len; j++,q++) { 26 q = (q=str.indexOf('"',q)) < 0 ? len+1 : q; 27 if (str.charAt(++q) !== '"') {break;} 28 } 29 row.push((v=str.substring(i+1,(i=q)-1),j) ? v.replace(/""/g,'"') : v); 30 } else { 31 if (c<i) {c=str.indexOf(',',i);c=c<0?len:c;} 32 if (r<i) {r=str.indexOf(l,i);r=r<0?len:r;} 33 row.push(str.substring(i,(i=c<r?c:r))); 34 } 35 if (i === r || l === (m>1?str.substr(i,m):str.charAt(i))) {rows.push(row);row=[];i+=m-1;} 36 } 37 str.charAt(i-1) === ',' && row.push(''); 38 row.length && rows.push(row); 39 str.substr(i-1,m) === l && rows.push([]); 40 return rows; 41}; 42 43 var csvData = CSV.parse2(csvFile); 44 var sheetman = sheet.getSheetByName('CSV結合'); 45 46 47 for (var i = 0; i < csvData.length; i++) { 48 sheetman.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i])); 49 } 50 51 Browser.msgBox("CSVデータのインポートが完了しました。"); 52}
回答2件
あなたの回答
tips
プレビュー