0

我正在尝试编写一个脚本,该脚本从 Google 电子表格传递信息,将其编译为 CSV 文件并通过电子邮件发送该文件。

我的问题:我的 Excel 文件上的 CSV 文件看起来与我的 Google 电子表格(死链接)非常不同。

这是我的 Excel 文件的样子,粘贴到另一个 Google 电子表格中。 截屏

我正在使用的代码如下:

function myFunction() { 

//get active sheet, the last row where data has been entered, define the range and use                  that range to get the values (called data)
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow=sheet.getLastRow();
var range = sheet.getRange(1,1,lastRow,91);
var data = range.getValues();

//define a string called csv
var csv = "";
//run for loop through the data and join the values together separated by a comma
for (var i = 0; i < data.length; ++i) {

    csv += data[i].join(",") + "\r\n";

}
var csvFiles = [{fileName:"example.csv", content:csv}];
MailApp.sendEmail(Session.getUser().getEmail(), "New Journey Information", "",    {attachments: csvFiles}); 
}
4

1 回答 1

1

您需要确保单个单元格的数据是原子的。例如,当您的脚本读取时,您在工作表上看到的时间包含一个 Date 对象,然后当它被写入 CSV 时,它可能会转换为带有逗号的日期和时间字符串,具体取决于您的语言环境。(例如,2013 年 1 月 4 日 14:34。)为了安全使用可能被 Excel 解释为分隔符的标点符号,您应该用引号将每个元素括起来。

无需修改您的代码,因为此问题已在Docslist 教程中提供的示例之一中得到解决。因此,一个简单的解决方案是替换您的代码。

如下更改提供的第一个位,saveAsCSV()它将通过用户输入或通过文件名作为参数进行操作。

function saveAsCSV(filename) {
  // Prompts the user for the file name, if filename parameter not provided
  fileName = filename || Browser.inputBox("Save CSV file as (e.g. myCSVFile):");
  ...
于 2013-05-12T01:44:06.693 回答