在Google App Engine上以Go语言打开tealeg xlsx制作的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) 

variablesw是http.ResponseWriter。

我testing了这个代码,浏览器成功下载了xlsx文件,我可以在Linux 64位上用LibreOffice打开它。 但是,当我试图打开Windows 7 32位上的Microsoft Excel 2010文件,它给了我以下错误信息: –

Excel在“Test.xlsx”中发现了不可读的内容。 你想恢复这个工作簿的内容? 如果您信任此工作簿的来源,请单击“是”。

一旦我点击是,它显示的内容“我是一个细胞!” 正确的然后我点击启用编辑button,它给了我一个消息: –

Excel完成文件级别validation和修复。 此工作簿的某些部分可能已被修复或丢弃。

如何通过使Microsoft Excel打开由tealeg / xlsx生成的xlsx文件而没有任何错误消息来解决此问题?

您的最后一行是完全不必要的,并且破坏Excel文件(XLSX是一个zip压缩文件):

 fmt.Fprint(w, nil) 

在你已经写好Excel文件的内容之后,这将把"<nil>"string的字节打印到Web响应中,我相信你刚刚离开那里是一个意外。 删除。

此外File.Write()返回一个error ,也检查,例如:

 if err = file.Write(w); err != nil { // Handle error, eg log it and send back an error response } 

如果错误仍然存​​在,则不是AppEngine相关的。 我build议先在本地尝试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文件的支持目前非常less。 它会慢慢扩大,但同时欢迎补丁!