hytos / ID2.Manager / ID2.Manager.Common / Helpers / ID2Excel.cs @ c62dde30
이력 | 보기 | 이력해설 | 다운로드 (20.3 KB)
1 | 057ca09a | taeseongkim | using ID2.Manager.Data.Models; |
---|---|---|---|
2 | using System; |
||
3 | using System.Collections.Generic; |
||
4 | using System.Linq; |
||
5 | using System.Text; |
||
6 | using System.Threading.Tasks; |
||
7 | using GemBox.Spreadsheet; |
||
8 | using ID2.Manager.Controller.Controllers; |
||
9 | |||
10 | 8eca8767 | taeseongkim | |
11 | 057ca09a | taeseongkim | namespace ID2.Manager.Common.Helpers |
12 | { |
||
13 | public class ID2Excel :IDisposable |
||
14 | { |
||
15 | private List<UserInfo> UserlList = new List<UserInfo>(); |
||
16 | |||
17 | |||
18 | public void Dispose() |
||
19 | { |
||
20 | 8eca8767 | taeseongkim | try |
21 | { |
||
22 | } |
||
23 | catch (Exception) |
||
24 | { |
||
25 | throw; |
||
26 | } |
||
27 | finally |
||
28 | { |
||
29 | GC.Collect(2); |
||
30 | GC.Collect(2); |
||
31 | } |
||
32 | 057ca09a | taeseongkim | } |
33 | |||
34 | public ID2Excel() |
||
35 | { |
||
36 | UserlList = new UserController().GetAllUserInfo().ToList(); |
||
37 | } |
||
38 | |||
39 | private UserInfo GetUser(string user) |
||
40 | { |
||
41 | UserInfo userInfo = UserlList.Where(x => x.ID.Equals(user)).FirstOrDefault(); |
||
42 | if (userInfo != null) return userInfo; |
||
43 | |||
44 | userInfo = UserlList.Where(x => x.Name.Equals(user)).FirstOrDefault(); |
||
45 | if (userInfo != null) return userInfo; |
||
46 | |||
47 | return userInfo ?? new UserInfo(); |
||
48 | } |
||
49 | |||
50 | 8eca8767 | taeseongkim | private string GetColumnName(int column) |
51 | { |
||
52 | int dividend = column; |
||
53 | string columnName = string.Empty; |
||
54 | |||
55 | while (dividend > 0) |
||
56 | { |
||
57 | int modulo = (dividend - 1) % 26; |
||
58 | columnName = Convert.ToChar(65 + modulo) + columnName; |
||
59 | dividend = (dividend - modulo) / 26; |
||
60 | } |
||
61 | |||
62 | return columnName; |
||
63 | } |
||
64 | |||
65 | |||
66 | |||
67 | public ImportResult ExcelDataImport(List<ExcelData> ExcelData) |
||
68 | { |
||
69 | ImportResult result = new ImportResult(); |
||
70 | |||
71 | StringBuilder sbErrMsg = new StringBuilder(); |
||
72 | |||
73 | try |
||
74 | { |
||
75 | int rowCount = ExcelData.Max(x=>x.ROW_INDEX); |
||
76 | int columnCount = ExcelData.Max(x => x.COUMMN_INDEX); |
||
77 | int exRow = 9; |
||
78 | |||
79 | #region Excel 유효성검사 |
||
80 | |||
81 | //Excel 포멧체크 |
||
82 | if (rowCount < 10 || columnCount != 45) |
||
83 | { |
||
84 | result.Error = "Please, check the excel."; |
||
85 | return result; |
||
86 | } |
||
87 | |||
88 | #region 엑셀 필수값 체크(도면 : 이름,담당자, 난이도, Typical) |
||
89 | ExcelData.Where(col => col.ROW_INDEX > exRow) |
||
90 | .Where(col => col.COUMMN_INDEX > 5 && col.COUMMN_INDEX < 11 && col.ROW_INDEX > exRow && string.IsNullOrEmpty(col.VALUE)) |
||
91 | .ToList() |
||
92 | .ForEach(p => sbErrMsg.Append(", " + p.TopLeftCell)); |
||
93 | |||
94 | if (sbErrMsg.Length > 0) |
||
95 | { |
||
96 | string errMsg = sbErrMsg.ToString().Substring(2); |
||
97 | if (errMsg.Length > 100) |
||
98 | { |
||
99 | errMsg = $"{errMsg.Substring(0, 100)}..."; |
||
100 | } |
||
101 | |||
102 | result.Error = $"Please, check null value in excel.\n{errMsg}"; |
||
103 | return result; |
||
104 | } |
||
105 | #endregion |
||
106 | |||
107 | #region 엑셀 도명명 중복 값 체크 |
||
108 | ExcelData.Where(col => col.COUMMN_INDEX == 7 && col.ROW_INDEX > exRow) |
||
109 | .GroupBy(g => g.ROW_INDEX) |
||
110 | .Select(p => new |
||
111 | { |
||
112 | rowIndex = p.Key, |
||
113 | docNo = p.Select(x => x.VALUE.ToString()).FirstOrDefault() |
||
114 | }) |
||
115 | .GroupBy(g => g.docNo) |
||
116 | .Where(p => p.Count() > 1) |
||
117 | .Select(p => p.Select(x => (x.rowIndex + 1).ToString()) |
||
118 | .Aggregate((x, y) => x.ToString() + "," + y.ToString()) |
||
119 | .ToString()) |
||
120 | .ToList().ForEach(p => sbErrMsg.Append("\n" + p.ToString())); |
||
121 | |||
122 | if (sbErrMsg.Length > 0) |
||
123 | { |
||
124 | sbErrMsg.Insert(0, "\n중복 된 도면명 Excel row : "); |
||
125 | string errMsg = sbErrMsg.ToString(); |
||
126 | if (errMsg.Length > 100) |
||
127 | { |
||
128 | errMsg = $"{errMsg.Substring(0, 100)}..."; |
||
129 | } |
||
130 | |||
131 | result.Error = $"Please, check the duplicate value in excel.\n{errMsg}"; |
||
132 | return result; |
||
133 | } |
||
134 | #endregion |
||
135 | |||
136 | #endregion |
||
137 | |||
138 | result.documents = new List<Documents>(); |
||
139 | |||
140 | foreach (var row in ExcelData.Where(row => row.ROW_INDEX > exRow).GroupBy(x => x.ROW_INDEX)) |
||
141 | { |
||
142 | var document = new Documents(); |
||
143 | |||
144 | foreach (var cell in row) |
||
145 | { |
||
146 | var value = cell.VALUE.DefalutValue(); |
||
147 | |||
148 | switch (cell.COUMMN_INDEX) |
||
149 | { |
||
150 | case 6: |
||
151 | document.RefProjectCode = value; |
||
152 | break; |
||
153 | case 7: |
||
154 | document.DocumentNo = value; |
||
155 | break; |
||
156 | case 8: |
||
157 | document.PersonInCharge = this.GetUser(value).ID; |
||
158 | break; |
||
159 | case 9: |
||
160 | document.JobLevel = value; |
||
161 | break; |
||
162 | |||
163 | case 10: |
||
164 | document.IsTypical = value; |
||
165 | break; |
||
166 | case 11: |
||
167 | document.RevisonNo = value; |
||
168 | break; |
||
169 | case 12: |
||
170 | document.ToIsDiscussion = value; |
||
171 | break; |
||
172 | case 13: |
||
173 | document.ToRemarks = value; |
||
174 | break; |
||
175 | case 14: |
||
176 | document.ToCreator = this.GetUser(value).ID; |
||
177 | break; |
||
178 | case 17: |
||
179 | document.FrReviewStatus = value; |
||
180 | break; |
||
181 | case 18: |
||
182 | document.FrRemarks = value; |
||
183 | break; |
||
184 | case 19: |
||
185 | document.FrCreator = this.GetUser(value).ID; |
||
186 | break; |
||
187 | case 22: |
||
188 | document.IsID2Work = value; |
||
189 | break; |
||
190 | case 24: |
||
191 | document.ID2StartDate = string.IsNullOrEmpty(value) ? (DateTime?)null : Convert.ToDateTime(value); |
||
192 | break; |
||
193 | case 25: |
||
194 | document.ID2EndDate = string.IsNullOrEmpty(value) ? (DateTime?)null : Convert.ToDateTime(value); |
||
195 | break; |
||
196 | case 27: |
||
197 | document.ID2Status = value; |
||
198 | break; |
||
199 | case 28: |
||
200 | document.ID2Issues = value; |
||
201 | break; |
||
202 | case 30: |
||
203 | document.AVEVAConvertDate = string.IsNullOrEmpty(value) ? (DateTime?)null : Convert.ToDateTime(value); |
||
204 | break; |
||
205 | case 31: |
||
206 | document.AVEVAReviewDate = string.IsNullOrEmpty(value) ? (DateTime?)null : Convert.ToDateTime(value); |
||
207 | break; |
||
208 | case 32: |
||
209 | document.AVEVAStatus = value; |
||
210 | break; |
||
211 | case 33: |
||
212 | document.AVEVAIssues = value; |
||
213 | break; |
||
214 | case 36: |
||
215 | document.ProdReviewer = this.GetUser(value).ID; |
||
216 | break; |
||
217 | case 37: |
||
218 | document.ProdIsResult = value; |
||
219 | break; |
||
220 | case 38: |
||
221 | document.ProdRemarks = value; |
||
222 | break; |
||
223 | case 39: |
||
224 | document.ClientReviewer = this.GetUser(value).ID; |
||
225 | break; |
||
226 | case 40: |
||
227 | document.ClientIsResult = value; |
||
228 | break; |
||
229 | case 41: |
||
230 | document.ClientRemarks = value; |
||
231 | break; |
||
232 | case 42: |
||
233 | document.DTIsGateWay = value; |
||
234 | break; |
||
235 | case 43: |
||
236 | document.DTIsImport = value; |
||
237 | break; |
||
238 | case 44: |
||
239 | document.DTIsRegSystem = value; |
||
240 | break; |
||
241 | case 45: |
||
242 | document.DTRemarks = value; |
||
243 | break; |
||
244 | } |
||
245 | |||
246 | } |
||
247 | |||
248 | result.documents.Add(document); |
||
249 | } |
||
250 | } |
||
251 | catch (Exception) |
||
252 | { |
||
253 | throw; |
||
254 | } |
||
255 | |||
256 | return result; |
||
257 | } |
||
258 | |||
259 | |||
260 | 057ca09a | taeseongkim | public ImportResult GemboxImport(string fileName) |
261 | { |
||
262 | ImportResult result = new ImportResult(); |
||
263 | |||
264 | StringBuilder sbErrMsg = new StringBuilder(); |
||
265 | |||
266 | try |
||
267 | { |
||
268 | var exFile = ExcelFile.Load(fileName); |
||
269 | var ws = exFile.Worksheets[0]; |
||
270 | |||
271 | int rowCount = ws.Rows.Count; |
||
272 | int columnCount = ws.CalculateMaxUsedColumns(); |
||
273 | int exRow = 8; |
||
274 | |||
275 | #region Excel 유효성검사 |
||
276 | |||
277 | //Excel 포멧체크 |
||
278 | if (rowCount < 10 || columnCount != 45) |
||
279 | { |
||
280 | result.Error = "Please, check the excel."; |
||
281 | return result; |
||
282 | } |
||
283 | |||
284 | #region 엑셀 필수값 체크(도면 : 이름,담당자, 난이도, Typical) |
||
285 | ws.Rows.SelectMany(row => row.AllocatedCells) |
||
286 | .Where(col => col.Column.Index > 5 && col.Column.Index < 10 && col.Row.Index > exRow && col.Value == null) |
||
287 | .ToList() |
||
288 | .ForEach(p => sbErrMsg.Append(", " + p.Column.Name + p.Row.Name)); |
||
289 | |||
290 | if (sbErrMsg.Length > 0) |
||
291 | { |
||
292 | string errMsg = sbErrMsg.ToString().Substring(2); |
||
293 | if (errMsg.Length > 100) |
||
294 | { |
||
295 | errMsg = $"{errMsg.Substring(0, 100)}..."; |
||
296 | } |
||
297 | |||
298 | result.Error = $"Please, check null value in excel.\n{errMsg}"; |
||
299 | return result; |
||
300 | } |
||
301 | #endregion |
||
302 | |||
303 | #region 엑셀 도명명 중복 값 체크 |
||
304 | ws.Rows.SelectMany(row => row.AllocatedCells) |
||
305 | .Where(col => col.Column.Index == 6 && col.Row.Index > exRow) |
||
306 | .GroupBy(g => g.Row.Index) |
||
307 | .Select(p => new |
||
308 | { |
||
309 | rowIndex = p.Key, |
||
310 | docNo = p.Select(x => x.Value.ToString()).FirstOrDefault() |
||
311 | }) |
||
312 | .GroupBy(g => g.docNo) |
||
313 | .Where(p => p.Count() > 1) |
||
314 | .Select(p => p.Select(x => (x.rowIndex + 1).ToString()) |
||
315 | .Aggregate((x, y) => x.ToString() + "," + y.ToString()) |
||
316 | .ToString()) |
||
317 | .ToList().ForEach(p => sbErrMsg.Append("\n" + p.ToString())); |
||
318 | if (sbErrMsg.Length > 0) |
||
319 | { |
||
320 | sbErrMsg.Insert(0, "\n중복 된 도면명 Excel row : "); |
||
321 | string errMsg = sbErrMsg.ToString(); |
||
322 | if (errMsg.Length > 100) |
||
323 | { |
||
324 | errMsg = $"{errMsg.Substring(0, 100)}..."; |
||
325 | } |
||
326 | |||
327 | result.Error = $"Please, check the duplicate value in excel.\n{errMsg}"; |
||
328 | return result; |
||
329 | } |
||
330 | #endregion |
||
331 | |||
332 | #endregion |
||
333 | |||
334 | result.documents = new List<Documents>(); |
||
335 | |||
336 | ws.Rows.Where(row => row.Index > exRow) |
||
337 | .ToList() |
||
338 | .ForEach(p => |
||
339 | { |
||
340 | try |
||
341 | { |
||
342 | result.documents.Add(new Documents() |
||
343 | { |
||
344 | //UID = string.Empty, |
||
345 | //Type = this.radTextBoxInsulationType.Text, |
||
346 | //TempFrom = ws.Rows[exRow].Cells[p.Column.Index].IsNullOrEmpty() ? 0 : Convert.ToSingle(ws.Rows[exRow].Cells[p.Column.Index].Value), |
||
347 | //TempTo = ws.Rows[exRow + 2].Cells[p.Column.Index].IsNullOrEmpty() ? 0 : Convert.ToSingle(ws.Rows[exRow + 2].Cells[p.Column.Index].Value), |
||
348 | //NPS = ws.Rows[p.Row.Index].Cells[0].IsNullOrEmpty() ? 0 : Convert.ToSingle(ws.Rows[p.Row.Index].Cells[0].Value), |
||
349 | //Thickness = p.IsNullOrEmpty() ? 0 : Convert.ToSingle(p.Value) |
||
350 | |||
351 | RefProjectCode = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
352 | DocumentNo = ws.Rows[p.Index].Cells[6].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[6].Value.ToString(), |
||
353 | PersonInCharge = ws.Rows[p.Index].Cells[7].IsNullOrEmpty() ? string.Empty : this.GetUser(ws.Rows[p.Index].Cells[7].Value.ToString()).ID, |
||
354 | JobLevel = ws.Rows[p.Index].Cells[8].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[8].Value.ToString(), |
||
355 | IsTypical = ws.Rows[p.Index].Cells[9].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[9].Value.ToString(), |
||
356 | RevisonNo = ws.Rows[p.Index].Cells[10].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[10].Value.ToString(), |
||
357 | ToIsDiscussion = ws.Rows[p.Index].Cells[11].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[11].Value.ToString(), |
||
358 | ToRemarks = ws.Rows[p.Index].Cells[12].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[12].Value.ToString(), |
||
359 | ToCreator = ws.Rows[p.Index].Cells[13].IsNullOrEmpty() ? string.Empty : this.GetUser(ws.Rows[p.Index].Cells[13].Value.ToString()).ID, |
||
360 | //ToCapture = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
361 | //ToIsMarkup = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
362 | FrReviewStatus = ws.Rows[p.Index].Cells[16].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[16].Value.ToString(), |
||
363 | FrRemarks = ws.Rows[p.Index].Cells[17].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[17].Value.ToString(), |
||
364 | FrCreator = ws.Rows[p.Index].Cells[18].IsNullOrEmpty() ? string.Empty : this.GetUser(ws.Rows[p.Index].Cells[18].Value.ToString()).ID, |
||
365 | //FrCapture = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
366 | //FrIsMarkup = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
367 | IsID2Work = ws.Rows[p.Index].Cells[21].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[21].Value.ToString(), |
||
368 | //ID2Connection = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
369 | ID2StartDate = ws.Rows[p.Index].Cells[23].IsNullOrEmpty() ? (DateTime?)null : Convert.ToDateTime(ws.Rows[p.Index].Cells[23].Value?.ToString()), |
||
370 | ID2EndDate = ws.Rows[p.Index].Cells[24].IsNullOrEmpty() ? (DateTime?)null : Convert.ToDateTime(ws.Rows[p.Index].Cells[24].Value?.ToString()), |
||
371 | //ID2JobTime = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
372 | ID2Status = ws.Rows[p.Index].Cells[26].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[26].Value.ToString(), |
||
373 | ID2Issues = ws.Rows[p.Index].Cells[27].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[27].Value.ToString(), |
||
374 | //AVEVAConnection = ws.Rows[p.Index].Cells[5].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[5].Value.ToString(), |
||
375 | AVEVAConvertDate = ws.Rows[p.Index].Cells[29].IsNullOrEmpty() ? (DateTime?)null : Convert.ToDateTime(ws.Rows[p.Index].Cells[29].Value.ToString()), |
||
376 | AVEVAReviewDate = ws.Rows[p.Index].Cells[30].IsNullOrEmpty() ? (DateTime?)null : Convert.ToDateTime(ws.Rows[p.Index].Cells[30].Value.ToString()), |
||
377 | AVEVAStatus = ws.Rows[p.Index].Cells[31].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[31].Value.ToString(), |
||
378 | AVEVAIssues = ws.Rows[p.Index].Cells[32].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[32].Value.ToString(), |
||
379 | ProdReviewer = ws.Rows[p.Index].Cells[35].IsNullOrEmpty() ? string.Empty : this.GetUser(ws.Rows[p.Index].Cells[35].Value.ToString()).ID, |
||
380 | ProdIsResult = ws.Rows[p.Index].Cells[36].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[36].Value.ToString(), |
||
381 | ProdRemarks = ws.Rows[p.Index].Cells[37].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[37].Value.ToString(), |
||
382 | ClientReviewer = ws.Rows[p.Index].Cells[38].IsNullOrEmpty() ? string.Empty : this.GetUser(ws.Rows[p.Index].Cells[38].Value.ToString()).ID, |
||
383 | ClientIsResult = ws.Rows[p.Index].Cells[39].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[39].Value.ToString(), |
||
384 | ClientRemarks = ws.Rows[p.Index].Cells[40].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[40].Value.ToString(), |
||
385 | DTIsGateWay = ws.Rows[p.Index].Cells[41].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[41].Value.ToString(), |
||
386 | DTIsImport = ws.Rows[p.Index].Cells[42].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[42].Value.ToString(), |
||
387 | DTIsRegSystem = ws.Rows[p.Index].Cells[43].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[43].Value.ToString(), |
||
388 | DTRemarks = ws.Rows[p.Index].Cells[44].IsNullOrEmpty() ? string.Empty : ws.Rows[p.Index].Cells[44].Value.ToString() |
||
389 | }); |
||
390 | } |
||
391 | catch (Exception ex) |
||
392 | { |
||
393 | throw new Exception($"Excel Import Row :{p.Index} Error.",ex); |
||
394 | } |
||
395 | }); |
||
396 | |||
397 | } |
||
398 | catch (Exception) |
||
399 | { |
||
400 | throw; |
||
401 | } |
||
402 | |||
403 | return result; |
||
404 | } |
||
405 | } |
||
406 | } |