private object ReadField(XlsFieldDescriptor fd) { var rowCells = rowEnumerator.Current.Cells; var cell = rowCells.SingleOrDefault(c => c.ColumnIndex == fd.No); if (cell == null) { return(null); } var cellType = cell.CellType; if (cellType == CellType.Formula) { cellType = cell.CachedFormulaResultType; } switch (cellType) { case CellType.Blank: return(null); case CellType.Boolean: return(cell.BooleanCellValue); case CellType.Error: return(null); case CellType.Formula: return(null); case CellType.Numeric: if (DateUtil.IsCellDateFormatted(cell)) { return(cell.DateCellValue); } else { return(cell.NumericCellValue); } case CellType.String: return(cell.StringCellValue); case CellType.Unknown: return(null); default: throw new Exception($"Unknown Excel cell value type ({cellType})"); } }
private static (XlsHeader, List <XlsFieldDescriptor>) ReadHeader(IEnumerator <XSSFRow> rowEnumerator) { var dataFormatter = new DataFormatter(); var header = new XlsHeader(); header.LastUpdate = DateTime.MinValue; if (!rowEnumerator.MoveNext()) { throw new Exception("No header row found"); } var cellsRow1 = rowEnumerator.Current.Cells; if (!rowEnumerator.MoveNext()) { throw new Exception("No header row 2 found"); } var cellsRow2 = rowEnumerator.Current.Cells; var fieldDescriptors = new List <XlsFieldDescriptor>(); for (var cellNo = 0; cellNo < cellsRow1.Count; ++cellNo) { var fieldDescriptor = new XlsFieldDescriptor(); fieldDescriptor.No = cellNo; fieldDescriptor.Name = dataFormatter.FormatCellValue(cellsRow1[cellNo]); string sqlDataType; if (cellNo < cellsRow2.Count) { sqlDataType = dataFormatter.FormatCellValue(cellsRow2[cellNo]); } else { sqlDataType = null; } if (string.IsNullOrWhiteSpace(sqlDataType)) { sqlDataType = "nvarchar(max)"; } fieldDescriptor.SetSqlDataType(sqlDataType); fieldDescriptors.Add(fieldDescriptor); } header.FieldCount = fieldDescriptors.Count; return(header, fieldDescriptors); }