6

この質問の前に、Excel 2007 ファイル自体が .xlsx に名前が変更された .zip ファイルであることを既に知っているという事実から始めましょう。

わかりました、これで取引が完了したことがわかりました。すべてメモリ内の .zip アーカイブ内から Excel 2007 ファイルを抽出しようとしています。アーカイブ全体をディスクに抽出して、そこから .xlsx ファイルを操作することはできません (むしろ、したくありません)。

問題は、Excel 2007 ファイルを読み取る方法が ReadAt メソッド ( io.ReaderAtで定義されているものなど) を必要とすることです。残念ながら、archive/zip パッケージは、io.ReadCloserのみを返すzip ファイル エントリのインターフェイスを公開しています。

この状況を回避する方法はありますか?繰り返しますが、ディスクにまったくフラッシュせずに、これをすべてメモリ内で実行したいと思います。

4

1 に答える 1

13

ZIP 形式では、最初にファイル全体を解凍しないと ReadAt を実装できないため、正確にそれを行う必要があります。

これは、ディスクに保存する必要があるという意味ではありませんが、代わりReaderに、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)
于 2013-10-28T19:43:42.470 に答える