public Cell(string reference, CellType cellType, string cellValue, CellFormula cellFormula,
             string[] sharedStrings)
 {
     CellReference  = reference;
     CellType       = cellType;
     CellValue      = cellValue;
     CellFormula    = cellFormula;
     _sharedStrings = sharedStrings;
 }
Esempio n. 2
0
        public Workbook Read(string fileName)
        {
            var sharedStringsFileName = Path.Combine(fileName, "xl\\sharedStrings.xml");
            var calcChainFileName     = Path.Combine(fileName, "xl\\calcChain.xml");
            var workbookFileName      = Path.Combine(fileName, "xl\\workbook.xml");
            var contentTypesFileName  = Path.Combine(fileName, "[Content_Types].xml");
            var workbookRelsFileName  = Path.Combine(fileName, "xl\\_rels\\workbook.xml.rels");

            var workbookInfo   = ParseWorkbook(workbookFileName);
            var workbookRels   = ParseWorkbookRels(workbookRelsFileName);
            var sharedStrings  = ParseSharedStrings(sharedStringsFileName);
            var calcChainCells = ParseCalculationChain(calcChainFileName);

//            var worksheets = new List<Worksheet>();

//            var cells = new Dictionary<string, Cell>();
//            var cellols = new List<ExcelReader.Cell>();

            var worksheets = new List <WorkbookTypes.Worksheet>();

            foreach (var worksheetInfo in workbookInfo.WorksheetInfos)
            {
                var sheet = worksheetInfo.Name;
                var rId   = worksheetInfo.Rid;
                var rel   = workbookRels.FirstOrDefault(a => a.Id == rId);
                if (rel != null)
                {
                    var worksheetFileName = Path.Combine(fileName, "xl", rel.Target.Replace('/', '\\'));
                    var rows = ParseWorksheet(worksheetFileName);

                    var cecells = new List <WorkbookTypes.Cell>();

                    foreach (var row in rows)
                    {
                        foreach (var cell in row.Cells)
                        {
                            WorkbookTypes.CellFormula formula = null;

                            if (cell.HasFormula)
                            {
                                var cellFormula = cell.CellFormula;
                                formula = new WorkbookTypes.CellFormula(cellFormula.CalculateCell,
                                                                        cellFormula.AlwaysCalculateArray, cellFormula.RangeOfCells,
                                                                        cellFormula.Formula, cellFormula.FormulaType);
                            }

                            var cell1 = new WorkbookTypes.Cell(cell.Reference, cell.CellDataType, cell.CellValue,
                                                               formula, sharedStrings);
                            cecells.Add(cell1);
                        }
                    }

                    var ws = new WorkbookTypes.Worksheet(sheet, cecells.ToArray());
                    worksheets.Add(ws);
                }
            }

            var mapping   = workbookInfo.WorksheetInfos.ToDictionary(a => a.SheetId, b => b.Name);
            var calcCells = new List <WorkbookTypes.CalcChainCell>();

            foreach (var calcChainCell in calcChainCells)
            {
                var sheetName = mapping[calcChainCell.SheetId];

                var calcCell = new WorkbookTypes.CalcChainCell(sheetName, calcChainCell.CellReference,
                                                               calcChainCell.IsArrayFormula, calcChainCell.IsNewLevelDependency, calcChainCell.IsChildChain,
                                                               calcChainCell.IsNewThread);
                calcCells.Add(calcCell);
            }

            var defNames = workbookInfo.DefinedNames;

//            var ddd = cellols.Where(a => a.HasFormula && !string.IsNullOrEmpty(a.CellFormula.RangeOfCells))
//                .Select(a => a.CellFormula.RangeOfCells).ToArray();

            return(new Workbook(worksheets.ToArray(), workbookInfo.DefinedNames, calcCells.ToArray(), sharedStrings));
        }