2013-10-28 59 views
3

讓我以這個事實作爲序言,我已經知道excel 2007文件本身就是一個.zip文件,重命名爲.xlsx。從zip壓縮文件條目中需要io.ReaderAt(條目是一個嵌套的.xlsx文件)

好吧,現在你知道這是交易。我試圖從內存中的.zip壓縮文件中提取Excel 2007文件。我不能(相反,我真的不想)將整個檔案提取到磁盤,然後從那裏處理.xlsx文件。

問題是,我們閱讀excel 2007文件的方法需要一個ReadAt方法(如io.ReaderAt定義的內容)。不幸的是,存檔/壓縮包暴露了zip file entries的接口,它只返回io.ReadCloser

有沒有辦法解決這種情況?再一次,我想在記憶中完成這一切,而不是沖洗磁盤。

回答

8

由於ZIP格式不允許在沒有首先解壓縮整個文件的情況下實施ReadAt,因此您需要完成此操作。

這並不意味着你必須將它保存到磁盤,而是可以將其解壓到內存,從bytes包有使用Reader進行這項工作:

// 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

是的,好點的,這可能是最好的方式去做。 – mdwhatcott

相關問題