DataImportHelper.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using Cksoft.Data;
  2. using DllEapEntity;
  3. using NPOI.HSSF.UserModel;
  4. using NPOI.SS.UserModel;
  5. using NPOI.XSSF.UserModel;
  6. using System;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using Cksoft.Unity;
  14. namespace DllEapCommon.NPOI
  15. {
  16. public class DataImportHelper
  17. {
  18. private IDatabase CurrDb = null;
  19. public DataImportHelper()
  20. {
  21. }
  22. public DataImportHelper(IDatabase db)
  23. {
  24. CurrDb = db;
  25. }
  26. public DataTable GetImportData(Stream fileStream, string fileExt, int sheetIndex, int headerRowIndex, ref string errorinfo)
  27. {
  28. IWorkbook workbook = null;
  29. if (fileExt.ToLower() == ".xls")
  30. {
  31. workbook = new HSSFWorkbook(fileStream);
  32. }
  33. else
  34. {
  35. workbook = new XSSFWorkbook(fileStream);
  36. }
  37. if (workbook == null)
  38. {
  39. errorinfo = "Excel内容为空";
  40. return null;
  41. }
  42. var sheet = workbook.GetSheetAt(sheetIndex);
  43. DataTable dt = new DataTable();
  44. var headerRow = sheet.GetRow(headerRowIndex);
  45. var headerCellCount = headerRow.LastCellNum;
  46. for (int i = headerRow.FirstCellNum; i < headerCellCount; i++)
  47. {
  48. var cell = headerRow.GetCell(i);
  49. if (cell == null || string.IsNullOrEmpty(cell.ToString()))
  50. {
  51. headerCellCount++;
  52. break;
  53. }
  54. DataColumn column = new DataColumn();
  55. column.ColumnName = cell.ToString();
  56. dt.Columns.Add(column);
  57. }
  58. var rowCount = sheet.LastRowNum;
  59. for (int j = sheet.FirstRowNum + 1; j < rowCount + 1; j++)
  60. {
  61. DataRow row = dt.NewRow();
  62. var bodyRow = sheet.GetRow(j);
  63. for (int k = 0; k < dt.Columns.Count; k++)
  64. {
  65. var cell = bodyRow.GetCell(k);
  66. var field = dt.Columns[k].ColumnName;
  67. if (cell == null)
  68. {
  69. row[field] = string.Empty;
  70. }
  71. else
  72. {
  73. if (cell.CellType == CellType.Formula)
  74. {
  75. cell.SetCellType(CellType.String);
  76. row[field] = cell.StringCellValue;
  77. }
  78. else
  79. {
  80. row[field] = cell.ToString();
  81. }
  82. }
  83. }
  84. dt.Rows.Add(row);
  85. }
  86. return dt;
  87. }
  88. /// <summary>
  89. /// 导入wafersource信息
  90. /// </summary>
  91. /// <param name="stream"></param>
  92. /// <param name="errorinfo"></param>
  93. /// <returns></returns>
  94. public int ImportWaferSource(Stream stream, string fileExt, ref string errorinfo)
  95. {
  96. var fields = new string[] { "Pkg Name", "Palcode", "Test Target", "Bom Component3",
  97. "Wfr source","Saw blade","Cut mode","Devc Desc","Die size","Pkg Code Desc","Recipe name",
  98. "M/C type" };
  99. var dataTable = this.GetImportData(stream, fileExt, 0, 0, ref errorinfo);
  100. if (dataTable == null)
  101. return -1;
  102. var columns = dataTable.Columns;
  103. foreach (var item in fields)
  104. {
  105. if (!columns.Contains(item))
  106. {
  107. errorinfo = $"Excel文件缺少[{item}]字段信息";
  108. return -1;
  109. }
  110. }
  111. var sql = "TRUNCATE TABLE onsemiprogram";
  112. if (CurrDb.ExecuteBySql(sql) < 0)
  113. {
  114. errorinfo = "清空原数据失败";
  115. return -1;
  116. }
  117. StringBuilder sb = new StringBuilder();
  118. sb.Append("INSERT INTO onsemiprogram (PkgName,PalCode,TestTarget,BomComponent3,WfrSource," +
  119. "SawBlade,CutMode,DevcDesc,DieSize,PkgCodeDesc,MCType,RecipeName) VALUES ");
  120. foreach (DataRow row in dataTable.Rows)
  121. {
  122. sb.Append($"('{row["Pkg Name"].ToString()}','{row["Palcode"].ToString()}'," +
  123. $"'{row["Test Target"].ToString()}','{row["Bom Component3"].ToString()}','{row["Wfr source"].ToString()}'," +
  124. $"'{row["Saw blade"].ToString()}','{row["Cut mode"].ToString()}',''," +
  125. $"'{row["Die size"].ToString()}','','{row["M/C type"].ToString()}'," +
  126. $"'{row["Recipe name"].ToString()}'),");
  127. }
  128. sb.Remove(sb.Length - 1, 1);
  129. sb.Append(";");
  130. if (CurrDb.ExecuteBySql(sb.ToString()) < 0)
  131. {
  132. errorinfo = "批量插入数据库失败";
  133. return -1;
  134. }
  135. //var list = new List<OnsemiProgram>();
  136. //foreach (DataRow row in dataTable.Rows)
  137. //{
  138. // var temp = new OnsemiProgram
  139. // {
  140. // PkgName = row["Pkg Name"].ToString(),
  141. // PalCode = row["Palcode"].ToString(),
  142. // TestTarget = row["Test Target"].ToString(),
  143. // BomComponent3 = row["Bom Component3"].ToString(),
  144. // WfrSource = row["Wfr source"].ToString(),
  145. // SawBlade = row["Saw blade"].ToString(),
  146. // CutMode = row["Cut mode"].ToString(),
  147. // DevcDesc = row["Devc Desc"].ToString(),
  148. // DieSize = row["Die size"].ToString(),
  149. // PkgCodeDesc = row["Pkg Code Desc"].ToString(),
  150. // MCType = row["M/C type"].ToString(),
  151. // RecipeName = row["Recipe name"].ToString()
  152. // };
  153. // list.Add(temp);
  154. //}
  155. //if (CurrDb.Insert<OnsemiProgram>(list) < 0)
  156. //{
  157. // errorinfo = "批量插入数据库失败";
  158. // return -1;
  159. //}
  160. return 1;
  161. }
  162. }
  163. }