底层类:

#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 类的更多相关文章

  1. [转].net 使用NPOI或MyXls把DataTable导出到Excel

    本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...

  2. DevExpress GridControl GridView 导出到 Excel 类

    说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...

  3. DataTable导出到Excel

    简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...

  4. c# DataTable导出为excel

    /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <param name="dt& ...

  5. C# datatable 导出到Excel

    datatable导出到Excel /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <pa ...

  6. DataTable导出到Excel(.NET 4.0)

    最近在论坛里又看到很多关于DataTable(DataSet)导入Excel的帖子,我也温故知新一下,用VS2010重新整理了一个Sample.这个问题简化一下就是内存数据到文件,也就是遍历赋值,只不 ...

  7. csv/json/list/datatable导出为excel的通用模块设计

    导出excel的场景我一般都是一个List直接导出成一张sheet,用Npoi.Mapper库很方便,最近我经常是需要将接口返回的jsonarray转成一张excel表,比如从elasticsearc ...

  8. NPOI使用Datatable导出到Excel

    首先要引用dll 下载地址:http://pan.baidu.com/s/1dFr2m 引入命名空间: using NPOI.HSSF.UserModel;using NPOI.SS.UserMode ...

  9. C# 将datatable导出成Excel

    public void Result( ){try{StringBuilder sql = new StringBuilder();List<SqlParameter> parameter ...

随机推荐

  1. python机器学习库

    http://scikit-learn.org/stable/install.html

  2. xxx couldn't be loaded because it has not been added to the build settings.

    这个由于没有将进入场景放入Build Settings里面造成的.

  3. python登录豆瓣,发帖

    学习了urllib.urllib2及cookielib常用方法的使用登录豆瓣,由于有验证码,采取的办法是将验证码图片下载到同目录下,查看图片后输入验证码即可登录.发帖帖子内容写死在代码中了 [Pyth ...

  4. RadioGroup 的 RadioButton 选择改变字体颜色和背景颜色

    RadioGroup <RadioGroup android:id="@+id/client_charge_radiogroup" android:layout_width= ...

  5. AT&T 和 Intel 汇编语法的主要区别

    转自AT&T 和 Intel 汇编语法的主要区别 作为一个爱折腾的大好青年,补番之余还要补一些 Linux 下的基础,比如 GDB 的正确使用方法.但无论是看 gdb 还是 gcc -S 里的 ...

  6. php 获取图片、swf的尺寸大小

    PHP获取图片大小函数.  getimagesize() 能够得到图片及flash(swf)的大小. 语法 1 list($width, $height, $type, $attr) = getima ...

  7. [codility]tape_equilibrium

    http://codility.com/demo/take-sample-test/tapeequilibrium 简单题.记录到i为止的sum就可以了.O(n). // you can also u ...

  8. Android 常用UI控件之TabHost(1)TabHost的两种布局方式

    TabHost是Android中的tab组件. TabHost布局文件的基本结构 TabHost下有个layout,这个layout中有TabWidget与FrameLayout.TabWidget是 ...

  9. WinForm实现简单的拖拽功能(C#)(2)

    首先创建一个winform应用程序,添加listbox1与listbox2,拖拽listbox1的项到listbox2上去. 具体代码如下 namespace OLE拖拽{ public partia ...

  10. shutdown,init,halt,poweroff,reboot的区别和联系, pkill -kill -t tty7注销

    前言 最近这些天,每天晚上关机前,都会在osc上发一条动弹,“我要init 0了,各位晚安啊”,这是一件再正常不过的事情了. 看似很平常的一件事情,不过在昨晚就被一位同学的回复给难住了,到底是什么样的 ...