C#导出数据到Excel 源码大全
C#导出数据到Excel 源码大全
有以下五种方案: 1. 若是Winform界面的,使用DevExpress组件的GridControl组件,调用GridView.ExprtToXlsx方法。 操作简单,格式清晰! C# Code: SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Microsoft Office Excel 2007或以上|*.xlsx"; if (dlg.ShowDialog() == DialogResult.OK) { gridView1.ExportToXlsx(dlg.FileName); if (Msg.AskQuestion("导出文件" + dlg.FileName + "成功,是否现在打开?") == true) System.Diagnostics.Process.Start(dlg.FileName); } //来源:C/S框架网(www.csframework.com) QQ:23404761 2. 使用支持Excel文件操作的Microsoft.Jet.OLEDB底层驱动+ADO.NET组件。 a) 此方法适于导出XML文件。首先建立连接,加载到DataTable,再使用DataTable.Export方法。 b) 导出数据到数据库。 C# Code: public override DbConnection CreateConnection() { // IMEX=1 可把混合型作为文本型读取,避免null值 string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _FileName + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; return new OleDbConnection(conn); } public override DataTable GetTable(string sql) { DataTable dt = null; try { if (_DbConnection.State == ConnectionState.Closed) _DbConnection.Open(); OleDbCommand cmd = _DbConnection.CreateCommand() as OleDbCommand; cmd.CommandText = sql; dt = new DataTable(); DbDataAdapter adp = new OleDbDataAdapter(cmd); adp.Fill(dt); } finally { if (_DbConnection.State != ConnectionState.Closed) _DbConnection.Close(); } return dt; } //来源:C/S框架网(www.csframework.com) QQ:23404761 C# Code: public void ExportExcel(DataTable dt) { OleDbConnection conn = null; OleDbCommand cmd = null; Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(true); try { //设置区域为当前线程的区域 dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; //设置导出文件路径 string path = HttpContext.Current.Server.MapPath("Export/"); //设置新建文件路径及名称 string savePath = path + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx"; //创建文件 FileStream file = new FileStream(savePath, FileMode.CreateNew); //关闭释放流,不然没办法写入数据 file.Close(); file.Dispose(); //由于使用流创建的 excel 文件不能被正常识别,所以只能使用这种方式另存为一下。 workbook.SaveCopyAs(savePath); // Excel 2003 版本连接字符串 //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + savePath + "';Extended Properties='Excel 8.0;HDR=Yes;'"; // Excel 2007 以上版本连接字符串 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='"+ savePath + "';Extended Properties='Excel 12.0;HDR=Yes;'"; //创建连接对象 conn = new OleDbConnection(strConn); //打开连接 conn.Open(); //创建命令对象 cmd = conn.CreateCommand(); //获取 excel 所有的数据表。 //new object[] { null, null, null, "Table" }指定返回的架构信息:参数介绍 //第一个参数指定目录 //第二个参数指定所有者 //第三个参数指定表名 //第四个参数指定表类型 DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //因为后面创建的表都会在最后面,所以本想删除掉前面的表,结果发现做不到,只能清空数据。 for (int i = 0; i < dtSheetName.Rows.Count; i++) { cmd.CommandText = "drop table [" + dtSheetName.Rows[i]["TABLE_NAME"].ToString() + "]"; cmd.ExecuteNonQuery(); } //添加一个表,即 Excel 中 sheet 表 cmd.CommandText = "create table " + dt.TableName + " ([S_Id] INT,[S_StuNo] VarChar,[S_Name] VarChar,[S_Sex] VarChar,[S_Height] VarChar,[S_BirthDate] VarChar,[C_S_Id] INT)"; cmd.ExecuteNonQuery(); for (int i = 0; i < dt.Rows.Count; i++) { string values = ""; for (int j = 0; j < dt.Columns.Count; j++) { values += "'" + dt.Rows[i][j].ToString() + "',"; } //判断最后一个字符是否为逗号,如果是就截取掉 if (values.LastIndexOf(',') == values.Length - 1) { values = values.Substring(0, values.Length - 1); } //写入数据 cmd.CommandText = "insert into " + dt.TableName + " (S_Id,S_StuNo,S_Name,S_Sex,S_Height,S_BirthDate,C_S_Id) values (" + values + ")"; cmd.ExecuteNonQuery(); } conn.Close(); conn.Dispose(); cmd.Dispose(); //加入下面的方法,把保存的 Excel 文件输出到浏览器下载。需要先关闭连接。 FileInfo fileInfo = new FileInfo(savePath); OutputClient(fileInfo); } catch (Exception ex) { } finally { workbook.Close(false, Type.Missing, Type.Missing); workbooks.Close(); excel.Quit(); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); Marshal.ReleaseComObject(excel); workbook = null; workbooks = null; excel = null; GC.Collect(); } } //来源:C/S框架网(www.csframework.com) QQ:23404761 C# Code: public void ExportExcel(DataTable dt) { if (dt != null) { Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); if (excel == null) { return; } //设置为不可见,操作在后台执行,为 true 的话会打开 Excel excel.Visible = false; //打开时设置为全屏显式 //excel.DisplayFullScreen = true; //初始化工作簿 Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks; //新增加一个工作簿,Add()方法也可以直接传入参数 true Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); //同样是新增一个工作簿,但是会弹出保存对话框 //Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Add(true); //新增加一个 Excel 表(sheet) Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //设置表的名称 worksheet.Name = dt.TableName; try { //创建一个单元格 Microsoft.Office.Interop.Excel.Range range; int rowIndex = 1; //行的起始下标为 1 int colIndex = 1; //列的起始下标为 1 //设置列名 for (int i = 0; i < dt.Columns.Count; i++) { //设置第一行,即列名 worksheet.Cells[rowIndex, colIndex + i] = dt.Columns[i].ColumnName; //获取第一行的每个单元格 range = worksheet.Cells[rowIndex, colIndex + i]; //设置单元格的内部颜色 range.Interior.ColorIndex = 33; //字体加粗 range.Font.Bold = true; //设置为黑色 range.Font.Color = 0; //设置为宋体 range.Font.Name = "Arial"; //设置字体大小 range.Font.Size = 12; //水平居中 range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; //垂直居中 range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; } //跳过第一行,第一行写入了列名 rowIndex++; //写入数据 for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { worksheet.Cells[rowIndex + i, colIndex + j] = dt.Rows[i][j].ToString(); } } //设置所有列宽为自动列宽 //worksheet.Columns.AutoFit(); //设置所有单元格列宽为自动列宽 worksheet.Cells.Columns.AutoFit(); //worksheet.Cells.EntireColumn.AutoFit(); //是否提示,如果想删除某个sheet页,首先要将此项设为fasle。 excel.DisplayAlerts = false; //保存写入的数据,这里还没有保存到磁盘 workbook.Saved = true; //设置导出文件路径 string path = HttpContext.Current.Server.MapPath("Export/"); //设置新建文件路径及名称 string savePath = path + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx"; //创建文件 FileStream file = new FileStream(savePath, FileMode.CreateNew); //关闭释放流,不然没办法写入数据 file.Close(); file.Dispose(); //保存到指定的路径 workbook.SaveCopyAs(savePath); //还可以加入以下方法输出到浏览器下载 FileInfo fileInfo = new FileInfo(savePath); OutputClient(fileInfo); } catch(Exception ex) { } finally { workbook.Close(false, Type.Missing, Type.Missing); workbooks.Close(); //关闭退出 excel.Quit(); //释放 COM 对象 Marshal.ReleaseComObject(worksheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); Marshal.ReleaseComObject(excel); worksheet = null; workbook = null; workbooks = null; excel = null; GC.Collect(); } } } //来源:C/S框架网(www.csframework.com) QQ:23404761 4. NPOI NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本。 NPOI 是免费开源的,操作也比较方便,下载地址:http://npoi.codeplex.com/ 5. EPPlus EPPlus 是一个使用 Open Office Xml 格式(xlsx)读取和写入 Excel 2007/2010 文件的 .net 库,并且免费开源。 下载地址:http://epplus.codeplex.com/
参考文档:
使用[后台数据更新模型]保存主从表数据(C#源码) C# 数据窗体实现增删改查(CRUD)源码下载(原) C#中将数据插入到Excel表中 C#将数据导出到Excel汇总 框架提供通用数据导出功能,将表格数据导出到EXCEL文件 C#多数据库组件包支持MSSQL+Oracle+MySQL+用户操作手册|C/S框架网 解决方案:FastReport.NET导出Excel文件单元格的数据空白 C#.NET iTextSharp生成PDF文件源码大全(生成表格、透明水印,页脚页眉页码等) C# Excel xls文件导入程序Excel数据库通用类XlsFileDB 在基类窗体扩展一个通用导出Excel文件的按钮(支持导出所有表格的数据到Xlsx文件) 基于集团组织架构数据权限系统快速开发框架(C#.NET Winform+支持多数据库) C#源码-PowerOA1.1-源码下载 C#源码-SQLServer数据库生成修改工具-源码下载 C#源码-海益ERP数据管理系统2.0源码-源码下载 C#源码-调查队数据仓库项目源码-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |