2012-06-18 5 views
2

URL에서 gzip을 가져 와서 자동으로 Google 스프레드 시트로 가져 오려고합니다.gzipped 데이터를 Google 스프레드 시트로 가져 오기

gzip에는 CSV 데이터 파일이 하나 있습니다.

CSV 데이터를 Google 스프레드 시트로 가져올 수 있지만 Google 스프레드 시트에 업로드하기 전에 gzip을 다운로드하고 파일을 추출해야하는 단계를 생략 할 수 있기를 바랍니다.

내 질문에 gzip으로 압축 된 CSV 파일을 URL에서 Google 스프레드 시트로 직접 가져올 수 있습니까? 그렇지 않은 경우 Google Apps Script로 어떻게 처리 할 수 ​​있습니까?

+0

그것은 문제 추적기 http://code.google.com/p/google-apps-script-issues/issues/detail?id=964에 정보 에두아르도에 대한 – Eduardo

+0

감사보고 있어요 : 여기에 코드입니다 , 나는 이것을 잡지 않았다 ;-) 내 제안이 어떤 결과도주지 않을 것 같아서 ... 너무 나쁘다 ... –

답변

3

GAS에 unzip이라는 문서화되지 않은 유틸리티가 있습니다. 일반 .zip 파일의 압축을 풀 수 있지만 GNU zip이 지원되는지는 알 수 없습니다. 아마도 가치가 있습니다. 여기 은/드라이브 내 구글 문서에 있던 우편을 위해 쓴 간단한 테스트입니다

function testzip(){ 
var files=DocsList.getRootFolder().find('Sans titre.txt.zip'); 
var zipblob=files[0].getBlob(); 
var unzipblob = Utilities.unzip(zipblob); 
var unzipstr=unzipblob[0].getDataAsString();// it is a text file 
DocsList.createFile('Sans titre.txt',unzipstr);// I kept the original name to make it simple 
} 

당신을 위해 작동하지 않을 경우 그냥 제안 ;-)

의 ... 저를 비난하지 마십시오
+0

고맙습니다. 서지! 나는 gzip 파일로 이것을 시도했지만 Eduardo가 생각하지 않았던 것처럼 슬프게도 작동하지 않았다. 다행히도 zip이나 gzip으로 데이터를 다운로드 할 수 있으므로 스크립트가 도움이되었습니다. UrlFetchApp을 사용하여 내 zip을 가져 와서 제안한 코드를 통해 실행하기 만하면되었습니다. 다시 한번 감사드립니다. – user1464409

+0

내 즐거움 ;-) 완전한 코드를 게시하는 데 신경 쓰지 않는다면 여기에 표시하는 것이 유용 할 수 있습니다. –

+1

Serge가 요청한대로 URL에서 하나의 csv 파일을 포함하는 zip 파일을 다운로드하는 최종 코드는 다음과 같습니다. 압축 해제 된 파일은 unzipstr 변수에 문자열로 저장됩니다. ' function testzip () var url = "myurlhere" var zipblob = UrlFetchApp.fetch (url) .getBlob(); var unzipblob = Utilities.unzip (zipblob); var unzipstr = unzipblob [0] .getDataAsString(); Logger.log (unzipstr); } ' 누군가에게 도움이 되었기를 바랍니다. 저에게 많은 도움을 주신 모든 분들께 감사드립니다. 나는이 표시 권리를 얻으려고 포기! – user1464409

3

제 3 자 자바 스크립트 라이브러리 인 pako를 사용하여 gzipped 파일을 팽창 (압축 풀기) 할 수있었습니다.

eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText()); 

    var charData = UrlFetchApp.fetch("<url to a .gz file>").getContent(); 

    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]); 
    } 
관련 문제