将 excel 文件另存为 gsheet
Save a excel file as gsheet
我想自动化一个流程,我正在使用 python、selenium 和 vba。
我的流程从使用 python 和 selenium 从 SQL 服务器下载文件开始,然后使用 vba,我转换文件并应用了很多公式。完成后,我使用 google 文件流将文件以 xlsx 格式保存在 google 驱动器文件夹中。当文件保存在文件夹中时,使用 google 脚本我发送一封包含文件 url 的邮件。所有这一切的最终目标是,用户将在 google 驱动器文件夹中对 de xlsx 进行观察,但在这种格式下,我无法以协作方式更改文件。
有一种方法可以使用 MS excel 以 gsheet 格式保存 excel 文件,或者自动将 xlsx 转换为 gsheet,然后发送包含新文件 url 的电子邮件?
您好!
您可以使用 Google 驱动器 API
将 MS Excel 文件自动转换为 Google 电子表格
查看 Import to Google Docs types 下的示例。
您只需将 mimeType 从 'text/csv'
更改为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
或类似类型,具体取决于 Excel 文件的 extension。
PS:由于您使用 google-apps-script
标记了您的问题:在 Google Apps 脚本中,您可以按 here.
进行转换
这是包含解决方案的代码:
function convertExceltoGoogleSpreadsheet() {
var folder = DriveApp.getFolderById('put the id's folder here')
var excelFile = folder.getFilesByType(MimeType.MICROSOFT_EXCEL).next();
var fileId = excelFile.getId();
var folderId = Drive.Files.get(fileId).parents[0].id;
var blob = excelFile.getBlob();
var resource = {
title: excelFile.getName(),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: folderId}],
};
Drive.Files.insert(resource, blob);
}
稍后,您需要使用此脚本删除 excel 个文件:
function remove(){
var folder = DriveApp.getFolderById('put you folder's id here');
var files = folder.getFilesByType(MimeType.MICROSOFT_EXCEL);;
while (files.hasNext()){
var file = files.next();
folder.removeFile(file);
}
第三步放通知:
function checkForChangedFiles() {
// folder
var folderID = '"' + "folder's id" + '"';
// email configuration
var emailFromName ="emailname";
var emailSubject = "emailsubject";
var emailBody = "<b><br>bodyemail:<br></b>" +
"line1<br>" +
"line2<br>"+
"line3<br>"+
"line4<br>";
var emailFooter = "footer";
var folderSearch = folderID + " " + "in parents";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var email = sheet.getRange("put the cell with the email's values").getValue();
var timezone = ss.getSpreadsheetTimeZone();
var today = new Date();
var time = new Date(today.getTime() - 1 * 30 * 1000); // 30 seconds
var startTime = time.toISOString();
var search = '(trashed = true or trashed = false) and '+ folderSearch +' and (modifiedDate > "' + startTime + '")';
var files = DriveApp.searchFiles(search);
var row = "", count=0;
while( files.hasNext() ) {
var file = files.next();
var fileName = file.getName();
var fileURL = file.getUrl();
var lastUpdated = Utilities.formatDate(file.getLastUpdated(), timezone, "dd-MM-yyyy HH:mm");
var dateCreated = Utilities.formatDate(file.getDateCreated(), timezone, "dd-MM-yyyy HH:mm")
row += "<li>" + lastUpdated + " <a href='" + fileURL + "'>" + fileName + "</a></li>";
sheet.appendRow([dateCreated, lastUpdated, fileName, fileURL]);
count++;
}
if (row !== "") {
row = "<p>" + count + " New File:</p><ol>" + row + "</ol>";
row += emailBody+"<br>" + "<br><small> "+emailFooter+" </a>.</small>";
MailApp.sendEmail(email, emailSubject, "", {name: emailFromName, htmlBody: row});
}
最后我们把它们放在一起:
function doall(){
convertExceltoGoogleSpreadsheet();
Utilities.sleep(10000);
remove();
Utilities.sleep(10000);
checkForChangedFiles();
}
我想自动化一个流程,我正在使用 python、selenium 和 vba。 我的流程从使用 python 和 selenium 从 SQL 服务器下载文件开始,然后使用 vba,我转换文件并应用了很多公式。完成后,我使用 google 文件流将文件以 xlsx 格式保存在 google 驱动器文件夹中。当文件保存在文件夹中时,使用 google 脚本我发送一封包含文件 url 的邮件。所有这一切的最终目标是,用户将在 google 驱动器文件夹中对 de xlsx 进行观察,但在这种格式下,我无法以协作方式更改文件。 有一种方法可以使用 MS excel 以 gsheet 格式保存 excel 文件,或者自动将 xlsx 转换为 gsheet,然后发送包含新文件 url 的电子邮件? 您好!
您可以使用 Google 驱动器 API
将 MS Excel 文件自动转换为 Google 电子表格查看 Import to Google Docs types 下的示例。
您只需将 mimeType 从 'text/csv'
更改为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
或类似类型,具体取决于 Excel 文件的 extension。
PS:由于您使用 google-apps-script
标记了您的问题:在 Google Apps 脚本中,您可以按 here.
这是包含解决方案的代码:
function convertExceltoGoogleSpreadsheet() {
var folder = DriveApp.getFolderById('put the id's folder here')
var excelFile = folder.getFilesByType(MimeType.MICROSOFT_EXCEL).next();
var fileId = excelFile.getId();
var folderId = Drive.Files.get(fileId).parents[0].id;
var blob = excelFile.getBlob();
var resource = {
title: excelFile.getName(),
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: folderId}],
};
Drive.Files.insert(resource, blob);
}
稍后,您需要使用此脚本删除 excel 个文件:
function remove(){
var folder = DriveApp.getFolderById('put you folder's id here');
var files = folder.getFilesByType(MimeType.MICROSOFT_EXCEL);;
while (files.hasNext()){
var file = files.next();
folder.removeFile(file);
}
第三步放通知:
function checkForChangedFiles() {
// folder
var folderID = '"' + "folder's id" + '"';
// email configuration
var emailFromName ="emailname";
var emailSubject = "emailsubject";
var emailBody = "<b><br>bodyemail:<br></b>" +
"line1<br>" +
"line2<br>"+
"line3<br>"+
"line4<br>";
var emailFooter = "footer";
var folderSearch = folderID + " " + "in parents";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var email = sheet.getRange("put the cell with the email's values").getValue();
var timezone = ss.getSpreadsheetTimeZone();
var today = new Date();
var time = new Date(today.getTime() - 1 * 30 * 1000); // 30 seconds
var startTime = time.toISOString();
var search = '(trashed = true or trashed = false) and '+ folderSearch +' and (modifiedDate > "' + startTime + '")';
var files = DriveApp.searchFiles(search);
var row = "", count=0;
while( files.hasNext() ) {
var file = files.next();
var fileName = file.getName();
var fileURL = file.getUrl();
var lastUpdated = Utilities.formatDate(file.getLastUpdated(), timezone, "dd-MM-yyyy HH:mm");
var dateCreated = Utilities.formatDate(file.getDateCreated(), timezone, "dd-MM-yyyy HH:mm")
row += "<li>" + lastUpdated + " <a href='" + fileURL + "'>" + fileName + "</a></li>";
sheet.appendRow([dateCreated, lastUpdated, fileName, fileURL]);
count++;
}
if (row !== "") {
row = "<p>" + count + " New File:</p><ol>" + row + "</ol>";
row += emailBody+"<br>" + "<br><small> "+emailFooter+" </a>.</small>";
MailApp.sendEmail(email, emailSubject, "", {name: emailFromName, htmlBody: row});
}
最后我们把它们放在一起:
function doall(){
convertExceltoGoogleSpreadsheet();
Utilities.sleep(10000);
remove();
Utilities.sleep(10000);
checkForChangedFiles();
}