【发布时间】:2021-03-22 09:43:16
【问题描述】:
编辑
我将标题编辑为更好的标题。
来自:停止脚本再次创建相同的文件
To:停止脚本再次创建相同的文件或/和覆盖现有文件
在 Cooper 的 this post 和 Tanaike 的 this 的帮助下,我编写了这样的脚本。
问题
当我运行代码 1 次 AND RUN AGAIN 再次出现另一个文件。
我怎样才能阻止这个?如果我已经有了它,我不希望脚本创建第二个文件。
function excel2SheetsAndSorting4LED(){
sta56160812();
loadSortSheetsInFolder();
}
// this from Tanaike
function sta56160812() {
// const folderId = "xxxxx"; // Please set the folder ID.
var sourceFldrId = "xxxxx"; // ID of SOURCE folder
var destinationFldrId = "zzzzz"; // ID of DESTINATION folder (can be the same folder)
const folder = DriveApp.getFolderById(sourceFldrId);
const files = folder.getFiles();
while(files.hasNext()) {
const file = files.next();
if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var name = file.getName().split('.')[0];
var resource = {
title: name + '_converted',
parents: [{id: destinationFldrId}],
mimeType: MimeType.GOOGLE_SHEETS
};
var spreadsheet = Drive.Files.copy(resource, file.getId());
// var sheet = SpreadsheetApp.openById(spreadsheet.id).getSheets()[0];
// var value = sheet.getDataRange().getValues();
// Logger.log(value)
}
}
}
// and this from Cooper: https://stackoverflow.com/questions/66695743/how-to-add-a-formula-to-all-spreadsheets-in-a-folder-using-a-script#comment117933455_66695743
function loadAndSortSpreadsheetsInFolder() {
const values = [
[1, 'where Col5<>0', "=COUNTA(K4:K)",'', "=COUNTA(M4:M)", "=COUNTA(N4:N)"],
[2, "=IF(K2=FALSE,,\" and Col5<=95\")", '', '', '', ''],
[3, "=QUERY(SORT({A3:B,C3:C+0,D3:D,E3:G+0,Y3:AF},3,0,5,1),J1&J2,1)", '', '', '', '']
];
const destinationFldrId = "zzzzz"; // ID of DESTINATION folder (can be the same folder) //
const fldr = DriveApp.getFolderById(destinationFldrId);
let files = fldr.getFilesByType(MimeType.GOOGLE_SHEETS);
while (files.hasNext()) {
let file = files.next();
let id = file.getId();
let ss = SpreadsheetApp.openById(id);
let sh = ss.getSheets()[0].copyTo(ss);
sh.setTabColor("ff0000");
ss.moveActiveSheet(1);
let rg1 = sh.getRange("I1:Y").clear();
let rg2 = sh.getRange(1, 9, values.length, values[0].length).setValues(values);
let rg3 = sh.getRange(2,11).insertCheckboxes();
}
}
而且脚本也很慢,因为它首先创建所有文件,然后在上面写入。
如何让它在目的地创建,打开文件一次,写入,关闭,转到下一个?
谢谢。
【问题讨论】:
标签: google-apps-script google-sheets google-drive-api