#excel #go #reader
#excel #Вперед #программа для чтения
Вопрос:
Я использую библиотеку tealeg xlsx для чтения файла Excelhttps://github.com/tealeg/xlsx . У них есть документация здесь https://godoc.org/github.com/tealeg / . Это прекрасно работает, если я вызываю OpenFile()
по локальному каталогу, но я хотел использовать http.Request.FormFile()
возвращаемый объект, который имеет тип multipart.Form
. Как мне использовать этот файл для чтения пакетом tealeg?
Tealeg OpenReaderAt()
выглядит как то, что я должен использовать, но составное. Объект формы, возвращенный из http.Request.FormFile()
, возвращает файловый интерфейс, но я не уверен, как получить доступ к объекту readerAt? https://golang.org/pkg/mime/multipart/#File
Ответ №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)
Комментарии:
1. Откуда я знаю, что этот файл относится к io. Интерфейс ReaderAt? Интерфейс ReaderAt требует реализации функции «ReadAt()» godoc.org/io#ReaderAt . Однако… Файл (возвращенный из req.FormFIle), похоже, не реализует никаких функций: golang.org/pkg/mime/multipart/#File
2.
multipart.File
это интерфейс, который встраивает другие интерфейсы, одним из которых являетсяio.ReaderAt
. Вы можете видеть это по ссылке , которую вы разместили.3. @user3125693 Есть ли что-нибудь еще, что нужно прояснить в ответе?
4. Нет, вы ответили на это идеально. На самом деле я не знал, что вы можете встроить интерфейс в другой интерфейс. Спасибо!