我的Google Apps脚本中的CSV数据Excel文件不会反映我的Google电子表格

时间:2013-05-08 18:24:11

标签: excel csv google-apps-script google-sheets

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

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

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

我正在使用的代码如下:

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}); 
}

1 个答案:

答案 0 :(得分:1)

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

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

按如下方式更改提供的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):");
  ...