Google Apps 脚本:从 .txt 文件中读取文本
Posted
技术标签:
【中文标题】Google Apps 脚本:从 .txt 文件中读取文本【英文标题】:Google Apps Script: read text from a .txt file 【发布时间】:2013-09-28 17:14:59 【问题描述】:在查看了提供的tutorial 用于使用 Google Apps 脚本从电子表格发送电子邮件后,我修改了给定的代码,目的是能够发送带有附件的电子邮件集。
它运行良好,即使由于 Google Apps 脚本的限制存在一些怪癖(文件必须位于 Google Drive 中,并且 Google Drive 中的所有文件,无论名称是否合适,都取自驱动器)。
function sendEmails()
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:C3
var dataRange = sheet.getRange(startRow, 1, numRows, 3)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data)
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var attachment = row[2]; // File name provided.
var subject = "Mass Email";
var files = DriveApp.getFilesByName(attachment); // Get all files with name.
var blobs = []; // Array for attachment.
// Move files into blobs
while (files.hasNext())
var file = files.next();
blobs.push(file.getAs(MimeType.PLAIN_TEXT));
MailApp.sendEmail(emailAddress, subject, message,
attachments: blobs, // add attachments
cc: "extra@email.com" // CC to employer
);
然而,在我第一次使用它之后,我了解到我需要发送文件不是作为附件,而是作为电子邮件的消息正文,以及其他一些更改(这是为了工作)。也就是说,我一次只会向每封电子邮件发送一个“附件”,而不是将该文件作为附件,其内容应复制到电子邮件的消息中。附件目前是文本文件,我希望它们保持这种状态,但这不是最重要的。
我无法确定使用 Google Apps 脚本执行此操作的方法。这可能吗,还是我必须以不同的方式通过电子邮件发送这些文件? (希望不是手工。)
提前致谢。
【问题讨论】:
您提到的这两个限制在应用程序脚本中不存在,从驱动器文件中获取 blob 只是其中一种方式 另外,是的,它可以在正文中包含文本。查看邮件的api,它允许您构建自己的html body。 我不明白您为什么会遇到问题,您与您所描述的非常接近......而不是将文本存储在数组中,只需在同一个 while 循环中将其作为“消息”发送然后你就完成了......你甚至不需要 HTML 或其他任何东西。 嗯,我的意思是这个特定脚本的局限性,不清楚。但是,我仍然没有找到其他方法可以将文件发送自动化到这种程度。我当然可能完全错了,但我还没有看到我的狩猎如何。是的,我已经看到您可以在发送电子邮件时输入文本,这不是我的症结所在。我不知道如何从 .txt 文件中读取文本,只能移动它。 @Sergeinsas 除非我错过了什么,否则我不会将文本存储在数组中,而是将 MimeType.PLAINTEXT 作为其内容类型的 blob。表示文本文件的 Blob。 【参考方案1】:试试这个。它更快更简单。
var docContent = file.getBlob().getDataAsString();
Logger.log(docContent);
【讨论】:
当我使用预览的ID获取文件时这不起作用,但是当我从共享链接获取ID时它确实起作用【参考方案2】:正如我在上一条评论中提到的,将您的 .txt 文件转换为 Google 文档很容易实现。 见下文(建议)
function sendEmails()
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:C3
var dataRange = sheet.getRange(startRow, 1, numRows, 3)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data)
var row = data[i];
Logger.log(row)
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var attachment = row[2]; // File name provided.
var subject = "Mass Email";
var files = DriveApp.getFilesByName(attachment); // Get all files with name.
while (files.hasNext())
var file = files.next();
var Id = file.getId();
var content = DocumentApp.openById(Id).getBody().getText();
Logger.log(content)
MailApp.sendEmail(emailAddress, subject, message+'\n'+content)
【讨论】:
非常感谢您的帮助。似乎有点奇怪,它不能那么容易地处理文本文件,但最终效果很好。以上是关于Google Apps 脚本:从 .txt 文件中读取文本的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 Google Apps 脚本中的 YouTube 数据 API 从云端硬盘上传:空响应
从 Google Apps 脚本上的 URL 获取文件 ID 的最简单方法
google Apps 脚本中的 createFile() 无法正常运行
用于将 google drive 中的文件名列表与 google sheet 列中的名称列表进行比较的 Apps 脚本,以将新文件从驱动器添加到工作表