在MVC Web环境中,使用GridView生成表单分离的excel

我使用下面的代码,我想知道是否可以以某种方式使这个工作表分隔excel文件与自己的工作表中的每一行。

DataTable dt = new DataTable(); SqlConnection objcon = new SqlConnection(connectionString); string sql = "SELECT * FROM table"; SqlDataAdapter objda = new SqlDataAdapter(sql, objcon); objda.Fill(dt); GridView gvreport = new GridView(); gvreport.DataSource = dt; gvreport.DataBind(); string date = DateTime.Now.ToString("yyyy_MM_dd_HHmmss"); string fileName = string.Format("TheFilename_{0}.xls", date); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=" + fileName); Response.ContentType = "application/excel"; System.IO.StringWriter sw = new System.IO.StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); gvreport.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); return null; 

我知道这并不完全生成一个真正的Excel文件,而是使浏览器创build一个。 这可能是为什么制作高级的excel文件要复杂一点。 我已经尝试了诸如为每个gridview页面设置最大数量的行等等。

有没有办法做到这一点,或者一般创build一个Excel文件的另一种方式,让我这样做。 无需安装Windows Office或类似软件。

感谢您的时间。

我会使用像OpenXML的东西。 我猜你创buildExcel文件的原因是因为你不想使用互操作对象,因为它们太笨重了。 但是,您仍然需要灵活地操作对象。 我会看看OpenXML库,因为它包含了许多操作,你在寻找代码看起来像下面的东西,让你开始。 在上面的链接中你会注意到有一个mvc的例子。 这实际上不会改变底层代码。

  using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook)) { WorkbookPart workBookPart = spreadSheetDocument.AddWorkbookPart(); WorksheetPart worksheetPart = workBookPart.AddNewPart<WorksheetPart>(); WorkbookStylesPart workBookStylesPart = workBookPart.AddNewPart<WorkbookStylesPart>(); Stylesheet stylesheet = new CustomStyleSheet(); stylesheet.Save(workBookStylesPart); string relId = workBookPart.GetIdOfPart(worksheetPart); Workbook workbook = new Workbook(); Worksheet worksheet = new Worksheet(); var columns = CreateColumns(); Sheets sheets = new Sheets(); Sheet sheet = new Sheet { Name = "mySheet", SheetId = 1, Id = relId }; sheets.Append(sheet); worksheet.Append(columns); SheetData sheetData = CreateSheetData(); worksheet.Append(sheetData); workbook.Append(sheets); worksheetPart.Worksheet = worksheet; worksheetPart.Worksheet.Save(); spreadSheetDocument.WorkbookPart.Workbook = workbook; spreadSheetDocument.WorkbookPart.Workbook.Save(); //Now I want to add an empty sheet sheet = new Sheet { Name = "mySheet2", SheetId = 2, Id = relId }; sheets.Append(sheet); spreadSheetDocument.WorkbookPart.Workbook.Save(); spreadSheetDocument.Close(); }