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

C# winform实现异步导出功能

2016-02-29 15:51 387 查看
#region 数据导出-异步
string strName = string.Empty;
private void btnExprot_Click(object sender, EventArgs e)
{
if (dt == null)
{
MessageBox.Show("没有可导出的数据");
}
else
{
try
{
if (dt.Rows.Count < 1)
{
if (MessageBox.Show("确定要输出当前画面数据?", "消息内容", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
dt = (DataTable)gvXML.DataSource;
}
else
{
return;
}
}
SaveFileDialog save = new SaveFileDialog();
save.Filter = "(*.xls)|*.xls";
save.FilterIndex = 0;
if (save.ShowDialog() == DialogResult.OK)
{
save.RestoreDirectory = true;
save.Title = cbColumn.SelectedItem as string + "表的重复数据";
strName = save.FileName;
Query_Export();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}

private AsyncCallback Async_Export = null;
private delegate DataTable DataTableExport(DataTable dst);

public void Query_Export()
{
Async_Export = new AsyncCallback(CallBack);
DataTableExport dtExport = new DataTableExport(GetDataTable);
dtExport.BeginInvoke((DataTable)this.gvXML.DataSource, Async_Export, dtExport);
}

private DataTable GetDataTable(DataTable dst)
{
return (DataTable)this.gvXML.DataSource;
}

public void CallBack(IAsyncResult result)
{
DataTableExport dtBindExport = (DataTableExport)result.AsyncState;
DataTable dtExport = dtBindExport.EndInvoke(result);
Missing miss = Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
if (excel == null)
{
MessageBox.Show("无法创建Excel对象,可能您的计算机未安装Excel");
}
else
{
#region 导出
Microsoft.Office.Interop.Excel.Workbooks books = excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook book = books.Add(miss);
Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
//sheet.Name = cbColumn.SelectedItem as string;
int collndex = 0; int rowIndex = 1;
foreach (DataColumn col in dtExport.Columns)
{
collndex++;
excel.Cells[1, collndex] = col.ColumnName;
}
foreach (DataRow row in dtExport.Rows)
{
rowIndex++;
collndex = 0;
foreach (DataColumn col in dtExport.Columns)
{
collndex++;
excel.Cells[rowIndex, collndex] = row[col.ColumnName].ToString();
excel.get_Range((object)excel.Cells[1, collndex], (object)excel.Cells[1, collndex]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
excel.get_Range((object)excel.Cells[rowIndex, collndex], (object)excel.Cells[rowIndex, collndex]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
}
}
sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
book.Close(true, miss, miss);
books.Close();
excel.Quit();
#endregion
MessageBox.Show("导出成功!");
}
}
#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: