From ef52fd6fd07508883dce4eb002acda59f0169e59 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 23 四月 2026 10:19:33 +0800
Subject: [PATCH] 优化;
---
HMI.Util/ExcelHelper.cs | 189 +++++++++++++++++++++++++++++++---------------
1 files changed, 127 insertions(+), 62 deletions(-)
diff --git a/HMI.Util/ExcelHelper.cs b/HMI.Util/ExcelHelper.cs
index b2ee156..0708a5c 100644
--- a/HMI.Util/ExcelHelper.cs
+++ b/HMI.Util/ExcelHelper.cs
@@ -1,10 +1,12 @@
锘縰sing HMI.Core;
using HMI.Core.Util;
using NPOI.HSSF.UserModel;
+using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
+using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
@@ -43,8 +45,56 @@
IRow rowTemp = SheetOne.CreateRow(i + 1);
for (int j = 0; j < properties.Count; j++)
{
- var value = properties[j].GetValue(datas[i]);
- rowTemp.CreateCell(j).SetCellValue(value.ToString());
+ var attr = attrs[j];
+ var value = attr.IgnoreExport ? "" : properties[j].GetValue(datas[i]);
+ rowTemp.CreateCell(j).SetCellValue(value?.ToString());
+ }
+ }
+
+ using (FileStream fs = new FileStream(targetPath, FileMode.OpenOrCreate))
+ {
+ workbook.Write(fs);
+ }
+ }
+
+ public static void ExportExcel<T>(string targetPath, DataTable table)
+ {
+ Type type = typeof(T);
+ var properties = PropertyHelper.GetAtterProperty<T, ExcelColumnAttribute>(out var attrs);
+ if (properties == null || properties.Count <= 0)
+ {
+ throw new Exception("No Attribute");
+ }
+ IWorkbook workbook = null;
+ if (targetPath.EndsWith(".xlsx"))
+ {
+ workbook = new XSSFWorkbook();
+ }
+ else if (targetPath.EndsWith(".xls"))
+ {
+ workbook = new HSSFWorkbook();
+ }
+ workbook.CreateSheet("sheet1");////鏂板缓涓�涓伐浣滆〃
+ ISheet SheetOne = workbook.GetSheet("Sheet1");
+ IRow row1 = SheetOne.CreateRow(0);
+ for (int i = 0; i < properties.Count; i++)
+ {
+ row1.CreateCell(i).SetCellValue(LangUtil.Get((attrs[i]).Name));
+ }
+
+ for (int i = 0; i < table.Rows.Count; i++)
+ {
+ IRow rowTemp = SheetOne.CreateRow(i + 1);
+ for (int j = 0; j < properties.Count; j++)
+ {
+ var attr = attrs[j];
+ object obj = attr.IgnoreExport ? "" : table.Rows[i][properties[j].Name];
+ string value = obj?.ToString();
+ if (obj is DateTime time)
+ {
+ value = time.ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ rowTemp.CreateCell(j).SetCellValue(value);
}
}
@@ -71,71 +121,86 @@
using (FileStream fileStream1 = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = null;
- if (sourcePath.EndsWith(".xlsx"))
- {
- workbook = new XSSFWorkbook(fileStream1);
- }
- else if (sourcePath.EndsWith(".xls"))
+ if (sourcePath.EndsWith(".xls"))
{
workbook = new HSSFWorkbook(fileStream1);
}
-
- ISheet sheet = workbook.GetSheetAt(0);
- IRow titleRow = sheet.GetRow(0);
-
- List<T> result = new List<T>();
- IRow row;
- for (int i = 1; i < (sheet.LastRowNum + 1); i++)
+ else
{
- row = sheet.GetRow(i);
- if (row != null)
- {
- T obj = (T)Activator.CreateInstance(type);
- bool isEmpty = true;
- for (int j = 0; j < row.Count(); j++)
- {
- string title = titleRow.GetCell(j).StringCellValue;
- if (dict.ContainsKey(title))
- {
- CellType ct = row.GetCell(j).CellType;
- object value = null;
- if (ct == CellType.String)
- value = row.GetCell(j).StringCellValue;
- else if (ct == CellType.Numeric)
- value = row.GetCell(j).NumericCellValue;
- else if (ct == CellType.Boolean)
- value = row.GetCell(j).BooleanCellValue;
-
- var prop = dict[title];
- if (prop.PropertyType == typeof(string))
- {
- value = Convert.ToString(value);
- }
- else if (prop.PropertyType == typeof(double) || prop.PropertyType == typeof(double?))
- {
- value = Convert.ToDouble(value);
- }
- else if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(int?))
- {
- value = Convert.ToInt16(value);
- }
- else if (prop.PropertyType == typeof(bool) || prop.PropertyType == typeof(bool?))
- {
- value = Convert.ToBoolean(value);
- }
- else if (prop.PropertyType.IsEnum)
- {
- value = Enum.Parse(prop.PropertyType, value.ToString());
- }
- prop.SetValue(obj, value);
- isEmpty = false;
- }
- }
- if (!isEmpty) result.Add(obj);
- }
+ workbook = new XSSFWorkbook(fileStream1);
}
- workbook.Close();
- return result;
+ int currentRow = 1;
+ try
+ {
+ ISheet sheet = workbook.GetSheetAt(0);
+ IRow titleRow = sheet.GetRow(0);
+
+ List<T> result = new List<T>();
+ IRow row;
+ for (currentRow = 1; currentRow < (sheet.LastRowNum + 1); currentRow++)
+ {
+ row = sheet.GetRow(currentRow);
+ if (row != null)
+ {
+ T obj = (T)Activator.CreateInstance(type);
+ bool isEmpty = true;
+ for (int j = 0; j < row.Count(); j++)
+ {
+ string title = titleRow.Cells[j].StringCellValue;
+ if (dict.ContainsKey(title))
+ {
+ var cell = row.GetCell(j);
+ if (cell == null || cell.CellType == CellType.Blank)
+ continue;
+ CellType ct = cell.CellType;
+ object value = null;
+ if (ct == CellType.String)
+ value = row.GetCell(j).StringCellValue;
+ else if (ct == CellType.Numeric)
+ value = row.GetCell(j).NumericCellValue;
+ else if (ct == CellType.Boolean)
+ value = row.GetCell(j).BooleanCellValue;
+ else
+ value = row.GetCell(j).StringCellValue;
+
+ var prop = dict[title];
+ if (prop.PropertyType == typeof(string))
+ {
+ value = Convert.ToString(value);
+ }
+ else if (prop.PropertyType == typeof(double) || prop.PropertyType == typeof(double?))
+ {
+ value = Convert.ToDouble(value);
+ }
+ else if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(int?))
+ {
+ value = Convert.ToInt16(value);
+ }
+ else if (prop.PropertyType == typeof(bool) || prop.PropertyType == typeof(bool?))
+ {
+ value = Convert.ToBoolean(value);
+ }
+ else if (prop.PropertyType.IsEnum)
+ {
+ value = Enum.Parse(prop.PropertyType, value.ToString());
+ }
+ prop.SetValue(obj, value);
+ isEmpty = false;
+ }
+ }
+ if (!isEmpty) result.Add(obj);
+ }
+ }
+ return result;
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"绗瑊currentRow}琛岃В鏋愰敊璇細{ex.Message}", ex);
+ }
+ finally
+ {
+ workbook.Close();
+ }
}
}
}
--
Gitblit v1.9.1