繁体   English   中英

打开XML创建多个工作表

[英]Open XML Creating Multiple sheets

我正在尝试使用Open XML C#创建一个Excel文件,该文件在我的excel文件中需要创建多个工作表。 请在下面找到我的代码,并为我提供解决方案。

当我打开excel时,只有1张纸存在,而第二张纸正被第一张纸覆盖。

    public void CreateExcelFile(string filePath , List<SheetData> excelSheet)
    {

        var sheetCount = GetSheetCount(filePath);


        using (SpreadsheetDocument spreedDoc = SpreadsheetDocument.Create(filePath,
            DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
        {
            Workbook workbook1 = new Workbook();
            workbook1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            FileVersion fileVersion1 = new FileVersion() { ApplicationName = "xl", LastEdited = "5", LowestEdited = "4", BuildVersion = "9302" };
            WorkbookProperties workbookProperties1 = new WorkbookProperties() { FilterPrivacy = true, DefaultThemeVersion = (UInt32Value)124226U };

            BookViews bookViews1 = new BookViews();
            WorkbookView workbookView1 = new WorkbookView() { XWindow = 240, YWindow = 105, WindowWidth = (UInt32Value)14805U, WindowHeight = (UInt32Value)8010U, ActiveTab = (UInt32Value)2U };

            bookViews1.Append(workbookView1);
            Sheets sheetCol = new Sheets();

            int ctr = 0;
            foreach (var sheetToCreate in excelSheet)
            {
                ctr++;

                //WorksheetPart worksheetPart = null;
                //worksheetPart = wbPart.AddNewPart<WorksheetPart>();
                //var sheetData = new SheetData();

                //worksheetPart.Worksheet = new Worksheet(sheetData);
                //worksheetPart.Worksheet = new Worksheet(sheetToCreate);

                string sheetName = "Sheet";


                sheetName += ctr.ToString();



                var sheet = new Sheet()
                {
                    Id = "rId" + ctr,
                    SheetId = (UInt32)ctr,
                    Name = sheetName
                };
                sheet.Append(sheetToCreate);
                sheetCol.Append(sheet);


                //wbPart.Workbook.Sheets.AppendChild(sheet);
                //wbPart.Workbook.Append(sheetCol);

                workbook1.Sheets.Append(sheet);

                //var workingSheet = ((WorksheetPart)wbPart.GetPartById(sheet.Id)).Worksheet;



            }
            workbook1.Append(fileVersion1);
            workbook1.Append(workbookProperties1);
            workbook1.Append(bookViews1);
            workbook1.Append(sheetCol);



            //Set Border 
            //wbPark

            workbook1.Save();
        }
    }

在处理OpenXML时,“ OpenXML生产力工具”(可从Microsoft的网站下载)是您的朋友。 使用OpenXML创建文档时,请执行以下操作:

  1. 创建一个类似于我想要使用Excel或Word的文档(在这种情况下,是一个包含两张纸的Excel电子表格文档(我将它们标记为“第一”和“第二”))。
  2. 在生产力工具中打开文档
  3. 反映代码(工具UI上的按钮)
  4. 复制/粘贴我想要的代码。

如果这样做,我将得到所需的所有代码。 我将其归结为要回答您的问题的要点。 Excel会抱怨下面生成的文档已损坏(因为它包含的全部内容都是创建两个工作表的代码-并留下了许多其他所需的代码-所有这些都可以从该工具中窃取)。 但是,如果您告诉Excel“为我修复此问题”,您将获得包含两张纸的文档,分别标记为“第一”和“第二”

WorkbookPart workbookPart1 = document.AddWorkbookPart();
Workbook workbook1 = new Workbook() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x15 xr xr6 xr10 xr2" } };
//lots of namespace declarations - copy them from the tool (they are needed!!)
//lots of code for WorkbookProperties, etc (you can get this from Tool)
Sheets sheets1 = new Sheets();
Sheet sheet1 = new Sheet() { Name = "First", SheetId = (UInt32Value)1U, Id = "rId1" };
Sheet sheet2 = new Sheet() { Name = "Second", SheetId = (UInt32Value)2U, Id = "rId2" };

sheets1.Append(sheet1);
sheets1.Append(sheet2);
//More elided code

workbook1.Append(sheets1);
workbookPart1.Workbook = workbook1;

我强烈建议您保持“表格”和“表格”之类的多元性清晰。 您的代码具有Sheets sheetCol = new Sheets(); ,尚不清楚是否sheetCol是Sheets,而不是Sheet。

然后,您有一个名为sheetToCreate东西,它是一个SheetData对象。 再次,这很令人困惑-将其thisSheetData明确thisSheetData 我真的强烈建议您尽可能多地遵循OpenXML的命名方式,否则很难遵循所发生的事情。

写下文件后,生产力工具也很​​方便。 您可以看到自己创建的内容,经常发现错误所在。 此外,还有一个验证按钮,通常(并非总是)将您指出文档结构中的问题。

祝好运。 准备好更好地掌握您的代码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM