将google email中的附件直接下载到 google drive
步骤 1:打开 Google Apps Script
- 登录你的 Google 账户。
- 访问 Google Apps Script。
- 点击
新建项目
,这将创建一个新的脚本项目。
步骤 2:编写脚本
在新建项目中,复制并粘贴以下代码到代码编辑器中。此脚本将保存带有特定标签的邮件的附件到 Google Drive 中的指定文件夹。
function saveGmailAttachmentsToDrive() { var label = GmailApp.getUserLabelByName("SaveToDrive"); // 替换为你在Gmail中创建的标签名称 if (!label) { Logger.log("标签 'SaveToDrive' 不存在"); return; } var threads = label.getThreads(); // 获取所有带有该标签的邮件 var folder = DriveApp.getFolderById("your-folder-id"); // 替换为你要保存附件的Google Drive文件夹ID for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var attachments = messages[j].getAttachments(); for (var k = 0; k < attachments.length; k++) { var attachment = attachments[k]; folder.createFile(attachment); // 将附件保存到Google Drive Logger.log("保存附件: " + attachment.getName()); } } threads[i].removeLabel(label); // 可选:处理完邮件后,移除标签 } }
将文件名称换成邮件标题
function saveGmailAttachmentsToDrivetitle() { var label = GmailApp.getUserLabelByName("Todrivelabel"); // 替换为你在Gmail中创建的标签名称 if (!label) { Logger.log("标签 'Todrivelabel' 不存在"); return; } var threads = label.getThreads(); // 获取所有带有该标签的邮件 var folder = DriveApp.getFolderById("1G1zNsg_VVSqK5OOaQf_os5jMJ5Ij132c"); // 替换为你要保存附件的Google Drive文件夹ID for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var message = messages[j]; var attachments = message.getAttachments(); var subject = message.getSubject(); // 获取邮件标题 // 替换非法字符 var safeSubject = subject.replace(/[\/:*?"<>|]/g, "_"); for (var k = 0; k < attachments.length; k++) { var attachment = attachments[k]; try { // 以邮件标题加上附件名作为文件名 var fileName = safeSubject + "_" + attachment.getName(); folder.createFile(attachment.setName(fileName)); // 保存附件到Google Drive Logger.log("保存附件: " + fileName); } catch (e) { Logger.log("保存附件时出错: " + e.toString()); } } } } }
将多个名字表不同的CSV文件合并到一个excel中不同的工作薄中
function importCSVsToDifferentSheetsAndSaveBack() { try { var folder = DriveApp.getFolderById('YOUR_FOLDER_ID'); // 替换为包含 CSV 文件的文件夹 ID var files = folder.getFiles(); // 获取所有文件 var fileCount = 0; // 创建一个新的 Google Sheets 文件 var spreadsheet = SpreadsheetApp.create('Merged CSV Data'); // 遍历文件,寻找 .csv 文件 while (files.hasNext()) { var file = files.next(); var fileName = file.getName(); // 检查文件是否是以 .csv 结尾 if (fileName.toLowerCase().endsWith('.csv')) { Logger.log('Found CSV file: ' + fileName); // 输出日志确认处理文件 fileCount++; var csvData; try { csvData = Utilities.parseCsv(file.getBlob().getDataAsString()); // 尝试解析 CSV 文件 } catch (e) { Logger.log('Error parsing CSV file: ' + fileName + ' - ' + e.toString()); continue; // 如果解析失败,跳过该文件 } var sheetName = fileName.substring(0, 30); // Google Sheets 工作表名长度限制为 31 字符 var sheet = spreadsheet.insertSheet(sheetName); // 创建一个新的工作簿 if (csvData.length > 0) { var numRows = csvData.length; var numColumns = csvData[0].length; // 检查工作簿是否有足够的行和列 if (sheet.getMaxRows() < numRows) { sheet.insertRowsAfter(sheet.getMaxRows(), numRows - sheet.getMaxRows()); } if (sheet.getMaxColumns() < numColumns) { sheet.insertColumnsAfter(sheet.getMaxColumns(), numColumns - sheet.getMaxColumns()); } // 将 CSV 数据插入到该工作簿 sheet.getRange(1, 1, numRows, numColumns).setValues(csvData); Logger.log('Data inserted into sheet: ' + sheetName); } else { Logger.log('No data found in file: ' + fileName); } } } if (fileCount === 0) { Logger.log('No CSV files found in the folder.'); return; } Logger.log('All CSV files have been imported into different sheets.'); // 将 Google Sheets 文件保存回原始文件夹 var file = DriveApp.getFileById(spreadsheet.getId()); // 获取新创建的 Google Sheets 文件 folder.addFile(file); // 将文件添加到原文件夹 DriveApp.getRootFolder().removeFile(file); // 从根文件夹中移除,确保只在目标文件夹中 Logger.log('Merged Google Sheets file saved back to the original folder.'); } catch (e) { Logger.log('Error: ' + e.toString()); } }
代码说明:
label
: 这个代码块会查找名为"SaveToDrive"
的 Gmail 标签(你可以修改为你创建的任何标签名称)。所有带有该标签的邮件中的附件会被保存到 Google Drive 中。folder.createFile(attachment)
: 这个函数将附件保存到 Google Drive 的指定文件夹。removeLabel(label)
: 脚本将处理完后自动移除标签,以避免重复处理。如果不需要删除标签,可以将这行代码注释或删除。
步骤 3:修改脚本参数
-
设置 Gmail 标签:
- 打开 Gmail 并创建一个名为
SaveToDrive
的标签(或者使用你喜欢的任何名字)。 - 将想要自动保存附件的邮件打上这个标签。
- 打开 Gmail 并创建一个名为
-
指定 Google Drive 文件夹:
- 打开 Google Drive,创建一个文件夹来存储附件。
- 复制该文件夹的 ID。文件夹 ID 是其 URL 的一部分,例如,
https://drive.google.com/drive/folders/**your-folder-id**
。 - 将代码中的
your-folder-id
替换为这个文件夹的 ID。
步骤 4:设置定时触发器
- 在 Google Apps Script 中,点击左侧的时钟图标(“触发器”)。
- 点击
添加触发器
按钮,选择你刚刚编写的函数saveGmailAttachmentsToDrive
。 - 设置触发频率(例如,每天运行一次,或者每小时运行一次),这样脚本会自动定期执行。
步骤 5:测试脚本
- 在 Gmail 中找到一封带有附件的邮件,并将其打上
SaveToDrive
标签。 - 返回 Google Apps Script,点击工具栏中的运行按钮(播放符号)来手动运行脚本。
- 检查你指定的 Google Drive 文件夹,看看附件是否已保存。
常见问题和调整:
-
没有找到标签: 如果脚本没有找到指定标签,请确保你在 Gmail 中正确创建了该标签,并且确保脚本中的标签名称和 Gmail 标签一致。
-
权限问题: 在首次运行脚本时,Google 会要求你授予权限,以便脚本能够访问 Gmail 和 Google Drive。请按提示操作并授予权限。
-
重复处理: 如果不想每次都重新处理同样的邮件,
removeLabel(label)
可以帮助你移除标签,从而避免重复处理。如果不希望移除标签,可以注释掉这行代码。
通过这一步步操作,你可以实现自动保存 Gmail 中的附件到 Google Drive。如果有需要进一步修改的地方,比如只保存特定类型的文件或处理特定发件人的邮件,脚本可以进一步调整。