private void LoadWorkbook(String path, String relType) { //Process workbook relationships Dictionary <String, CT_Relationship> sheetRels = new Dictionary <string, CT_Relationship>(); String filePath; String fileName; PathUtil.SplitFilePath(path, out filePath, out fileName); var relsPath = PathUtil.CombinePaths(filePath, String.Format("/_rels/{0}.rels", fileName)); if (FileExists(relsPath)) { //Debug.WriteLine(""); //Debug.WriteLine("Workbook relationships:"); var workbookRels = ReadFile <CT_Relationships>(relsPath); sharedStrings = new SharedStrings(); foreach (var rel in workbookRels.Relationship) { //Debug.WriteLine(String.Format("{0} {1} {2}", rel.Id, rel.Target, rel.Type)); var partPath = PathUtil.CombinePaths(filePath, rel.Target); var contentType = contentTypes.ResolvePartType(partPath); switch (contentType) { case ContentTypes.SharedStrings: ReadSharedStrings(partPath); break; case ContentTypes.Sheet: sheetRels.Add(rel.Id, rel); break; case ContentTypes.Styles: LoadStyles(partPath); break; } } } //Process workbook data var wb = ReadFile <CT_Workbook>(path); //Debug.WriteLine(""); //Debug.WriteLine("Sheets: "); foreach (var sheetInfo in wb.sheets) { //Debug.WriteLine(String.Format("{2} {0}: {1}", sheetInfo.name, sheetInfo.sheetId, sheetInfo.id)); var sheet = new Sheet(sheetInfo.name); CT_Relationship rel; if (sheetRels.TryGetValue(sheetInfo.id, out rel)) { var partPath = PathUtil.CombinePaths(filePath, rel.Target); ReadSheet(partPath, sheet); } workbook.Sheets.AddSheet(sheet); } if (wb.definedNames != null) { foreach (var dn in wb.definedNames) { DefinedName definedName = new DefinedName { Name = dn.name, Value = dn.Value }; if (dn.localSheetIdSpecified) { workbook.Sheets[(int)dn.localSheetId].DefinedNames.AddDefinedName(definedName); } else { workbook.DefinedNames.AddDefinedName(definedName); } } } }
void WriteWorkbook() { rels.Add(new CT_Relationship { Type = Relationships.Workbook, Target = "xl/workbook.xml" }); OverrideContentType("/xl/workbook.xml", ContentTypes.Workbook); sharedStrings = new SharedStrings(); ClearStyles(); workbookRelationships = new Relationships(); int sheetIndex = 1; contentTypes.Add(new CT_Default { Extension = "xml", ContentType = ContentTypes.Xml }); contentTypes.Add(new CT_Default { Extension = "rels", ContentType = ContentTypes.Rels }); var sheets = new List <CT_Sheet>(); foreach (var sheet in workbook.Sheets) { var relativePath = String.Format("worksheets/sheet{0}.xml", sheetIndex); var sheetPath = "xl/" + relativePath; var rid = workbookRelationships.Add(new CT_Relationship { Target = relativePath, TargetMode = ST_TargetMode.Internal, Type = Relationships.Sheet }); OverrideContentType(sheetPath, ContentTypes.Sheet); var st = new CT_Sheet { id = rid, name = sheet.SheetName, sheetId = (uint)sheetIndex }; sheets.Add(st); WriteSheet(sheetPath, sheet); sheetIndex++; } var wb = new CT_Workbook() { sheets = sheets.ToArray(), bookViews = new[] { new CT_BookView() } }; var definedNames = new List <CT_DefinedName>(); foreach (var definedName in workbook.DefinedNames) { var dn = new CT_DefinedName { name = definedName.Name, Value = definedName.Value }; definedNames.Add(dn); } for (var i = 0; i < workbook.Sheets.Count; i++) { foreach (var definedName in workbook.DefinedNames) { var dn = new CT_DefinedName { name = definedName.Name, Value = definedName.Value, localSheetId = (uint)i, localSheetIdSpecified = true }; definedNames.Add(dn); } } if (definedNames.Count > 0) { wb.definedNames = definedNames.ToArray(); } WriteFile("xl/workbook.xml", wb, SpreadsheetNs(true)); if (sharedStrings.Count > 0) { WriteSharedStrings(); } if (!styles.Empty) { OverrideContentType("xl/styles.xml", ContentTypes.Styles); workbookRelationships.Add(new CT_Relationship { Target = "styles.xml", Type = Relationships.Styles }); WriteStyles("xl/styles.xml"); } WriteRelationsips("xl/_rels/workbook.xml.rels", workbookRelationships); }