Google Apps 脚本 - 将 xlsx 转换为 sheet 覆盖现有脚本
Google Apps Script - convert xlsx to sheet overwriting the existing one
我在尝试将 xlsx 文件转换为 google sheet 时遇到了一个真正的大问题,每天都会覆盖同一个文件。
下面是每天生成一个新文件的代码。sheet 但我确实需要覆盖现有文件,以便能够使用更新后的数据更新 google 数据工作室仪表板。
你能帮帮我吗?
function convertExceltoGoogleSpreadsheet(fileName) {
try {
fileName = fileName || "GDS_Stock_Positioning.xlsx";
var excelFile = DriveApp.getFilesByName(fileName).next();
var fileId = excelFile.getId();
var folderId = Drive.Files.get("1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz").parents[0].id;
var blob = excelFile.getBlob();
var resource = {
title: excelFile.getName(),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: "1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz"}],
};
Drive.Files.insert(resource, blob);
Drive.Files.remove(fileId)
} catch (f) {
Logger.log(f.toString());
}
}
function DeleteOldFiles() {
var Folders = new Array(
'1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz',
'1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz'
);
var Files;
Logger.clear();
for (var key in Folders) {
Folder = DriveApp.getFolderById(Folders[key])
Files = Folder.getFiles();
Logger.log('Opening Folder: ' + Folder.getName());
while (Files.hasNext()) {
var File = Files.next();
if (new Date() - File.getLastUpdated() > 1 * 12 * 60 * 60 * 1000) {
File.setTrashed(true); // Places the file in the Trash folder
//Drive.Files.remove(File.getId()); // Permanently deletes the file
Logger.log('File ' + File.getName() + ' was deleted.');
}
}
}
if(Logger.getLog() != '')
MailApp.sendEmail('xxxx@gmail.com', 'Backups have been removed from Google Drive', Logger.getLog());
}
我相信你的目标如下。
- 您想使用 EXCEL 数据覆盖现有的 Google 电子表格。
- 您想使用 Google Apps 脚本实现此目的。
在这种情况下,我认为可以通过驱动器API的“文件:更新”的方法来实现。
示例脚本:
在您使用此脚本之前,please enable Drive API at Advanced Google services。并且,请设置xlsxFileName
和spreadsheetId
的变量。 xlsxFileName
是 XLSX 文件的文件名。 spreadsheetId
id 被 XLSX 数据覆盖的 Spreadsheet 的 Spreadsheet ID。
function myFunction() {
const xlsxFileName = "###"; // Please set the filename of XLSX file.
const spreadsheetId = "###"; // Please set the Spreadsheet ID. This Spreadsheet is overwritten by EXCEL data.
const xlsx = DriveApp.getFilesByName(xlsxFileName || "GDS_Stock_Positioning.xlsx");
if (!xlsx.hasNext()) throw new Error("No excel file.");
Drive.Files.update({mimeType: MimeType.GOOGLE_SHEETS}, spreadsheetId, xlsx.next().getBlob());
}
- 当您运行此脚本时,
spreadsheetId
的电子表格被xlsxFileName
或GDS_Stock_Positioning.xlsx
的XLSX 数据覆盖。如果不使用 xlsxFileName
,则使用 GDS_Stock_Positioning.xlsx
。这是来自您的脚本。
重要提示:
- 此脚本覆盖现有的电子表格。所以请小心。我想推荐使用示例电子表格来测试脚本。
参考:
我在尝试将 xlsx 文件转换为 google sheet 时遇到了一个真正的大问题,每天都会覆盖同一个文件。 下面是每天生成一个新文件的代码。sheet 但我确实需要覆盖现有文件,以便能够使用更新后的数据更新 google 数据工作室仪表板。 你能帮帮我吗?
function convertExceltoGoogleSpreadsheet(fileName) {
try {
fileName = fileName || "GDS_Stock_Positioning.xlsx";
var excelFile = DriveApp.getFilesByName(fileName).next();
var fileId = excelFile.getId();
var folderId = Drive.Files.get("1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz").parents[0].id;
var blob = excelFile.getBlob();
var resource = {
title: excelFile.getName(),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: "1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz"}],
};
Drive.Files.insert(resource, blob);
Drive.Files.remove(fileId)
} catch (f) {
Logger.log(f.toString());
}
}
function DeleteOldFiles() {
var Folders = new Array(
'1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz',
'1g5oIY5qeH5tNkMBGIzj1ddqX9DCXqJrz'
);
var Files;
Logger.clear();
for (var key in Folders) {
Folder = DriveApp.getFolderById(Folders[key])
Files = Folder.getFiles();
Logger.log('Opening Folder: ' + Folder.getName());
while (Files.hasNext()) {
var File = Files.next();
if (new Date() - File.getLastUpdated() > 1 * 12 * 60 * 60 * 1000) {
File.setTrashed(true); // Places the file in the Trash folder
//Drive.Files.remove(File.getId()); // Permanently deletes the file
Logger.log('File ' + File.getName() + ' was deleted.');
}
}
}
if(Logger.getLog() != '')
MailApp.sendEmail('xxxx@gmail.com', 'Backups have been removed from Google Drive', Logger.getLog());
}
我相信你的目标如下。
- 您想使用 EXCEL 数据覆盖现有的 Google 电子表格。
- 您想使用 Google Apps 脚本实现此目的。
在这种情况下,我认为可以通过驱动器API的“文件:更新”的方法来实现。
示例脚本:
在您使用此脚本之前,please enable Drive API at Advanced Google services。并且,请设置xlsxFileName
和spreadsheetId
的变量。 xlsxFileName
是 XLSX 文件的文件名。 spreadsheetId
id 被 XLSX 数据覆盖的 Spreadsheet 的 Spreadsheet ID。
function myFunction() {
const xlsxFileName = "###"; // Please set the filename of XLSX file.
const spreadsheetId = "###"; // Please set the Spreadsheet ID. This Spreadsheet is overwritten by EXCEL data.
const xlsx = DriveApp.getFilesByName(xlsxFileName || "GDS_Stock_Positioning.xlsx");
if (!xlsx.hasNext()) throw new Error("No excel file.");
Drive.Files.update({mimeType: MimeType.GOOGLE_SHEETS}, spreadsheetId, xlsx.next().getBlob());
}
- 当您运行此脚本时,
spreadsheetId
的电子表格被xlsxFileName
或GDS_Stock_Positioning.xlsx
的XLSX 数据覆盖。如果不使用xlsxFileName
,则使用GDS_Stock_Positioning.xlsx
。这是来自您的脚本。
重要提示:
- 此脚本覆盖现有的电子表格。所以请小心。我想推荐使用示例电子表格来测试脚本。