-1

我正在使用下面的代码将谷歌电子表格导出到特定文件夹中的 CSV。我需要有一个分号 (;) 作为分隔符而不是逗号 (,)

function saveAsCSV() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssname = ss.getName();
var sheet = ss.getActiveSheet();
var parentFolder = DriveApp.getFolderById("MyID");
var folder = parentFolder;
var curDate = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")

var fileName = "MyName" + curDate + ".csv";
var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export? 
exportFormat=csv&format=csv";  
var token = ScriptApp.getOAuthToken();  
var response = UrlFetchApp.fetch(url + sheet.getSheetId(), {
headers: {
  'Authorization': 'Bearer ' +  token
}
});
folder.createFile(response.getBlob().setName(fileName));
}

感谢您的帮助

4

1 回答 1

2
  • 您要替换,;检索到的 CSV 数据。
  • 您希望将替换的数据创建为文件。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

  • ;用作分隔符的数据,不是text/csv. 在这种情况下,它必须是text/plain
  • 在您的脚本中,我想提出以下两种模式。

模式一:

在此模式中,检索值并创建分隔的数据;

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:
var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export? 
exportFormat=csv&format=csv";  
var token = ScriptApp.getOAuthToken();  
var response = UrlFetchApp.fetch(url + sheet.getSheetId(), {
headers: {
  'Authorization': 'Bearer ' +  token
}
});
folder.createFile(response.getBlob().setName(fileName));
到:
var values = sheet.getDataRange().getValues();
var outputData = values.map(r => r.join(";")).join("\n");
folder.createFile(fileName, outputData, MimeType.PLAIN_TEXT);

模式二:

在此模式中,将转换检索到的 CSV 数据。

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:
folder.createFile(response.getBlob().setName(fileName));
到:
var csvData = Utilities.parseCsv(response.getBlob().getDataAsString());
var outputData = csvData.map(r => r.join(";")).join("\n");
folder.createFile(fileName, outputData, MimeType.PLAIN_TEXT);

笔记:

  • 请启用 V8。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

于 2020-03-21T01:43:41.137 回答