DataTable 导出到 Excel 类
底层类:
#region DataTable 导出到 Excel
/// <summary>
/// DataTable 导出到 Excel
/// </summary>
/// <param name="dt">数据表</param>
/// <param name="captions">要导出的列标题</param>
/// <param name="fieldNames">要导出的列名</param>
/// <param name="sheetName">工作簿名称</param>
/// <param name="isOpen">导出完成是否打开Excel,如果=false会杀死当前Excel进程</param>
/// <returns>错误信息,如果为空,说明用户取消导入</returns>
public static string DtToExcel(DataTable dt, string[] captions, string[] fieldNames, string sheetName, bool isOpen)
{
//返回的信息
string str = "";
//保存对话框
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx";
//保存的文件名称
string fileName = "";
if (sfd.ShowDialog() != DialogResult.OK)
{
return "";
}
if (dt == null)
{
str = "表不能为空";
return str;
}
if (captions.Length != fieldNames.Length)
{
str = "列名数目和列标题数目不匹配";
return str;
}
foreach (string aa in fieldNames)
{
if (!dt.Columns.Contains(aa))
{
str = "表中不存在列名为 " + aa + " 的列";
return str;
}
}
//如果不是全部列都要导出,改变一下样式
DataView dv = new DataView(dt);
dt = dv.ToTable(false, fieldNames); //导出路径
fileName = sfd.FileName;
//定义Excel程序
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//判断是否安装Excel
if (excel == null)
{
str = "无法创建Excel对象,可能您的计算机未安装Excel!";
return str;
}
//是否显示导出过程 ,建议关闭,否则在导出过程中鼠标点击Excel文件时会出错
excel.Visible = false;
//定义一个Excel文件
Microsoft.Office.Interop.Excel.Workbook wBook = excel.Workbooks.Add(System.Reflection.Missing.Value);
//定义工作表
Microsoft.Office.Interop.Excel.Worksheet wSheet = (Microsoft.Office.Interop.Excel.Worksheet)wBook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range;
//获取行数、列数
int rowCount = dt.Rows.Count;
int colCount = captions.Length; //设置表格名称
if (sheetName != null && sheetName.Length > 0)
{
wSheet.Name = sheetName;
}
else
{
wSheet.Name = dt.TableName;
} if (rowCount < 1)
{
str = "没有记录可以导出";
return str;
}
try
{
//写标题,标题居中
for (int j = 1; j < captions.Length + 1; j++)
{
excel.Cells[1, j] = captions[j - 1];
} //设置对齐方式
wSheet.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
//设置第一行高度,即标题栏
((Microsoft.Office.Interop.Excel.Range)wSheet.Rows["1:1", System.Type.Missing]).RowHeight = 20;
//设置数据行行高度
((Microsoft.Office.Interop.Excel.Range)wSheet.Rows["2:" + dt.Rows.Count + 1, System.Type.Missing]).RowHeight = 16;
//设置字体大小(10号字体)
wSheet.Range[wSheet.Cells[1, 1], wSheet.Cells[dt.Rows.Count + 1, dt.Columns.Count]].Font.Size = 10;
//设置单元格边框
Microsoft.Office.Interop.Excel.Range range1 = wSheet.Range[wSheet.Cells[1, 1], wSheet.Cells[dt.Rows.Count + 1, dt.Columns.Count]]; //往Excel写数据
for (int m = 0; m < rowCount; m++)
{
for (int n = 0; n < colCount; n++)
{
excel.Cells[m + 2, n + 1] = (object)dt.Rows[m][n] is DBNull ? "" : dt.Rows[m][n].ToString();
}
}
//保存工作表
wSheet.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wBook.Close(Type.Missing, Type.Missing, Type.Missing); ////设置EXLCE最大化
//excel.WindowState = XlWindowState.xlMaximized; //提示信息
str = "导出成功! 共导出 " + rowCount + " 条数据";
return str;
}
catch (Exception ex)
{
str = "导出异常,请重试";
return str;
}
finally
{
if (isOpen)
{
//前台显示给用户
excel.Visible = true;
wSheet = null;
excel = null;
}
else
{
excel.Visible = false;
excel.Quit();
// excel = null;
//杀死Excel 进程
KillProcess(excel);
} GC.Collect();
} }
#endregion
调用(举例):
string str=Functionjsj.DtToExcel(dt, new string[] { "学号", "姓名", "年龄" },
new string[] { "Stu_Number", "Stu_Name", "Stu_Age" }, "学生信息",false);
if (str.Length > 0) {
MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
return;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
DataTable 导出到 Excel 类的更多相关文章
- [转].net 使用NPOI或MyXls把DataTable导出到Excel
本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...
- DevExpress GridControl GridView 导出到 Excel 类
说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...
- DataTable导出到Excel
简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...
- c# DataTable导出为excel
/// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <param name="dt& ...
- C# datatable 导出到Excel
datatable导出到Excel /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <pa ...
- DataTable导出到Excel(.NET 4.0)
最近在论坛里又看到很多关于DataTable(DataSet)导入Excel的帖子,我也温故知新一下,用VS2010重新整理了一个Sample.这个问题简化一下就是内存数据到文件,也就是遍历赋值,只不 ...
- csv/json/list/datatable导出为excel的通用模块设计
导出excel的场景我一般都是一个List直接导出成一张sheet,用Npoi.Mapper库很方便,最近我经常是需要将接口返回的jsonarray转成一张excel表,比如从elasticsearc ...
- NPOI使用Datatable导出到Excel
首先要引用dll 下载地址:http://pan.baidu.com/s/1dFr2m 引入命名空间: using NPOI.HSSF.UserModel;using NPOI.SS.UserMode ...
- C# 将datatable导出成Excel
public void Result( ){try{StringBuilder sql = new StringBuilder();List<SqlParameter> parameter ...
随机推荐
- UVA 11733 Airports
最小生成树,然后看他有多少个连通分量,每个连通分量有个飞机场,最后看所有剩下的边是否有大于飞机场的费用,有的话,改成飞机场: 比赛的时候一直没想明白,╮(╯▽╰)╭: #include<cstd ...
- throw 与 throws的应用
throws---------->把异常交给调用处. 可以结合throw来同时使用. throws 用在方法声明处,表示本方法不处理异常.可以结合throw使用 throw 表示在方法中手工抛出 ...
- CDQ分治题目小结
CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦. 这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如, ...
- 两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容
表A name user owner machine1 1 2 machine2 3 4 表B userid username 1 aaa 2 bbb 3 ccc 4 ddd 以上两个表,表A 设备的 ...
- easyui源码翻译1.32--Tree(树)
前言 使用$.fn.tree.defaults重写默认值对象.下载该插件翻译源码 树控件在web页面中一个将分层数据以树形结构进行显示.它提供用户展开.折叠.拖拽.编辑和异步加载等功能. 源码 /** ...
- 手势识别官方教程(3)识别移动手势(识别速度用VelocityTracker)
moving手势在onTouchEvent()或onTouch()中就可识别,编程时主要是识别积云的速度用VelocityTracker等, Tracking Movement This lesson ...
- 【HDOJ】1230 火星A+B
个人觉得这道题没那么水,wa了几次,才发现自己居然没有给srcb数组reset,打错了.搞死啊. #include <stdio.h> #include <string.h> ...
- 各种数据库使用JDBC连接的方式
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- bzoj3514
好题+数据结构神题+感人肺腑pascal被卡系列,我下面的代码几乎写到最优可怎耐bzoj上pascal开的是O1,c++开的是O2,这怎么可能跑得过!!!还是说说方法吧,这是一道算贡献的好题,因为我们 ...
- cmd for 用法
1:for命令及变量 基本格式: FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数 ...