cailangwei

九尺之台,起于累土。
温故而知新,可以为师矣!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Dataset 导出 Excel

Posted on 2012-01-07 16:46  cailangwei  阅读(1134)  评论(0)    收藏  举报

首先需要找到Excel.dll,可以上网上下,

添加using Excel;

也可以选择Microsoft.Office.Interop.Excel.dll,

添加using Excel = Microsoft.Office.Interop.Excel;

1、 修改Excel.dll 或者Microsoft.Office.Interop.Excel的属性中的嵌入互操作类型改为false

 clip_image001

否则会出现一下错误,

类型“Microsoft.Office.Interop.Excel.ApplicationClass”未定义构造函数
无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。

2、 新建一个Dataset,也可以用数据库做

DataSet ds = new DataSet();
DataTable table = new DataTable();
DataColumn[] columns = new DataColumn[7];
columns[0] = new DataColumn("EmpNo");
columns[1] = new DataColumn("EmpName");
columns[2] = new DataColumn("Dept");
columns[3] = new DataColumn("Post");
columns[4] = new DataColumn("Salary");
columns[5] = new DataColumn("Bank");
columns[6] = new DataColumn("BankNo");
table.Columns.AddRange(columns);
DataRow row1 = table.NewRow();
row1["EmpNo"] = "1001";
row1["EmpName"] = "刘德华";
row1["Dept"] = "办公室";
row1["Post"] = "总经理";
row1["Salary"] = 6000;
row1["Bank"] = "建设银行";
row1["BankNo"] = "5475694879437594";
DataRow row2 = table.NewRow();
row2["EmpNo"] = "1002";
row2["EmpName"] = "周迅";
row2["Dept"] = "财务";
row2["Post"] = "出纳";
row2["Salary"] = 4000;
row2["Bank"] = "建设银行";
row2["BankNo"] = "5475695489548395";
DataRow row3 = table.NewRow();
row3["EmpNo"] = "1003";
row3["EmpName"] = "abc";
row3["Dept"] = "信息部";
row3["Post"] = "程序员";
row3["Salary"] = 5000;
row3["Bank"] = "建设银行";
row3["BankNo"] = "5475763489548395";
table.Rows.Add(row1);
table.Rows.Add(row2);
table.Rows.Add(row3);
ds.Tables.Add(table);

3、新建导出Excel方法

public void ExporToExcel(DataSet ds)
{
if (ds == null) return;
string savefilename = "";
bool filesaved = false;

SaveFileDialog savedialog = new SaveFileDialog();
savedialog.DefaultExt = "xls";
savedialog.Filter = "excel文件|*.xls";
savedialog.FileName = "sheet1";
savedialog.ShowDialog();
savefilename = savedialog.FileName;
if (savefilename.IndexOf(":") < 0) return; //被点了取消
Excel.Application xlapp = new Excel.ApplicationClass();
if (xlapp == null)
{
MessageBox.Show("无法创建excel对象,可能您的机子未安装excel");
return;
}
Excel.Workbooks workbooks = xlapp.Workbooks;
Excel._Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Excel.Range range;
// string oldcaption=this.captiontext;
long totalcount = ds.Tables[0].Rows.Count;
long rowread = 0;
float percent = 0;
// worksheet.Cells[1,1]=this.captiontext;
//写入字段
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[2, i + 1] = ds.Tables[0].Columns[i].ColumnName;
range = (Excel.Range)worksheet.Cells[2, i + 1];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
}
//写入数值
// this.captionvisible = true;
for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
{
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[r + 3, i + 1] = ds.Tables[0].Rows[r][i];
}
rowread++;
percent = ((float)(100 * rowread)) / totalcount;
// this.captiontext = "正在导出数据["+ percent.tostring("0.00") +"%]";
System.Windows.Forms.Application.DoEvents();
}
// this.captionvisible = false;
// this.captiontext = oldcaption;
range = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[ds.Tables[0].Rows.Count + 2, ds.Tables[0].Columns.Count]);
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;
if (ds.Tables[0].Columns.Count > 1)
{
range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
}
if (savefilename != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(savefilename);
filesaved = true;
MessageBox.Show("文件已经成功导出...");
}
catch (Exception ex)
{
filesaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
else
{
filesaved = false;
}
xlapp.Quit();
GC.Collect();//强行销毁
}