ExcelHelp.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Data.SqlClient;
  7. using System.Data;
  8. using System.Data.OleDb;
  9. using System.IO;
  10. using OfficeOpenXml;
  11. using OfficeOpenXml.Style;
  12. using Ant.Data;
  13. namespace Ant.Service.Utilities
  14. {
  15. //range.NumberFormatLocal = "@";     //设置单元格格式为文本 
  16. //range = (Range)worksheet.get_Range("A1", "E1");     //获取Excel多个单元格区域:本例做为Excel表头
  17. //range.Merge(0);     //单元格合并动作
  18. //worksheet.Cells[1, 1] = "Excel单元格赋值";     //Excel单元格赋值
  19. //range.Font.Size = 15;     //设置字体大小
  20. //range.Font.Underline=true;     //设置字体是否有下划线
  21. //range.Font.Name="黑体";     设置字体的种类
  22. //range.HorizontalAlignment=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式
  23. //range.ColumnWidth=15;     //设置单元格的宽度
  24. //range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色
  25. //range.Borders.LineStyle=1;     //设置单元格边框的粗细
  26. //range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //给单元格加边框
  27. //range.EntireColumn.AutoFit();     //自动调整列宽
  28. //Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式
  29. //Range.VerticalAlignment= xlCenter     //文本垂直居中方式
  30. //Range.WrapText=true;     //文本自动换行
  31. //Range.Interior.ColorIndex=39;     //填充颜色为淡紫色
  32. //Range.Font.Color=clBlue;     //字体颜色
  33. //xlsApp.DisplayAlerts=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存
  34. // workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字
  35. //http://www.360doc.com/content/07/0824/10/12027_691547.shtml
  36. class ExcelHelp
  37. {
  38. /// <summary>
  39. /// 根据excel路径和sheet名称,返回excel的DataTable
  40. /// </summary>
  41. public static DataTable GetExcelDataTable(string path, string tname)
  42. {
  43. /*Office 2007*/
  44. string ace = "Microsoft.ACE.OLEDB.12.0";
  45. /*Office 97 - 2003*/
  46. string jet = "Microsoft.Jet.OLEDB.4.0";
  47. string xl2007 = "Excel 12.0 Xml";
  48. string xl2003 = "Excel 8.0";
  49. string imex = "IMEX=1";
  50. /* csv */
  51. string text = "text";
  52. string fmt = "FMT=Delimited";
  53. string hdr = "Yes";
  54. string conn = "Provider={0};Data Source={1};Extended Properties=\"{2};HDR={3};{4}\";";
  55. string select = string.Format("SELECT * FROM [{0}$]", tname);
  56. //string select = sql;
  57. string ext = Path.GetExtension(path);
  58. OleDbDataAdapter oda;
  59. DataTable dt = new DataTable("data");
  60. switch (ext.ToLower())
  61. {
  62. case ".xlsx":
  63. conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex);
  64. break;
  65. case ".xls":
  66. conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex);
  67. break;
  68. case ".csv":
  69. conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt);
  70. //sheet = Path.GetFileName(path);
  71. break;
  72. default:
  73. throw new Exception("File Not Supported!");
  74. }
  75. OleDbConnection con = new OleDbConnection(conn);
  76. con.Open();
  77. //select = string.Format(select, sql);
  78. oda = new OleDbDataAdapter(select, con);
  79. oda.Fill(dt);
  80. con.Close();
  81. return dt;
  82. }
  83. /// <summary>
  84. /// 保存excel文件,覆盖相同文件名的文件
  85. /// </summary>
  86. public static bool SaveExcel(string SheetName, DataTable dt, ExcelPackage package)
  87. {
  88. try
  89. {
  90. ExcelWorksheet ws = package.Workbook.Worksheets.Add(SheetName);
  91. ws.Cells["A1"].LoadFromDataTable(dt, true);
  92. return true;
  93. }
  94. catch (Exception ex)
  95. {
  96. throw ex;
  97. }
  98. }
  99. /// <summary>
  100. /// 多个表格导出到一个excel工作簿
  101. /// </summary>
  102. public static void export(IList<string> SheetNames, string filename, DataAccess db, IList<string> sqls)
  103. {
  104. DataTable dt = new DataTable(); string strsql = "";
  105. FileInfo newFile = new FileInfo(filename);
  106. if (newFile.Exists)
  107. {
  108. newFile.Delete();
  109. newFile = new FileInfo(filename);
  110. }
  111. using (ExcelPackage package = new ExcelPackage(newFile))
  112. {
  113. for (int i = 0; i < sqls.Count; i++)
  114. {
  115. dt = db.ExecuteDataTable(sqls[i]);
  116. SaveExcel(SheetNames[i], dt, package);
  117. }
  118. package.Save();
  119. }
  120. }
  121. /// <summary>
  122. /// 单个表格导出到一个excel工作簿
  123. /// </summary>
  124. public static void export(string SheetName, string filename, DataAccess db, string sql)
  125. {
  126. DataTable dt = new DataTable();
  127. FileInfo newFile = new FileInfo(filename);
  128. if (newFile.Exists)
  129. {
  130. newFile.Delete();
  131. newFile = new FileInfo(filename);
  132. }
  133. using (ExcelPackage package = new ExcelPackage(newFile))
  134. {
  135. dt = db.ExecuteDataTable(sql);
  136. SaveExcel(SheetName, dt, package);
  137. package.Save();
  138. }
  139. }
  140. /// <summary>
  141. /// 单个表导出到多个excel工作簿(分页)
  142. /// </summary>
  143. public static void export(string SheetName, string filename, DataAccess db, string sql, int num, int pagesize)
  144. {
  145. DataTable dt = new DataTable();
  146. FileInfo newFile = new FileInfo(filename);
  147. int numtb = num / pagesize + 1;
  148. for (int i = 1; i <= numtb; i++)
  149. {
  150. string s = filename.Substring(0, filename.LastIndexOf("."));
  151. StringBuilder newfileName = new StringBuilder(s);
  152. newfileName.Append(i + ".xlsx");
  153. newFile = new FileInfo(newfileName.ToString());
  154. if (newFile.Exists)
  155. {
  156. newFile.Delete();
  157. newFile = new FileInfo(newfileName.ToString());
  158. }
  159. using (ExcelPackage package = new ExcelPackage(newFile))
  160. {
  161. dt = db.ExecuteDataTable(sql, pagesize * (i - 1), pagesize);
  162. SaveExcel(SheetName, dt, package);
  163. package.Save();
  164. }
  165. }
  166. }
  167. }
  168. }