Jes*_*ack 4 csv google-sheets google-apps-script
我正在从事一个项目,该项目涉及 Google Drive 中的 csv 文件,该文件每分钟左右更新一次新数据。
我构建了一个电子表格仪表板,以使 csv 中的数据更有意义。
我错误地假设我可以使用 Google 电子表格函数 =importdata(url) 将数据从 Google Drive 中的 CSV 获取到我的 Google 电子表格中,但是,除非我公开 CSV,否则会产生错误,这不是出于安全和隐私原因是可行的。即使我确实公开了 CSV 并使用了 importdata,输入的数据也完全格式错误且无法使用 - 它看起来与实际的 CSV 完全不同。
我正在尝试编写一个脚本来自动导入 csv 数据,使用 DriveApp 打开 csv 文件,Utilities.parseCsv 将 csv 转换为数据数组,然后 setValues 将数据写入工作表。
function importData() {
var ss = SpreadsheetApp.getActive();
var file = DriveApp.getFilesByName("Agent Performance.csv")
var csv = file.next().getBlob().getDataAsString();
var csvData = Utilities.parseCsv(csv);
var sheet = ss.getSheetByName('CSV Import TEST');
for (var i = 0; i < csvData.length; i++) {
sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我得到了替换字符,例如:?所有写入工作表的数据。这太奇怪了。工作表看起来很正常,但是如果您单击一个单元格以查看它的值,则公式栏具有单元格中的任何文本,但每个字符之间是一个 ?。这使得 Google Sheets 中的任何计算都无法进行。
如果我只是使用 Google 表格“文件”和“导入”和“替换当前工作表”导入相同的 CSV,那么数据就可以了。这不是一个好的解决方案,因为我真的希望 CSV 更新和 Google 表格中的仪表板更新之间的延迟不超过几分钟。如果我必须手动上传 CSV,它就违背了系统的目的。
任何帮助将不胜感激。谢谢!
你检查过文件字符集吗?您可以在调用时指定它getDataAsString(charset)。尝试这个:
function importData() {
var ss = SpreadsheetApp.getActive();
var file = DriveApp.getFilesByName("Agent Performance.csv")
var csv = file.next().getBlob().getDataAsString('ISO-8859-1'); //note the charset
var csvData = Utilities.parseCsv(csv);
//unless you csv has variable amount of columns per line, you should do this
if(csvData.length > 0) {
ss.getSheetByName('CSV Import TEST')
.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
} else
throw 'Blank file';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12757 次 |
| 最近记录: |