我有一個 csv 檔案,每天都會被一個新檔案覆寫。
該檔案包含一個表格,其中包含以下欄位:名字 | 姓氏 | 地址等
這里的重要方面是新的 CSV 檔案將包含新資料,但可以在任何行上。實際上,會有一些行多次包含同一個人,但某些列中的資料不同。
我一直在嘗試找出一種方法來比較從 CSV 進入電子表格的陣列與當前資料,然后僅在存在根本不匹配的行時復制新資料。
到目前為止,我已經勾勒出這個:
function copyData() {
// get hold of the CSV File
const fileName = 'Imported Data.csv';
const file = DriveApp.getFilesByName(fileName).next();
// get the data
const dataBlob = file.getBlob();
const csvString = dataBlob.getDataAsString();
const csvData = Utilities.parseCsv(csvString);
const sheet = SpreadsheetApp.getActiveSheet();
const allData = sheet.getDataRange().getValues();
for (let i = 0; i < allData.length; i ) {
const exists = csvData[i];
// check to see if the file already exitst
if (exists.hasNext) {
console.log('yes');
}
else {
console.log('no');
}
}
}
我意識到這是完全錯誤的,但您可以看到我正在嘗試查看陣列中的行 (csvData) 是否與電子表格中的行 (allData) 匹配。
我確信有人必須有更好的解決方案(實際上可行)來從 CSV 檔案的中間添加新資料。
抱歉,我對 Apps 腳本缺乏了解。
uj5u.com熱心網友回復:
在您的情況下,如何進行以下修改?
修改后的腳本:
function copyData() {
const fileName = 'Imported Data.csv';
const file = DriveApp.getFilesByName(fileName).next();
const dataBlob = file.getBlob();
const csvString = dataBlob.getDataAsString();
const csvData = Utilities.parseCsv(csvString);
const sheet = SpreadsheetApp.getActiveSheet();
const allData = sheet.getDataRange().getValues();
// I modified below script.
const obj = allData.reduce((o, r) => (o[r.join("")] = true, o), {});
const values = csvData.filter(r => !obj[r.join("")]);
if (values.length > 0) {
sheet.getRange(sheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
}
}
allData運行此腳本時,將檢查和之間的重復值csvData。并且,沒有重復的行將附加到活動作業表中。此修改后的腳本按所有列檢查重復的行。當您想檢查特定列時,請告訴我。
參考:
- 減少()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428836.html
下一篇:顫振繪制容器,中心有曲線
