您的位置:首页 > 编程语言 > C#

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

2015-02-06 08:58 991 查看
上次写了一个用文件流方式将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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: