C# Excel创建包含填充数据的命名工作表
我已经试着让它工作了将近三个星期。假设代码创建一个excel文档,每个项目都有一个新的命名工作表,将对象数据传输到工作表。不幸的是,它将数据复制到所有的工作表中C# Excel创建包含填充数据的命名工作表,c#,.net,openxml,openxml-sdk,C#,.net,Openxml,Openxml Sdk,我已经试着让它工作了将近三个星期。假设代码创建一个excel文档,每个项目都有一个新的命名工作表,将对象数据传输到工作表。不幸的是,它将数据复制到所有的工作表中 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create (filepath, SpreadsheetDocumentType.Workbook); // Add a Work
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create
(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
// Add Sheets to the Workbook
Sheets sheets = workbookpart.Workbook.
AppendChild(new Sheets());
// Append a new worksheet and associate it with the workbook.
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
foreach (Town temp in CampaignTowns)
{
// Constructing header
Row row = new Row();
row = CreateContentRow(temp, sheetData);
// Insert the header row to the Sheet Data
//sheetData.AppendChild(row);
Sheet sheet = new Sheet()
{
Id = workbookpart.GetIdOfPart(worksheetPart),
SheetId = TempSheetId,
Name = temp.getName()
};
TempSheetId++;
sheets.Append(sheet);
sheetData = new SheetData();
}
//Save worksheet part
worksheetPart.Worksheet.Save();
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
SpreadsheetDocument SpreadsheetDocument=电子表格文档。创建
(文件路径,电子表格DocumentType.工作簿);
//将工作簿部件添加到文档中。
WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
workbookpart.工作簿=新工作簿();
//将工作表部件添加到工作簿部件。
WorksheetPart WorksheetPart=workbookpart.AddNewPart();
工作表部分。工作表=新工作表();
//将工作表添加到工作簿中
工作表=workbookpart.工作簿。
追加子项(新页());
//附加新工作表并将其与工作簿关联。
SheetData SheetData=worksheetPart.Worksheet.AppendChild(新的SheetData());
foreach(城镇临时工)
{
//构造标头
行=新行();
行=CreateContentRow(临时、图纸数据);
//将标题行插入图纸数据
//sheetData.AppendChild(行);
图纸=新图纸()
{
Id=workbookpart.GetIdOfPart(工作表部分),
SheetId=临时SheetId,
Name=temp.getName()
};
TempSheetId++;
附页(页);
sheetData=新的sheetData();
}
//保存工作表部件
worksheetPart.Worksheet.Save();
workbookpart.Workbook.Save();
//关闭文档。
电子表格文档。关闭();
创建一个包含所需三张工作表的工作簿(Excel)。在每张纸上放一点数据。保存并关闭工作簿
打开开放XML SDK生产力工具
(可从Microsoft网站下载)。在工具中打开新工作簿。使用Reflect code
按钮打开表示文档的OpenXML代码
复制/粘贴所需的代码。这是最容易让这样的东西发挥作用的。祝你好运。所以在做了一些研究之后,我发现了我的错误并改正了它。显然,您必须在循环中初始化工作表零件和图纸数据。这是我的工作更正代码的副本,供有相同错误的人使用。我还将CreateContentRow函数更正为空
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create
(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add Sheets to the Workbook
Sheets sheets = workbookpart.Workbook.
AppendChild(new Sheets());
foreach (Town temp in CampaignTowns)
{
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
worksheetPart.Worksheet.Save();
// Append a new worksheet and associate it with the workbook.
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
// Insert the header row to the Sheet Data
CreateContentRow(temp, sheetData);
Sheet sheet = new Sheet()
{
Id = workbookpart.GetIdOfPart(worksheetPart),
SheetId = TempSheetId,
Name = temp.getName()
};
TempSheetId++;
sheets.AppendChild(sheet);
}
// Close the document.
spreadsheetDocument.Close();
SpreadsheetDocument SpreadsheetDocument=电子表格文档。创建
(文件路径,电子表格DocumentType.工作簿);
//将工作簿部件添加到文档中。
WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
workbookpart.工作簿=新工作簿();
//将工作表添加到工作簿中
工作表=workbookpart.工作簿。
追加子项(新页());
foreach(城镇临时工)
{
//将工作表部件添加到工作簿部件。
WorksheetPart WorksheetPart=workbookpart.AddNewPart();
工作表部分。工作表=新工作表();
worksheetPart.Worksheet.Save();
//附加新工作表并将其与工作簿关联。
SheetData SheetData=worksheetPart.Worksheet.AppendChild(新的SheetData());
//将标题行插入图纸数据
CreateContentRow(临时、图纸数据);
图纸=新图纸()
{
Id=workbookpart.GetIdOfPart(工作表部分),
SheetId=临时SheetId,
Name=temp.getName()
};
TempSheetId++;
表。追加子项(表);
}
//关闭文档。
电子表格文档。关闭();
不幸的是,代码会为每张工作表生成随机数据。是的。但您从该工具中得到的是文档的结构。一旦您了解了这一点,并且看到了工作表、工作表、工作表、行和单元格(以及其他)是如何组合在一起并进行交互的,您就可以将代码插入到内容中。我已经在三个主要的项目上做过了,我所做的很多事情都是直接从那个工具中窃取的。这个工具还有另外两个很好的特性:查找错误和比较两个文档(这非常有用),我得到了我不明白的结构,为什么我的代码不能正常工作。