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

我正在使用https://github.com/tealeg/xlsx生成 Go 语言的 xlsx 文件。该应用程序正在 Google App Engine 上运行。


var file *xlsx.File

var sheet *xlsx.Sheet

var row *xlsx.Row

var cell *xlsx.Cell

var err error


file = 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 文件而没有任何错误消息来解决此问题?


慕神8447489
浏览 242回答 1
1回答

阿波罗的战车

你的最后一行完全没有必要,它会破坏 Excel 文件(XLSX 是一个 zip 存档):fmt.Fprint(w, nil)"<nil>"在您已经编写了 Excel 文件的内容后,这会将字符串的字节打印到 Web 响应,我相信您只是意外地将其留在那里。去掉那个。还File.Write()返回一个error,还要检查一下,例如:if err = file.Write(w); err != nil {&nbsp; &nbsp; // Handle error, e.g. log it and send back an error response}如果错误仍然存在,则与 AppEngine 无关。我建议先在本地尝试生成 Excel,然后使用 将其保存到文件中File.Save(),例如:if err = file.Save("MyXLSXFile.xlsx"); err != nil {&nbsp; &nbsp; fmt.Println("Failed to save file:", err)}// If no error, try opening "MyXLSXFile.xlsx" on you computer.还要注意图书馆主页上的评论:目前对编写 XLSX 文件的支持非常少。它会慢慢扩展,但同时欢迎补丁!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go