打开数据流

  1. func OpenReader(r io.Reader, opts ...Options) (*File, error)

OpenReader 从 io.Reader 读取数据流。

下面的例子中,我们创建一个简单的 HTTP 服务器接收上传的电子表格文档,向接收到的电子表格文档添加新工作表,并返回下载响应:

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/xuri/excelize/v2"
  6. )
  7. func process(w http.ResponseWriter, req *http.Request) {
  8. file, _, err := req.FormFile("file")
  9. if err != nil {
  10. fmt.Fprint(w, err.Error())
  11. return
  12. }
  13. defer file.Close()
  14. f, err := excelize.OpenReader(file)
  15. if err != nil {
  16. fmt.Fprint(w, err.Error())
  17. return
  18. }
  19. f.Path = "Book1.xlsx"
  20. f.NewSheet("NewSheet")
  21. w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", f.Path))
  22. w.Header().Set("Content-Type", req.Header.Get("Content-Type"))
  23. if err := f.Write(w); err != nil {
  24. fmt.Fprint(w, err.Error())
  25. }
  26. }
  27. func main() {
  28. http.HandleFunc("/process", process)
  29. http.ListenAndServe(":8090", nil)
  30. }

使用 cURL 进行测试:

  1. curl --location --request GET 'http://127.0.0.1:8090/process' \
  2. --form 'file=@/tmp/template.xltx' -O -J