diff --git a/src/EasyFrameWork/DataTransfer/ExcelReader.cs b/src/EasyFrameWork/DataTransfer/ExcelReader.cs index fc14fe442..31dbfb963 100644 --- a/src/EasyFrameWork/DataTransfer/ExcelReader.cs +++ b/src/EasyFrameWork/DataTransfer/ExcelReader.cs @@ -22,8 +22,18 @@ namespace Easy.DataTransfer public ExcelReader(Stream stream) { _excelStream = stream; + ErrorMessages = new List(); + Converts = new List(); + } + public ExcelReader(Stream stream, List converts) + { + _excelStream = stream; + ErrorMessages = new List(); + Converts = converts; } public Type EntryType { get { return typeof(T); } } + public List Converts { get; set; } + public List ErrorMessages { get; set; } public virtual T CellConvert(T item, string header, Cell cell) { Type type = typeof(T); @@ -52,7 +62,17 @@ public virtual T CellConvert(T item, string header, Cell cell) var property = _entryProperites.FirstOrDefault(m => m.Name == propertyName); if (property != null && value != null) { - property.SetValue(item, ClassAction.ValueConvert(property, value)); + var convert = Converts.FirstOrDefault(m => m.SupportType == property.PropertyType); + object convertedValue = null; + if (convert != null) + { + convertedValue = convert.Convert(value); + } + else + { + convertedValue = ClassAction.ValueConvert(property, value); + } + property.SetValue(item, convertedValue); } return item; @@ -87,11 +107,15 @@ public IEnumerable ToList() _viewConfigure = ServiceLocator.GetViewConfigure(EntryType); _entryProperites = EntryType.GetProperties(); SpreadsheetDocument doc = null; + List results = new List(); try { doc = SpreadsheetDocument.Open(_excelStream, false); } - catch { } + catch + { + ErrorMessages.Add("上传的文件有误,仅支持office 2007(.xlsx)以后的格式"); + } if (doc != null) { using (doc) @@ -117,20 +141,32 @@ public IEnumerable ToList() var cellItem = cell as Cell; header.Add(ReadCellValue(cellItem)); } + for (int i = 1; i < sheetData.ChildElements.Count; i++) { T item = new T(); - for (int j = 0; j < sheetData.ChildElements[i].ChildElements.Count; j++) + try { - CellConvert(item, header[j], sheetData.ChildElements[i].ChildElements[j] as Cell); + for (int j = 0; j < sheetData.ChildElements[i].ChildElements.Count; j++) + { + if (j < header.Count) + { + CellConvert(item, header[j], sheetData.ChildElements[i].ChildElements[j] as Cell); + } + } + } + catch (Exception ex) + { + ErrorMessages.Add(ex.Message); + break; } - yield return item; } } + } } - } + } } diff --git a/src/EasyFrameWork/DataTransfer/IValueTypeConvert.cs b/src/EasyFrameWork/DataTransfer/IValueTypeConvert.cs new file mode 100644 index 000000000..d03abefd3 --- /dev/null +++ b/src/EasyFrameWork/DataTransfer/IValueTypeConvert.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Easy.DataTransfer +{ + public interface IValueTypeConvert + { + Type SupportType { get; } + object Convert(string value); + } +}