Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC web环境下用GridView生成分页excel_C#_Asp.net_Asp.net Mvc_Excel_Datagridview - Fatal编程技术网

C# 在MVC web环境下用GridView生成分页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

我使用下面的代码,我想知道我是否能以某种方式使它成为一个表格分隔的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文件,而是欺骗浏览器来创建一个。这可能就是为什么制作高级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,而我无法控制。但我会检查一下,稍后再来