这是this thread的后续行动。
我正在尝试使用@ July.Tech提供的代码,但我不断收到未知压缩方法错误或错误的标头检查错误。当两个不同的gzip方法中的任何一个用于创建压缩文件时出现错误,所以我认为文件正确gzip压缩。
有什么建议吗? (我的输入文件是gzip,所以我不能使用Utilities.unzip()。)
以下是整个代码:
reports_folder_id = 'xxxxx'; //id of folder where gzipped csv reports are saved
report_name = 'xxxxxx.gz'; // name of gzipped CSV file
function importData() {
var fSource = DriveApp.getFolderById(reports_folder_id);
var fi = fSource.getFilesByName(report_name); // latest report file
eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());
if ( fi.hasNext() ) { // proceed if report_name file exists in the reports folder
var file = fi.next();
var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used
var binData = [];
for (var i = 0; i < charData.length; i++) {
binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
}
var data = pako.ungzip(binData); // I get same error for pako.inflate(binData);
var decoded = '';
for (var i = 0; i < data.length; i++) {
decoded += String.fromCharCode(data[i]);
}
}
}
如果没有修改上述内容的建议,有关如何以编程方式解压缩gDrive文件的任何想法吗?
感谢。
答案 0 :(得分:1)
运行提供的示例代码确实会在我的环境中导致未知压缩方法错误。
尝试更改
var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used
到
var charData = file.getBlob().getBytes();
这就是
function myFunction() {
reports_folder_id = '<FOLDER_ID>';
report_name = 'zip3.csv.gz'; // name of gzipped CSV file
var fSource = DriveApp.getFolderById(reports_folder_id);
var fi = fSource.getFilesByName(report_name);
eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());
if ( fi.hasNext() ) {
var file = fi.next();
var blobData = file.getBlob();
var charData = blobData.getBytes();
var binData = [];
for (var i = 0; i < charData.length; i++) {
binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
}
var data = pako.inflate(binData);
var decoded = '';
for (var i = 0; i < data.length; i++) {
decoded += String.fromCharCode(data[i]);
}
Logger.log(decoded);
}
}
尝试在原始文件的一部分上运行此脚本&#34; GlicemiaMisurazioni.csv.gz&#34;档案:https://drive.google.com/file/d/0B8geUNXmd4J2YzJoemFLMnBTbVU/view?usp=sharing
(为了测试,我将原来的csv截断为32行以加快执行速度 - 原始版本需要太长时间才能运行)
检查日志显示解压缩工作:
4;02/07/2017 03.00.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.59.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.58.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.57.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.00;;;;;0;;0.4;Novorapid ;0;Left flank;Test
答案 1 :(得分:1)
截至2018年1月19日(see release notes)Apps脚本现在支持使用以下Utilities
方法访问gzip压缩:
答案 2 :(得分:0)
您需要了解pako是否支持gzip压缩。如果没有,你应该寻找另一个支持gzip的压缩包。