public Cell(string reference, CellType cellType, string cellValue, CellFormula cellFormula, string[] sharedStrings) { CellReference = reference; CellType = cellType; CellValue = cellValue; CellFormula = cellFormula; _sharedStrings = sharedStrings; }
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)); }