[英]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创建文档时,请执行以下操作:
如果这样做,我将得到所需的所有代码。 我将其归结为要回答您的问题的要点。 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.