google 应用脚本用分号而不是逗号导出 csv
google app script export csv with semicolon instead of comma
我正在使用下面的代码将 google 电子表格导出到特定文件夹中的 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));
}
感谢您的帮助
- 您想将检索到的 CSV 数据的
,
替换为 ;
。
- 您想将替换数据创建为文件。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 用
;
代替,
作为分隔符的数据不是text/csv
的mimeType。在本例中,要求为text/plain
.
- 在你的脚本中,我想提出以下两种模式。
模式 1:
在此模式中,检索值并创建由 ;
分隔的数据。
修改后的脚本:
当您的脚本修改时请修改如下。
从:
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);
模式 2:
在此模式中,检索到的 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。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我正在使用下面的代码将 google 电子表格导出到特定文件夹中的 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));
}
感谢您的帮助
- 您想将检索到的 CSV 数据的
,
替换为;
。 - 您想将替换数据创建为文件。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 用
;
代替,
作为分隔符的数据不是text/csv
的mimeType。在本例中,要求为text/plain
. - 在你的脚本中,我想提出以下两种模式。
模式 1:
在此模式中,检索值并创建由 ;
分隔的数据。
修改后的脚本:
当您的脚本修改时请修改如下。
从: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);
模式 2:
在此模式中,检索到的 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。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。