C# 在MVC web环境下用GridView生成分页excel
我使用下面的代码,我想知道我是否能以某种方式使它成为一个表格分隔的excel文件,每一行都在自己的表格中C# 在MVC web环境下用GridView生成分页excel,c#,asp.net,asp.net-mvc,excel,datagridview,C#,Asp.net,Asp.net Mvc,Excel,Datagridview,我使用下面的代码,我想知道我是否能以某种方式使它成为一个表格分隔的excel文件,每一行都在自己的表格中 DataTable dt = new DataTable(); SqlConnection objcon = new SqlConnection(connectionString); string sql = "SELECT * FROM table"; SqlDataAdapter objda = new SqlDataAdapter(sql, objcon); objda.Fill(d
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文件,而是欺骗浏览器来创建一个。这可能就是为什么制作高级excel文件有点复杂的原因。
我已经尝试过设置每个gridview页面的最大行数等等
是否有任何方法可以做到这一点,或者通常以另一种方式创建excel文件,使我能够做到这一点。无需安装Windows office或类似软件
谢谢您的时间。我会用类似的东西。我猜您创建excel文件的原因是因为您不想使用互操作对象,因为它们太重太大。但是,您仍然需要操作对象的灵活性。我会看看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();
}
使用(SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Create(文件名,SpreadsheetDocumentType.工作簿))
{
WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
WorksheetPart WorksheetPart=workBookPart.AddNewPart();
WorkbookStylesPart WorkbookStylesPart=workBookPart.AddNewPart();
样式表样式表=新的CustomStyleSheet();
样式表.Save(workBookStylesPart);
string relId=workBookPart.GetIdOfPart(工作表部分);
工作簿=新工作簿();
工作表=新工作表();
var columns=CreateColumns();
板材=新板材();
图纸=新图纸{Name=“mySheet”,图纸Id=1,Id=relId};
附页(页);
工作表。追加(列);
SheetData SheetData=CreateSheetData();
工作表。附加(表数据);
工作簿。附加(页);
工作表部分工作表=工作表;
worksheetPart.Worksheet.Save();
spreadSheetDocument.WorkbookPart.Workbook=工作簿;
spreadSheetDocument.WorkbookPart.Workbook.Save();
//现在我想添加一张空表
图纸=新图纸{Name=“mySheet2”,图纸Id=2,Id=relId};
附页(页);
spreadSheetDocument.WorkbookPart.Workbook.Save();
电子表格文档。关闭();
}
这主要是因为一些互操作要求安装office,而我无法控制。但我会检查一下,稍后再来