C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)【转载】

摘要:
上次写了一个用文件流方式将Datatable导出Excel的方法,这个方法有局限性,比如没法对Excel进行一些增加列颜色等简单的操作,现在,给大家介绍另外一种方法,用微软的Excel类。既然要用到类,那必须是你的机子要装上Excel才行呢。
上次写了一个用文件流方式将Datatable导出Excel的方法,这个方法有局限性,比如没法对Excel进行一些增加列颜色等简单的操作,现在,给大家介绍另外一种方法,用微软的Excel类。既然要用到类,那必须是你的机子要装上Excel才行呢。

public void DataTabletoExcel(System.Data.DataTable[] tmpDataTable,string date1,string date2)

{

string saveFileName = "";

SaveFileDialog saveDialog = new SaveFileDialog();

saveDialog.DefaultExt = "xls";

saveDialog.Filter = "Excel 文件|*.xls";

saveDialog.ShowDialog();

saveFileName = saveDialog.FileName;

if (saveFileName.IndexOf(":") < 0)

return; //被点了取消

for (int k = 0; k < tmpDataTable.Length; k++)

{

//if (k % 50 == 0)

//{

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)

{

if (process.ProcessName == "EXCEL")

{

if (string.IsNullOrEmpty(process.MainWindowTitle))

{

process.Kill();

}

}

}

//}

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

try

{

#region

if (tmpDataTable[k] == null)

return;

string name=string.Empty;

if (grid_Result1.GetGridView.Columns["STR_1"].Visible == false && grid_Result1.GetGridView.Columns["STR_8"].Visible == false)

name = tmpDataTable[k].Rows[0][0].ToString();

if (grid_Result1.GetGridView.Columns["STR_1"].Visible == false && grid_Result1.GetGridView.Columns["STR_8"].Visible == true)

name = tmpDataTable[k].Rows[0][1].ToString();

if (grid_Result1.GetGridView.Columns["STR_1"].Visible == true && grid_Result1.GetGridView.Columns["STR_8"].Visible == true)

name = tmpDataTable[k].Rows[0][2].ToString();

if (grid_Result1.GetGridView.Columns["STR_1"].Visible == true && grid_Result1.GetGridView.Columns["STR_8"].Visible == false)

name = tmpDataTable[k].Rows[0][1].ToString();

if (name.IndexOf("/") > -1)

{

name = name.Replace("/", " ");

}

name = name + date1 + "~" + date2;

saveFileName = saveFileName.Substring(0, saveFileName.LastIndexOf("\")) + "\" + name + ".xls";

int rowNum = tmpDataTable[k].Rows.Count;

int columnNum = tmpDataTable[k].Columns.Count;

int rowIndex = 1;

int columnIndex = 0;

xlApp.DefaultFilePath = "";

xlApp.DisplayAlerts = true;

xlApp.SheetsInNewWorkbook = 1;

Workbook xlBook = xlApp.Workbooks.Add(true);

//将DataTable的列名导入Excel表第一行

foreach (DataColumn dc in tmpDataTable[k].Columns)

{

columnIndex++;

xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;

}

//将DataTable中的数据导入Excel中

for (int i = 0; i < rowNum; i++)

{

rowIndex++;

columnIndex = 0;

for (int j = 0; j < columnNum; j++)

{

columnIndex++;

xlApp.Cells[rowIndex, columnIndex] = tmpDataTable[k].Rows[i][j].ToString();

}

}

if (saveFileName.IndexOf("/") > -1)

{

saveFileName = saveFileName.Replace("/", "-");

}

System.IO.File.Delete(saveFileName);

xlBook.SaveCopyAs(saveFileName);

Process[] processes1 = Process.GetProcesses();

foreach (Process process in processes1)

{

if (process.ProcessName == "EXCEL")

{

if (string.IsNullOrEmpty(process.MainWindowTitle))

{

process.Kill();

}

}

}

System.Threading.Thread.Sleep(1000);

#endregion

}

catch (Exception ex)

{

XtraMessageBox.Show("导出Excel出错,原因:" + ex.Message);

return;

}

}

免责声明:文章转载自《C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)【转载】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用 Python 和 Oracle 数据库实现高并发性Node.js安装与配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

request获取数据的几种方法

1、request.getparameter(); 1//只接收前台穿过来的一个指定的参数2 String value=request.getparameter("key"); 2、request.getParameterMap(); 说白了前端提交到Servlet或者Action里面的参数Map,如果你是以表单提交,那么request.getParam...

各种电子面单-Api接口(顺丰、快递鸟、菜鸟)

目录 术语 电子面单样式 对接接口各家对比 各家合作流程对比 接口定义及说明 Request Params 系统级参数(公共参数) 接口参数 Response Params Java栗子 术语 对于一般人,电子面单的意思可能并不是很了解;说白了,就是快递员给你打印的快递单的电子版。 专业解释: 电子面单是一种通过热敏纸打印输出纸质物流面...

RSA加密与解密

数据信息安全对我们每个人都有很重要的意义,特别是一些敏感信息,可能一些类似于收货地址、手机号还没引起大家的注意。但是最直白的,银行卡、姓名、手机号、身份证号,如果这些信息被黑客拦截到,他就可以伪装成你,把你的钱都取走。那我们该怎么防止这样的事情发生?报文加密解密,加签验签。 我害怕什么 我害怕卡里的钱被别人取走 我害怕转账的时候,报文被黑客拦截到,篡改信息...

资源、文件Android应用程序资源的编译和打包过程分析by小雨

这段时间一直在习学资源、文件-之类的题问,上午正好有机会和大家共享一下.         我们晓得,在一个APK文件中,除了有码代文件外之,还有很多资源文件。这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里头的。在打包之前,大部分本文格式的XML资源文件还会被编译成二进制格式的X...

笔记--随时更新

一、电脑先安装SqlServer2008,后安装SqlServer2014 在通过公司封装的Lnd.BaseOper(其内部是通过OLEDBConnection实现的)去访问SqlServer2014的数据库会报错,因为如果先安装2008,再安装2014,导致sqlexpress实例占用了1433端口,2014的实例MSSQLSERVER只能使用动态端口。...

C# 操作Excel大全

//引用Microsoft.Office.Interop.Excel.dll文件 //添加using usingMicrosoft.Office.Interop.Excel; usingExcel=Microsoft.Office.Interop.Excel; //设置程序运行语言 System.Globalization.CultureInf...