Beispiel #1
0
        public ExcelSheetReader Load()
        {
            WorkbookPart wbp = ExcelLoader.SSDocument.WorkbookPart;
            WorksheetPart wsp = (WorksheetPart)wbp.GetPartById(_sheet.Id.Value);
            DocumentFormat.OpenXml.Spreadsheet.SheetData sheetData = wsp.Worksheet.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.SheetData>();

            _iter = sheetData.Elements<Row>().GetEnumerator();
            _sstp = wbp.GetPartsOfType<SharedStringTablePart>().First();
            RowCount = sheetData.Elements<Row>().Count();
            MaxRowIndex = sheetData.Elements<Row>().Max(v => v.RowIndex.Value);

            //  Field data
            if (ExcelLoader.RowIndex_FieldName >= 0)
            {
                Row row = sheetData.Elements<Row>().Where(v => v.RowIndex == ExcelLoader.RowIndex_FieldName).FirstOrDefault();
                Int32 idx = 0;

                //  field name
                if (row == null)
                    throw new AegisException("FieldName index is {0}, but {1} has no {0} row index.", ExcelLoader.RowIndex_FieldName, _sheet.Name);
                Fields = new FieldInfo[row.LongCount()];

                foreach (Cell cell in row.Elements<Cell>())
                {
                    Fields[idx] = new FieldInfo();
                    Fields[idx].Name = GetTextInCell(cell);
                    ++idx;
                }

                //  data type
                idx = 0;
                row = sheetData.Elements<Row>().Where(v => v.RowIndex == ExcelLoader.RowIndex_DataType).First();
                foreach (Cell cell in row.Elements<Cell>())
                {
                    String text = GetTextInCell(cell).ToLower();

                    if (text == "int" || text == "integer")
                        Fields[idx++].DataType = DataType.Int;

                    else if (text == "double")
                        Fields[idx++].DataType = DataType.Double;

                    else if (text == "datetime")
                        Fields[idx++].DataType = DataType.DateTime;

                    else if (text == "string")
                        Fields[idx++].DataType = DataType.String;

                    else
                        throw new AegisException("Invalid field type at {0}.{1}", _sheet.Name, cell.CellReference);
                }
            }

            return this;
        }
Beispiel #2
0
        private CellValue GetCellValue(Cell cell, FieldInfo fieldInfo)
        {
            String text = GetTextInCell(cell);

            if (text == "")
            {
                if (fieldInfo.DataType == DataType.Int)
                    return new CellValue(fieldInfo, (Int32)0);

                if (fieldInfo.DataType == DataType.Double)
                    return new CellValue(fieldInfo, (Double)0);

                return new CellValue(fieldInfo, null);
            }

            else if (fieldInfo.DataType == DataType.DateTime)
            {
                DateTime value;
                Double dblValue;

                if (DateTime.TryParse(text, out value) == true)
                    return new CellValue(fieldInfo, value);

                else if (Double.TryParse(text, out dblValue) == true)
                    return new CellValue(fieldInfo, DateTime.FromOADate(dblValue));

                else
                    throw new AegisException("Invalid data at {0}.{1}", _sheet.Name, cell.CellReference);
            }

            else if (fieldInfo.DataType == DataType.Int)
            {
                Int32 value;
                if (Int32.TryParse(text, out value) == true)
                    return new CellValue(fieldInfo, value);

                else
                    throw new AegisException("Invalid data at {0}.{1}", _sheet.Name, cell.CellReference);
            }

            else if (fieldInfo.DataType == DataType.Double)
            {
                Double value;
                if (Double.TryParse(text, out value) == true)
                    return new CellValue(fieldInfo, value);

                else
                    throw new AegisException("Invalid data at {0}.{1}", _sheet.Name, cell.CellReference);
            }

            else
                return new CellValue(fieldInfo, text);
        }
Beispiel #3
0
 internal CellValue(FieldInfo field, dynamic value)
 {
     _field = field;
     _value = value;
 }