2013-10-28 1 views
3

Excel 2007 파일 자체가 .xlsx로 이름이 변경된 .zip 파일이라는 것을 알고 있다는 사실을이 질문 앞에 설명합니다.zip 아카이브 항목의 io.ReaderAt가 필요합니다. (항목이 중첩 된 .xlsx 파일입니다.)

이제 알았으니 이제 거래가 있습니다. .zip 아카이브 내에서 Excel 2007 파일을 모두 메모리에 추출하려고합니다. 나는 (대체로 정말로을 원하지 않는다.) 전체 아카이브를 디스크로 추출한 다음 거기에서 .xlsx 파일로 작업 할 수 없다.

2007 년 파일을 읽는 우리의 방법에는 ReadAt 메서드가 필요합니다 (예 : io.ReaderAt으로 정의 됨). 아쉽게도 압축 파일/압축 패키지는 io.ReadCloser 만 제공하는 zip file entries의 인터페이스를 제공합니다.

이 상황을 해결할 수있는 방법이 있습니까? 다시 말하지만, 디스크에 플러시하지 않고 메모리에서이 모든 작업을 수행하고 싶습니다.

답변

8

ZIP 형식은 전체 파일의 압축을 먼저 풀지 않고도 ReadAt를 구현할 수 없으므로 정확하게 수행해야합니다.

// ReadAll reads from readCloser until EOF and returns the data as a []byte 
b, err := ioutil.ReadAll(readCloser) // The readCloser is the one from the zip-package 
if err != nil { 
    panic(err) 
} 

// bytes.Reader implements io.Reader, io.ReaderAt, etc. All you need! 
readerAt := bytes.NewReader(b) 
+0

예, 좋은 지적, 그건 아마 : 당신은 디스크에 저장해야 의미하지는 않습니다, 대신 당신은 메모리에 압축을 해제하고 거기 bytes 패키지에 Reader를 사용에서 작업 할 수 있습니다

그것에 대해 갈 수있는 가장 좋은 방법입니다. – mdwhatcott