【发布时间】:2019-07-25 22:11:18
【问题描述】:
我有:
- .xlsx 文件每天自动导入到 Google Drive 文件夹中
我想要:
- 每个文件都转换为 CSV 并保存到不同的文件夹中
- 每个文件都转换为 Google 表格并保存到不同的文件夹中
- 处理完成后删除的原始 xlsx 文件
目前我的流程是这样的:
- 将 xlsx 转换为 2 个新文件:CSV 和 Google 表格
- 将 CSV 保存到 CSV 文件夹
- 将 Google 表格保存到表格文件夹
我最初使用此 https://ctrlq.org/code/20248-convert-excel-to-csv 教程转换为 CSV,直到我意识到它将每个 .xlsx 工作表的“无标题”副本作为 Drive 电子表格保存到我的根文件夹。我不知道如何为那些无标题的人分配标题或文件夹位置。能够做到这一点也可以解决我眼前的问题。
然后我尝试使用此(下)https://ctrlq.org/code/20500-convert-microsoft-excel-xlsx-to-google-spreadsheet 的修改版本和 MimeType .CSV,它正确地将我的 CSV 放置在具有正确名称的正确文件夹中,但数据未正确解析并且看起来已损坏。
function exceltoSheets() {
var SOURCE_XLS_FOLDER = '123465';
var SHEET_FOLDER = '789456';
var CSV_TEST = '456123';
var sourceFolderID = DriveApp.getFolderById(SOURCE_XLS_FOLDER),
mimes = [MimeType.MICROSOFT_EXCEL, MimeType.MICROSOFT_EXCEL_LEGACY];
for (var m = 0; m < mimes.length; m++) {
var sourceFiles = sourceFolderID.getFilesByType(mimes[m]);
while (sourceFiles.hasNext()) {
try {
var sourceFile = sourceFiles.next();
var sourceName = sourceFile.getName().replace(".xlsx","");
var sourceNameTC = sourceName + ".csv"
var sourceNameDS = "ds_data_import_" + sourceName;
var fileId = sourceFile.getId();
var blob = sourceFile.getBlob();
var resourceDS = {
title: sourceNameDS,
mimeType: MimeType.GOOGLE_SHEETS,
convert: true,
parents: [{id: SHEET_FOLDER}]
};
var resourceTC = {
title: sourceNameTC,
mimeType: MimeType.CSV,
convert: true,
parents: [{id: CSV_TEST}],
};
Drive.Files.insert(resourceDS, blob);
Drive.Files.insert(resourceTC, blob);
} catch (f) {
Logger.log(f.toString());
}
sourceFile.setTrashed(true);
}
}
}
如果我正确解析 CSV,我最终会在我的根文件夹中看到无标题的工作表,如果我正确解析工作表,我最终会得到损坏的 CSV。我想要结果:
- xlsx在指定文件夹中转换为CSV
- xlsx 转换为指定文件夹中的 Google 表格
- xlsx 处理完成后从驱动器中删除
【问题讨论】:
-
我能问一下你的情况吗? 1. 文件夹有子文件夹,要查看所有子文件夹的文件吗? 2. XLSX 文件的最大大小是多少? 3. 我认为
I need可能与All I want is不同。这个怎么样? -
所有文件夹都没有子文件夹,只有文件夹中包含的所有文件/放置在根目录下的新文件夹中。 XLSX 文件有些标准,每个文件有 21 列,不到 1,000 行,不到 60 KB。我也更新了语言谢谢。
-
感谢您的回复和更新。您想使用特定文件夹下的 XLSX 文件(小于 60 KB)。我可以这样理解。我还有一个问题。我无法理解
xlsx data aggregated to last line in sheet file和all data in each file copied after row 12 and saved to the last line in a designated drive spreadsheet。从您的脚本和问题中,我无法理解从 XLSX 文件中检索值后的过程。我可以问你这个吗?我为我糟糕的英语水平道歉。 -
感谢您的耐心等待!实际上我没有将它包含在我的初始代码中并在最后一个小时计算出聚合,我将再次更新问题。转换我的文件并将它们放在正确的文件夹中是我需要帮助的。
-
感谢您的回复。我以为我能理解你的问题。所以我提出了一个修改后的脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
标签: google-apps-script google-sheets google-drive-api google-sheets-api