我需要从我的根文件夹中将电子表格保存为特定给定文件夹中的csv文件。
在成员的帮助下,我能够将多个CSV文件合并到一个工作表中,并从多行中删除相同的内容,现在我想将此工作表从根文件夹中另存为给定文件夹中的CSV文件。
/* Retrieve the desired folder */
var myFolder = DriveApp.getFolderById('1niUw2-');
/* Get all spreadsheets that resided on that folder */
var spreadSheets = myFolder.getFilesByType(MimeType.CSV);
/* Create the new spreadsheet that you store other sheets */
var newSpreadSheet = SpreadsheetApp.create("Merge Sheets");
/* Iterate over the spreadsheets over the folder */
while(spreadSheets.hasNext()) {
var sheet = spreadSheets.next();
var file = DriveApp.getFileById(sheet.getId());
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var newSheet = newSpreadSheet.getActiveSheet();
for (var i=0;i<csvData.length;i++) {
newSheet.appendRow(csvData[i]);
}
var data = newSheet.getDataRange();
var values = data.getValues();
for (var i=values.length -1; i >=1; i--){
if (values[i][0] == "Titel"){
newSheet.deleteRow(i+1);
}
}
myFolder.createFile('MERGED',newSheet,MimeType.CSV);
} }
我需要将此已编辑的电子表格文件“合并工作表”从我的根文件夹作为csv文件放入到给定的文件夹中。
答案 0 :(得分:2)
Titel
的行。如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。
在脚本中,使用appendRow()
将每个CSV数据放入新的电子表格,然后,当列“ A”的值为Titel
时,将删除该行。在这种情况下,我认为处理成本可能会很高。那么下面的流程呢?
Titel
的行。当上述流程反映到脚本时,它如下所示。
function myFunction() {
var myFolder = DriveApp.getFolderById('###'); // Please set the folder ID including the CSV files.
var csvFiles = myFolder.getFilesByType(MimeType.CSV);
var data = [];
while (csvFiles.hasNext()) {
var csvFile = csvFiles.next();
var file = DriveApp.getFileById(csvFile.getId());
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()).filter(function(row) {return row[0] != "Titel"});
Array.prototype.push.apply(data, csvData);
}
myFolder.createFile('MERGED', data.map(function(row) {return row.join(",")}).join("\n"), MimeType.CSV);
}
如果要创建合并的CSV数据作为电子表格,请将下面的脚本放在myFunction
函数的最后一行。
SpreadsheetApp.create("Merge Sheets").getSheets()[0].getRange(1, 1, data.length, data[0].length).setValues(data);
如果我误解了您的问题,而这不是您想要的方向,我深表歉意。
如果要删除每个CSV数据的第一行,如何进行以下修改?请如下修改我上面修改过的脚本。
从:var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()).filter(function(row) {return row[0] != "Titel"});
至:
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
csvData.shift();
或
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
if (data.length > 0) csvData.shift();