让我以这样的事实作为这个问题的序言:我已经知道 Excel 2007 文件本身就是一个 .zip 文件,已重命名为 .xlsx。
好吧,既然你知道了,事情就是这样。我正在尝试从内存中的 .zip 存档中提取 Excel 2007 文件。我不能(更确切地说,我really不想)将整个存档提取到磁盘,然后从那里使用 .xlsx 文件。
问题是我们读取excel 2007文件的方法需要一个ReadAt方法(比如定义的io.ReaderAt http://golang.org/pkg/io/#ReaderAt)。不幸的是,archive/zip 包公开了一个接口zip 文件条目 http://golang.org/pkg/archive/zip/#File.Open只回馈io.ReadCloser http://golang.org/pkg/io/#ReadCloser.
有什么办法可以解决这种情况吗?同样,我想在内存中完成这一切,而不刷新到磁盘。
由于 ZIP 格式不允许在不首先解压缩整个文件的情况下实现 ReadAt,因此您需要这样做。
这并不意味着您必须将其保存到磁盘,而是您可以将其解压缩到内存并从那里使用Reader
in the bytes
包裹:
// 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)