0

我是 OpenXML 的新手。我的概念并不完全清楚。我正在使用以下代码 -

Package package = Package.Open(newFile.FullName, FileMode.Open, FileAccess.ReadWrite);
            excelDoc = SpreadsheetDocument.Open(package);
            WorkbookPart wbPart = excelDoc.WorkbookPart;
            Sheet templateSheet = wbPart.Workbook.Descendants<Sheet>().Where((s) => s.Name == "Sheet1").FirstOrDefault();
            for (int i = 0; i < (int)(obj.Count / 4); i++)
            {
                WorkbookPart workBookpart = excelDoc.WorkbookPart;
                Workbook workbook = workBookpart.Workbook;
                Sheets sheets = workbook.Sheets;
                WorksheetPart workSheetPart = excelDoc.WorkbookPart.AddNewPart<WorksheetPart>("workSheet" + (i+2));
                Worksheet worksheet = new Worksheet();
                SheetData sheetdata = new SheetData();
                worksheet.Append(sheetdata);
                workSheetPart.Worksheet = worksheet;
                sheets.Append(templateSheet.CloneNode(true));
            }
            for (int i = 0; i < (int)(obj.Count / 4); i++)
            {
                uint sheetId = 1;
                if (excelDoc.WorkbookPart.Workbook.Sheets.Elements<Sheet>().Count() > 0)
                {
                    sheetId = excelDoc.WorkbookPart.Workbook.Sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
                }
                Sheet temp = wbPart.Workbook.Descendants<Sheet>().Skip(i + 1).Take(1).FirstOrDefault();
                temp.Name = "Sheet" + (i + 2);
                temp.Id = "workSheet" + (i + 2);
                temp.SheetId = sheetId;
            } 

此代码正在创建工作表,但“Sheet1”中不存在模板。我该怎么做?请建议。

4

1 回答 1

0

从您现在所拥有的情况来看,您的问题是您正在复制Sheet,它为您提供模板表的元数据,但不会复制任何WorksheetPart包含工作表实际内容的关联对象。为此,您需要Brian Jones 的这篇 MSDN 博客文章中的部分内容,特别是他将工作表及其所有部分复制到新工作簿的部分。如有必要,我可以提供如何执行此操作的示例。

于 2013-05-23T22:35:04.930 回答