CNAS取数仪器端升级
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

129 řádky
5.5KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.OleDb;
  7. namespace CNAS_DBSync
  8. {
  9. public static class ExcelHelper
  10. {
  11. private static log4net.ILog log= log4net.LogManager.GetLogger("ExcelHelper");
  12. /// <summary>
  13. /// 读取Excel第一个工作表的内容
  14. /// </summary>
  15. /// <param name="strPath"></param>
  16. /// <returns></returns>
  17. public static DataTable ReadExcelFirstSheetToTable(string strPath)
  18. {
  19. DataTable dt = new DataTable();
  20. try
  21. {
  22. //连接字符串
  23. string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
  24. //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本
  25. using (OleDbConnection conn = new OleDbConnection(connstring))
  26. {
  27. conn.Open();
  28. DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
  29. string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
  30. string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串
  31. //string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串
  32. OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
  33. DataSet set = new DataSet();
  34. ada.Fill(set);
  35. return set.Tables[0];
  36. }
  37. }
  38. catch(Exception ex)
  39. {
  40. //发生异常,写入日志
  41. log.Error(ex.Message);
  42. }
  43. return dt;
  44. }
  45. /// <summary>
  46. /// 通过表名读取Excel中数据
  47. /// </summary>
  48. /// <param name="strPath"></param>
  49. /// <param name="strTableName"></param>
  50. /// <returns></returns>
  51. public static DataTable ReadExcelByNameToTable(string strPath,string strTableName)
  52. {
  53. return null;
  54. }
  55. /// <summary>
  56. /// 读取Excel中所有表的表名
  57. /// </summary>
  58. /// <param name="strPath"></param>
  59. /// <returns></returns>
  60. public static Dictionary<string, DataTable> ReadExcelTableNameToTable(string strPath)
  61. {
  62. Dictionary<string, DataTable> dictTables = new Dictionary<string, DataTable>();
  63. try
  64. {
  65. //连接字符串
  66. string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
  67. //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本
  68. using (OleDbConnection conn = new OleDbConnection(connstring))
  69. {
  70. conn.Open();
  71. DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
  72. string sql = "";
  73. OleDbDataAdapter ada = null;
  74. foreach (DataRow dr in sheetsName.Rows)
  75. {
  76. string strTableName = dr[2].ToString();
  77. sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串
  78. ada = new OleDbDataAdapter(sql, connstring);
  79. DataSet set = new DataSet();
  80. ada.Fill(set);
  81. DataTable dtSheetData = set.Tables[0];
  82. DataTable dtNormal = new DataTable();
  83. DataRow drCurrent = dtSheetData.Rows[0];
  84. //创建标准表结构
  85. foreach (DataColumn dc in dtSheetData.Columns)
  86. {
  87. DataColumn dcReady = new DataColumn
  88. {
  89. DataType = dc.DataType,
  90. ColumnName = drCurrent[dc.ColumnName].ToString()
  91. };
  92. dtNormal.Columns.Add(dcReady);
  93. }
  94. //向列表中添加数据
  95. for (int i = 1; i < dtSheetData.Rows.Count; i++)
  96. {
  97. DataRow drNew = dtNormal.NewRow();
  98. for (int j = 0; j < dtSheetData.Columns.Count; j++)
  99. {
  100. drNew[j] = dtSheetData.Rows[i][j];
  101. }
  102. dtNormal.Rows.Add(drNew);
  103. }
  104. dictTables.Add(strTableName.Substring(0,strTableName.Length-1), dtNormal);
  105. }
  106. }
  107. }
  108. catch(Exception ex)
  109. {
  110. //发生异常,写入日志
  111. log.Error(ex.Message);
  112. }
  113. return dictTables;
  114. }
  115. }
  116. }