无法使用Linq读取Xlsx文件

时间:2015-02-19 08:30:49

标签: c# asp.net-mvc linq

方案是:我正在使用.net mvc4 web应用程序,其中有一个表单数据,我必须先将其转换为Excel格式并下载.xlsx格式的文件。因此我使用过:

List<UploadDownload> listItems = new List<UploadDownload>();
listItems = uploadDownload.ConvertToList();
gridView.DataSource = listItems.ToList();
gridView.DataBind();
gridView.Dispose();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment; filename=abc.xlsx");
Response.ContentType = "application/vnd.openxmlformats-     officedocument.spreadsheetml.sheet";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gridView.RenderControl(htw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

我成功下载了文件(abc.xlsx),但是当我想使用linq读取文件时,每次都会出现“预期文件格式”错误。

对于读取已下载的(abc.xlsx)文件,我使用以下代码:

      var excel = new ExcelQueryFactory();
        excel.FileName = filepath;
        var StepList = excel.Worksheet();
        var Steps = from s in excel.WorksheetNoHeader()

                    select (string)s[1];

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您不能只将HTML网格的内容写入文件,然后在文件上加上“.xlsx”扩展名,并为其提供正确的内容处理,并希望Excel可以读取它。

Excel期待二进制文件(它实际上是一个zip文件),并且它内部有一个需要正确的整体结构。如果您复制一个真实的Excel文件并将扩展名更改为.zip然后打开它,您将看到我的意思。

您需要使用库来编写excel期望的正确二进制格式,或者以CSV格式编写网格并让excel打开它并进行转换

答案 1 :(得分:1)

如果没有合适的库,您不能简单地阅读Excel .XLSX文件。 Excel .XLSX文件是由MS制作的基于XML的压缩文件格式。

MS Open XML SDK 2.5是我建议的好举措。浏览Documentation

用于阅读.XLSX个文件的示例代码:READ

注意:Open XML SDK是构建定位.XLSX文件格式(这是一种开放的xml文件格式)。它是Interop

的继承者