Esempio n. 1
0
        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})");
            }
        }
Esempio n. 2
0
        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);
        }