using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Threading;namespace MyClass.Windows.Forms
{
/// <summary>
/// Excel 的摘要说明。
/// </summary>
public class Excel2
{
private DataSet m_ds;
public Excel2()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 将生成的DataSet的数据导到EXCEL文件中去
/// </summary>
public void DataGridToExcel(DataSet ds)
{
m_ds = ds;
if(m_ds == null || m_ds.Tables[0].Rows.Count <= 0)
{
MessageBox.Show("该列表没有数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
return;
}
Application.DoEvents();
//鼠标等待
Cursor.Current = Cursors.WaitCursor; //用线程实现
Thread ExportThread = new Thread(new ThreadStart(DataGrid2Excel));
ExportThread.Start();
ExportThread.Join();
ExportThread.Abort(); //鼠标恢复
Cursor.Current = Cursors.Default;
} /// <summary>
/// 将生成的DataSet的数据导到EXCEL文件中去的具体实现
/// </summary>
private void DataGrid2Excel()
{
// 获取要保存的文件名
String strSavePath;
SaveFileDialog SaveFileDlg = new SaveFileDialog();
SaveFileDlg.Filter = "xls files(*.xls)|*.xls|All files(*.*)|*.*";
SaveFileDlg.FilterIndex = 1;
SaveFileDlg.RestoreDirectory = true;
SaveFileDlg.OverwritePrompt = true;
SaveFileDlg.ShowDialog();
strSavePath = SaveFileDlg.FileName;
if(strSavePath == "")
{
return;
}

Application.DoEvents(); Excel.Application excel = new Excel.ApplicationClass();
Excel.WorkbookClass oWB = (Excel.WorkbookClass)(excel.Workbooks.Add(true));
Excel.Worksheet oSheet = (Excel.Worksheet)oWB.ActiveSheet; DataTable dt = m_ds.Tables[0];

//设置列名
for(int i = 0;i < dt.Columns.Count;i++)
{
oSheet.Cells[1,i+1] = dt.Columns[i].Caption.ToString().Trim();
}

//设置数据
for(int i = 0;i < dt.Rows.Count;i++)
{
for(int j = 0;j < dt.Columns.Count;j++)
{
oSheet.Cells[i+2,j+1] = "'" + dt.Rows[i][j].ToString().Trim();
}
}
//设置显示格式
String str = Convert.ToChar('A' + dt.Columns.Count -1).ToString() + '1';
String strExcelLength = Convert.ToChar('A' + dt.Columns.Count -1).ToString() + Convert.ToString(dt.Rows.Count + 1); //设置列名显示格式
oSheet.get_Range("A1",str).Font.Size = 12;
oSheet.get_Range("A1",str).Font.Bold = true;
oSheet.get_Range("A1",str).VerticalAlignment =  Excel.XlVAlign.xlVAlignCenter;
oSheet.get_Range("A1",str).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //设置数据行显示格式
oSheet.get_Range("A2",strExcelLength).Font.Size= 12 ;
oSheet.get_Range("A2",strExcelLength).Font.Bold = false; try
{
//保存文件
//oWB.SaveAs(path,Missing.Value,"","",true,false,Excel.XlSaveAsAccessMode.xlNoChange,1,false,Missing.Value,Missing.Value);
oWB.SaveCopyAs(strSavePath); //释放资源
oWB.Close(false,strSavePath,null);
excel.Workbooks.Close();
excel.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject (excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet); oSheet = null;
oWB= null;
excel = null; GC.Collect();
}
catch
{
// MessageBox.Show(ex.Message.ToString(),"错误",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
MessageBox.Show("数据导出已结束","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}

}

}