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

#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. Нет, вы ответили на это идеально. На самом деле я не знал, что вы можете встроить интерфейс в другой интерфейс. Спасибо!