Example #1
0
        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);
                    }
                }
            }
        }
Example #2
0
        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);
        }