Чтение файлов Excel в Golang

Я использую библиотеку tealeg xlsx для чтения файла Excel https://github.com/tealeg/xlsx. . У них есть документация здесь https://godoc.org/github.com/tealeg/ . Он отлично работает, если я вызываю OpenFile() по локальному каталогу, но я хотел использовать возвращаемый объект http.Request.FormFile() типа multipart.Form. Как использовать этот файл для чтения пакетом tealeg?

OpenReaderAt() Tealeg выглядит как то, что я должен использовать, но multipart. Объект формы, возвращенный из http.Request.FormFile(), возвращает файловый интерфейс, но я не уверен, как получить доступ к объекту readerAt? https://golang.org/pkg/mime/multipart/#File


person user3125693    schedule 22.10.2016    source источник


Ответы (1)


func OpenReaderAt(r io.ReaderAt, size int64) (*File, error)

xlsx.OpenReaderAt принимает интерфейс io.ReaderAt, а multipart.File также реализует io.ReaderAt.

Таким образом, вы можете напрямую передать его xlsx.OpenReaderAt

var (
file multipart.File
size int64
err error
)

file, _,err = req.FormFile("key")
// size = // Calculate size
xlsx.OpenReaderAt(file,size)
person John S Perayil    schedule 22.10.2016
comment
Как узнать, что файл имеет интерфейс io.ReaderAt? Интерфейс ReaderAt требует реализации функции ReadAt() godoc.org/io#ReaderAt . Однако... Файл (возвращенный из req.FormFIle), похоже, не реализует никаких функций: golang .org/pkg/mime/multipart/#File - person user3125693; 25.10.2016
comment
multipart.File — это интерфейс, в который встроены другие интерфейсы, одним из которых является io.ReaderAt. Это видно по ссылке, которую вы разместили. - person John S Perayil; 25.10.2016
comment
@ user3125693 Есть ли что-нибудь еще, что нужно прояснить в ответе? - person John S Perayil; 26.10.2016
comment
Нет, вы ответили на него идеально. На самом деле я не знал, что вы можете встроить интерфейс в другой интерфейс. Благодарю вас! - person user3125693; 27.10.2016