123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using ExcelDataReader;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Http.Internal;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- namespace ZR.Common
- {
- public class ExcelHelper<T> where T : new()
- {
- /// <summary>
- /// 导入数据
- /// </summary>
- /// <param name="stream"></param>
- /// <returns></returns>
- //public static IEnumerable<T> ImportData(Stream stream)
- //{
- // using ExcelPackage package = new(stream);
- // //ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
- // ExcelWorksheet worksheet = package.Workbook.Worksheets[0];//读取第1个sheet
- // //获取表格的列数和行数
- // int colStart = worksheet.Dimension.Start.Column;
- // int colEnd = worksheet.Dimension.End.Column;
- // int rowStart = worksheet.Dimension.Start.Row;
- // int rowEnd = worksheet.Dimension.End.Row;
- // //int rowCount = worksheet.Dimension.Rows;
- // //int ColCount = worksheet.Dimension.Columns;
- // List<T> resultList = new();
- // List<PropertyInfo> propertyInfos = new();// new(typeof(T).GetProperties());
- // Dictionary<string, int> dictHeader = new();
- // for (int i = colStart; i < colEnd; i++)
- // {
- // var name = worksheet.Cells[rowStart, i].Value?.ToString();
- // dictHeader[name] = i;
- // PropertyInfo propertyInfo = MapPropertyInfo(name);
- // if (propertyInfo != null)
- // {
- // propertyInfos.Add(propertyInfo);
- // }
- // }
- // for (int row = rowStart + 1; row <= rowEnd; row++)
- // {
- // T result = new();
- // foreach (PropertyInfo p in propertyInfos)
- // {
- // try
- // {
- // ExcelRange cell = worksheet.Cells[row, dictHeader[p.Name]];
- // if (cell.Value == null)
- // {
- // continue;
- // }
- // switch (p.PropertyType.Name.ToLower())
- // {
- // case "string":
- // p.SetValue(result, cell.GetValue<string>());
- // break;
- // case "int16":
- // p.SetValue(result, cell.GetValue<short>()); break;
- // case "int32":
- // p.SetValue(result, cell.GetValue<int>()); break;
- // case "int64":
- // p.SetValue(result, cell.GetValue<long>()); break;
- // case "decimal":
- // p.SetValue(result, cell.GetValue<decimal>());
- // break;
- // case "double":
- // p.SetValue(result, cell.GetValue<double>()); break;
- // case "datetime":
- // p.SetValue(result, cell.GetValue<DateTime>()); break;
- // case "boolean":
- // p.SetValue(result, cell.GetValue<bool>()); break;
- // case "char":
- // p.SetValue(result, cell.GetValue<string>()); break;
- // default:
- // break;
- // }
- // }
- // catch (KeyNotFoundException ex)
- // {
- // Console.WriteLine("未找到该列将继续循环," + ex.Message);
- // continue;
- // }
- // }
- // resultList.Add(result);
- // }
- // return resultList;
- //}
- /// <summary>
- /// 查找Excel列名对应的实体属性
- /// </summary>
- /// <param name="columnName"></param>
- /// <returns></returns>
- public static PropertyInfo MapPropertyInfo(string columnName)
- {
- PropertyInfo[] propertyList = GetProperties(typeof(T));
- PropertyInfo propertyInfo = propertyList.Where(p => p.Name == columnName).FirstOrDefault();
- if (propertyInfo != null)
- {
- return propertyInfo;
- }
- else
- {
- foreach (PropertyInfo tempPropertyInfo in propertyList)
- {
- System.ComponentModel.DescriptionAttribute[] attributes = (System.ComponentModel.DescriptionAttribute[])tempPropertyInfo.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
- if (attributes.Length > 0)
- {
- if (attributes[0].Description == columnName)
- {
- return tempPropertyInfo;
- }
- }
- }
- }
- return null;
- }
- /// <summary>
- /// 得到类里面的属性集合
- /// </summary>
- /// <param name="type"></param>
- /// <param name="columns"></param>
- /// <returns></returns>
- public static PropertyInfo[] GetProperties(Type type, string[] columns = null)
- {
- PropertyInfo[] properties = null;
- properties = type.GetProperties();
- if (columns != null && columns.Length > 0)
- {
- // 按columns顺序返回属性
- var columnPropertyList = new List<PropertyInfo>();
- foreach (var column in columns)
- {
- var columnProperty = properties.Where(p => p.Name == column).FirstOrDefault();
- if (columnProperty != null)
- {
- columnPropertyList.Add(columnProperty);
- }
- }
- return columnPropertyList.ToArray();
- }
- else
- {
- return properties;
- }
- }
- }
- }
|