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
相关文章推荐
- C#遍历DataSet中数据的几种方法总结
- C# winform窗体实现文件拖拽打开的功能
- C#TreeView控件与XML相关操作
- C# Winform项目中多线程环境下, 如何跨线程对Window窗体控件进行安全访问?
- 关于C#在删除文件时权限问题
- c# WebClient Get Post 方法
- c# DES加密解密
- c# WebClient文件下载
- C# 进程(应用程序)间通信
- C# 构建XML(简单示例)
- c# 获取Graphic方法
- C# 保留2位小数
- C# 窗体常用API函数 应用程序窗体查找
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#获取 URL参数
- C#委托与事件的简单使用
- C#定时器和事件
- vs2010 创建和C#使用动态链接库(dll)
- C#清理非托管对象实例分析
- 【C#进阶系列】01 CLR的执行模型——一个Hello World的故事