質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

6335閲覧

【GAS】データが追加された差異分のみCSV取得したい

JipvOvxMCyFrRX2

総合スコア18

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2019/10/10 05:23

CSVには、データベースからデータが定期的に追加されます。

追加分のみグーグルスプレッドシートで取得したいのですが、
やり方が分からず、全てのデータの取り込みしかできない状況です。

どなたかご教示の程よろしくお願い申し上げます。

//売上集計表 ID取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssName = ss.getName();
var ssId = DriveApp.getFilesByName(ssName).next().getId();
//売上集計表 システムMTシート OPEN
var ssOpen = SpreadsheetApp.openById(ssId);

function syain_import() {

var data_sh = ssOpen.getSheetByName('データ');

// 対象のCSVファイルが置かれているフォルダ名、ファイル名を定義
var folderName = "CSV保管";
var fileName = "data.csv";
var folders = DriveApp.getFoldersByName(folderName);

//フォルダとファイルの検索
while (folders.hasNext()) {
var folder = folders.next();
if (folder.getName() == folderName) {
var files = DriveApp.getFilesByName(fileName);
while (files.hasNext()) {
var file = files.next();
if (file.getName() == fileName) {

//設定しないでShift_JISのままだと文字化けする var data = file.getBlob().getDataAsString("Shift_JIS"); var csv = Utilities.parseCsv(data); //セルA1からCSVの内容を書き込んでいく data_sh.getRange(2,1,csv.length,csv[0].length).setValues(csv); return; } } }

}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

javascript

1function syain_import() { 2 //売上集計表 システムMTシート OPEN 3 const sheetName = "データ"; 4 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); 5 6 // 対象のCSVファイルが置かれているフォルダ名、ファイル名を定義 7 const folderName = "CSV保管"; 8 const fileName = "data.csv"; 9 const folders = DriveApp.getFoldersByName(folderName); 10 11 //フォルダとファイルの検索 12 while (folders.hasNext()) { 13 var folder = folders.next(); 14 if (folder.getName() !== folderName) { continue; } 15 var files = folder.getFilesByName(fileName); 16 while (files.hasNext()) { 17 var file = files.next(); 18 if (file.getName() !== fileName) { continue; } 19 20 //設定しないでShift_JISのままだと文字化けする 21 const data = file.getBlob().getDataAsString("Shift_JIS"); 22 23 const csv = Utilities.parseCsv(data); 24 25 // pattern A. 消す。消せるなら消すのが確実かつ安全 26 sheet.clearContent(); 27 //セルA1からCSVの内容を書き込んでいく 28 sheet.getRange(2,1,csv.length,csv[0].length).setValues(csv); 29 return; 30 // pattern B. 件数が合致していて、CSVが追記のみ起こるなら使える 31 const r = sheet.getLastRow(); 32 //セルA1からCSVの内容を書き込んでいく 33 const tail = csv.slice(r-1); 34 sheet.getRange(2,1,tail.length,tail[0].length).setValues(tail); 35 return; 36 // pattern C. A列がユニークキーだと仮定 37 const existing = sheet.getDataValues().map(function(e){return e[0]}).reduce(function(a,c){return a.concat(c);},[]); 38 const diff = csv.filter(function(e){return existing.indexOf(e[0]) === -1;}); 39 sheet.getRange(2,1,diff.length,diff[0].length).setValues(diff); 40 return; 41 } 42 } 43}

投稿2019/10/21 16:53

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JipvOvxMCyFrRX2

2019/12/12 08:46

参考にさせていただきまして、下記のようにFIXいたしました。 本当にありがとうございました! function syain_import() { //売上集計表 システムMTシート OPEN const sheetName = "データ"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); // 対象のCSVファイルが置かれているフォルダ名、ファイル名を定義 const folderName = "CSV保管"; const fileName = "データ.csv"; const folders = DriveApp.getFoldersByName(folderName); //フォルダとファイルの検索 while (folders.hasNext()) { var folder = folders.next(); if (folder.getName() !== folderName) { continue; } var files = folder.getFilesByName(fileName); while (files.hasNext()) { var file = files.next(); if (file.getName() !== fileName) { continue; } //設定しないでShift_JISのままだと文字化けする const data = file.getBlob().getDataAsString("Shift_JIS"); const csv = Utilities.parseCsv(data); //差分書き込み const r = sheet.getLastRow(); const tail = csv.slice(r-1); sheet.getRange(r+1,1,tail.length,6).setValues(tail); return; } } }
guest

0

リンク先記事を参考にスプレッドシートに記入済みの値をとった配列とCSVから取得した配列で差分をとって、差分のみ追記してはいかがでしょうか?
Qiita:Google Apps Scriptを使って2つの2次元配列の差分を取得したい

投稿2019/10/11 07:51

hiroshi0240

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問