用QueryTable向excel批量导入数据

前面写过两篇excel操作的文章,有朋友质疑大批量数据下的性能问题,这个时候最好用批量复制的方法,可以用excel的QueryTable来直接查询数据库,但是必须引用com组件。
用QueryTable向excel批量导入数据

参考代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Reflection;
  5. using Excel=Microsoft.Office.Interop.Excel;
  6. namespace ConsoleApplication18
  7. {
  8. class Program
  9. {
  10. static void Main( string []args)
  11. {
  12. ExportDataToExcel( "Provider=SQLOLEDB.1;sever=localhost;uid=sa;password=***;database=master;" ,
  13. "select*fromsysobjects" ,@ "c:\testOle.xls" , "sysobjects" );
  14. }
  15. ///<summary>
  16. ///直接导出数据到excel
  17. ///</summary>
  18. ///<paramname="connectionString">连接字符串</param>
  19. ///<paramname="sql">查询语句</param>
  20. ///<paramname="fileName">文件名</param>
  21. ///<paramname="sheetName">表名</param>
  22. static void ExportDataToExcel( string connectionString, string sql, string fileName, string sheetName)
  23. {
  24. Excel.Applicationapp= new Excel.ApplicationClass();
  25. Excel.Workbookwb=(Excel.WorkbookClass)app.Workbooks.Add(Missing.Value);
  26. Excel.Worksheetws=wb.Worksheets.Add(Missing.Value,Missing.Value,Missing.Value,Missing.Value) as Excel.Worksheet;
  27. ws.Name=sheetName;
  28. try
  29. {
  30. Excel.QueryTableqt=ws.QueryTables.Add( "OLEDB;" +connectionString,
  31. ws.get_Range( "A1" ,Missing.Value),sql);
  32. qt.Refresh( false ); //是否异步查询
  33. }
  34. catch (Exceptionex)
  35. {
  36. string str=ex.Message;
  37. }
  38. finally
  39. {
  40. wb.Saved= true ;
  41. wb.SaveCopyAs(fileName); //保存
  42. app.Quit(); //关闭进程
  43. }
  44. }
  45. }
  46. }

相关文章

通过excel可识别的xml结构直接生成xls文件

通过文件结构直接生成xls文件