Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel创建包含填充数据的命名工作表_C#_.net_Openxml_Openxml Sdk - Fatal编程技术网

C# Excel创建包含填充数据的命名工作表

C# Excel创建包含填充数据的命名工作表,c#,.net,openxml,openxml-sdk,C#,.net,Openxml,Openxml Sdk,我已经试着让它工作了将近三个星期。假设代码创建一个excel文档,每个项目都有一个新的命名工作表,将对象数据传输到工作表。不幸的是,它将数据复制到所有的工作表中 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create (filepath, SpreadsheetDocumentType.Workbook); // Add a Work

我已经试着让它工作了将近三个星期。假设代码创建一个excel文档,每个项目都有一个新的命名工作表,将对象数据传输到工作表。不幸的是,它将数据复制到所有的工作表中

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++;
表。追加子项(表);
}
//关闭文档。
电子表格文档。关闭();

不幸的是,代码会为每张工作表生成随机数据。是的。但您从该工具中得到的是文档的结构。一旦您了解了这一点,并且看到了工作表、工作表、工作表、行和单元格(以及其他)是如何组合在一起并进行交互的,您就可以将代码插入到内容中。我已经在三个主要的项目上做过了,我所做的很多事情都是直接从那个工具中窃取的。这个工具还有另外两个很好的特性:查找错误和比较两个文档(这非常有用),我得到了我不明白的结构,为什么我的代码不能正常工作。