C# 快速填充excel 数据表导出excel
2008-01-05 20:37
525 查看
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
private string NumTochr(int Num)
{
int n = 64 + Num;
return "" + (Char)n;
}
private string NumToExeclRowStr(int Num)
{
int X, Y;
if (Num < 27)
{
return NumTochr(Num);
}
X = Num / 26;
Y = Num - X * 26;
return NumTochr(X) + NumTochr(Y);
}
/// <summary>
/// 将DataTable中的列名及数据导出到Excel表中
/// </summary>
/// <param name="tmpDataTable">要导出的DataTable</param>
/// <param name="strFileName">Excel的保存路径及名称</param>
public void DataTabletoExcelkk(System.Data.DataTable tmpDataTable, string strFileName)
{
if (tmpDataTable == null)
return;
int rowNum = tmpDataTable.Rows.Count;
int columnNum = tmpDataTable.Columns.Count;
int rowIndex = 1;
int columnIndex = 0;
Excel.Application xlApp = new Excel.ApplicationClass();
xlApp.DefaultFilePath = "";
xlApp.DisplayAlerts = true;
xlApp.SheetsInNewWorkbook = 1;
Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
Excel.Worksheet ws = (Excel.Worksheet)xlBook.Worksheets[1];
int colnum = tmpDataTable.Columns.Count;
Excel.Range r = ws.get_Range("A1", NumToExeclRowStr(colnum) + "1");
object[] objHeader = new object[colnum];
//将DataTable的列名导入Excel表第一行
foreach (DataColumn dc in tmpDataTable.Columns)
{
objHeader[columnIndex] = dc.ColumnName;
columnIndex++;
}
r.Value2 = objHeader;
//将DataTable中的数据导入Excel中
for (int i = 0; i < rowNum; i++)
{
rowIndex++;
columnIndex = 0;
for (int j = 0; j < columnNum; j++)
{
objHeader[columnIndex] = tmpDataTable.Rows[i][j].ToString();
columnIndex++;
}
r = ws.get_Range("A" + (i + 2), NumToExeclRowStr(colnum) + (i + 2));
r.Value2 = objHeader;
}
r.EntireColumn.AutoFit();
xlBook.SaveCopyAs(strFileName);
}
调用---
private void button5_Click(object sender, EventArgs e)
{
//测试 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2008.1.5
DbClass = new Db_Class();
System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
MyWatch.Start();
DataTabletoExcelkk(DbClass.Db_CreateDataSet("select * from tab”).Tables[0], "C://pp.xls");
MyWatch.Stop();
MessageBox.Show(MyWatch.ElapsedMilliseconds.ToString() + "毫秒");
}
使用单元填充Cells[rowIndex, columnIndex]一般慢的多,rangle提高的columnNUM倍
using Excel = Microsoft.Office.Interop.Excel;
private string NumTochr(int Num)
{
int n = 64 + Num;
return "" + (Char)n;
}
private string NumToExeclRowStr(int Num)
{
int X, Y;
if (Num < 27)
{
return NumTochr(Num);
}
X = Num / 26;
Y = Num - X * 26;
return NumTochr(X) + NumTochr(Y);
}
/// <summary>
/// 将DataTable中的列名及数据导出到Excel表中
/// </summary>
/// <param name="tmpDataTable">要导出的DataTable</param>
/// <param name="strFileName">Excel的保存路径及名称</param>
public void DataTabletoExcelkk(System.Data.DataTable tmpDataTable, string strFileName)
{
if (tmpDataTable == null)
return;
int rowNum = tmpDataTable.Rows.Count;
int columnNum = tmpDataTable.Columns.Count;
int rowIndex = 1;
int columnIndex = 0;
Excel.Application xlApp = new Excel.ApplicationClass();
xlApp.DefaultFilePath = "";
xlApp.DisplayAlerts = true;
xlApp.SheetsInNewWorkbook = 1;
Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
Excel.Worksheet ws = (Excel.Worksheet)xlBook.Worksheets[1];
int colnum = tmpDataTable.Columns.Count;
Excel.Range r = ws.get_Range("A1", NumToExeclRowStr(colnum) + "1");
object[] objHeader = new object[colnum];
//将DataTable的列名导入Excel表第一行
foreach (DataColumn dc in tmpDataTable.Columns)
{
objHeader[columnIndex] = dc.ColumnName;
columnIndex++;
}
r.Value2 = objHeader;
//将DataTable中的数据导入Excel中
for (int i = 0; i < rowNum; i++)
{
rowIndex++;
columnIndex = 0;
for (int j = 0; j < columnNum; j++)
{
objHeader[columnIndex] = tmpDataTable.Rows[i][j].ToString();
columnIndex++;
}
r = ws.get_Range("A" + (i + 2), NumToExeclRowStr(colnum) + (i + 2));
r.Value2 = objHeader;
}
r.EntireColumn.AutoFit();
xlBook.SaveCopyAs(strFileName);
}
调用---
private void button5_Click(object sender, EventArgs e)
{
//测试 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2008.1.5
DbClass = new Db_Class();
System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
MyWatch.Start();
DataTabletoExcelkk(DbClass.Db_CreateDataSet("select * from tab”).Tables[0], "C://pp.xls");
MyWatch.Stop();
MessageBox.Show(MyWatch.ElapsedMilliseconds.ToString() + "毫秒");
}
使用单元填充Cells[rowIndex, columnIndex]一般慢的多,rangle提高的columnNUM倍
相关文章推荐
- C#报表数据批量快速导出到Excel(百万级数据秒级内完成)
- c# 导出excel 填充数据 输出到浏览器
- C#也能动态生成Word文档并填充数据, 导出EXCEL 方法
- C#中数据以Excel文件形式导出
- C#实现数据导出Excel工作表
- 用C#快速往Excel写数据
- 用C#快速往Excel写数据
- C# 数据导出到Excel
- C#导出数据到Excel——简单数据导出
- C#导出数据到CSV和EXCEL文件时,过长的数值被转义的解决方法
- 使用C#导入导出数据到Excel
- C# 操作EXCEL导出数据报表的类
- C#后台制作之数据库(二、如何清除显示以及将数据库数据导出到excel表格文件中)
- C#将DataTable数据导出到EXCEL的两种方法
- C# NPOI2.1.3 版本数据导入导出到excel
- c#使用aspose.cells 从datatable导出数据到excel
- C# 数据导出到Excel
- C#数据导出到Excel
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法
- 通过Excel自带的查询分析器快速完成从SQL Server中导出数据的例子(通用类)