我正在使用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 文件的支持非常少。它会慢慢扩展,但同时欢迎补丁!
- 1 回答
- 0 关注
- 241 浏览
添加回答
举报
0/150
提交
取消