为了账号安全,请及时绑定邮箱和手机立即绑定

在 Google App Engine 上以 Go 语言打开由tealeg xlsx

在 Google App Engine 上以 Go 语言打开由tealeg xlsx

Go
慕神8447489 2021-12-07 19:34:22
我正在使用https://github.com/tealeg/xlsx生成 Go 语言的 xlsx 文件。该应用程序正在 Google App Engine 上运行。var file *xlsx.Filevar sheet *xlsx.Sheetvar row *xlsx.Rowvar cell *xlsx.Cellvar err errorfile = xlsx.NewFile()sheet, err = file.AddSheet("TEST")if err != nil {  fmt.Printf(err.Error())}row = sheet.AddRow()cell = row.AddCell()cell.Value = "I am a cell!"w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")w.Header().Add("Content-Disposition", "attachment; filename=Test.xlsx")file.Write(w)fmt.Fprint(w, nil)变量 w 是 http.ResponseWriter。我已经测试了这段代码,浏览器成功下载了 xlsx 文件,我可以在 Linux 64 位上使用 LibreOffice 打开它。但是,当我尝试在 Windows 7 32 位上使用 Microsoft Excel 2010 打开文件时,它给了我以下错误消息:-Excel 在“Test.xlsx”中发现无法读取的内容。是否要恢复此工作簿的内容?如果您信任此工作簿的来源,请单击是。一旦我点击是,它就会显示“我是一个细胞!”的内容。正确然后我点击了启用编辑按钮,它给了我一条消息:-Excel 完成了文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。如何通过使 Microsoft Excel 打开由tealeg/xlsx 生成的 xlsx 文件而没有任何错误消息来解决此问题?
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

你的最后一行完全没有必要,它会破坏 Excel 文件(XLSX 是一个 zip 存档):


fmt.Fprint(w, nil)

"<nil>"在您已经编写了 Excel 文件的内容后,这会将字符串的字节打印到 Web 响应,我相信您只是意外地将其留在那里。去掉那个。


还File.Write()返回一个error,还要检查一下,例如:


if err = file.Write(w); err != nil {

    // Handle error, e.g. log it and send back an error response

}

如果错误仍然存在,则与 AppEngine 无关。我建议先在本地尝试生成 Excel,然后使用 将其保存到文件中File.Save(),例如:


if err = file.Save("MyXLSXFile.xlsx"); err != nil {

    fmt.Println("Failed to save file:", err)

}

// If no error, try opening "MyXLSXFile.xlsx" on you computer.

还要注意图书馆主页上的评论:


目前对编写 XLSX 文件的支持非常少。它会慢慢扩展,但同时欢迎补丁!


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 241 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信