C# 简单excel创建未打开文件已损坏

C# 简单excel创建未打开文件已损坏,c#,error-handling,openxml,openxml-sdk,C#,Error Handling,Openxml,Openxml Sdk,我正在尝试使用open xml创建一个包含多个工作表的简单excel文件,不幸的是,该文件在创建后无法打开 生成文件后,当我用Microsoft Excel打开它时,它会显示 我们发现了一个问题,您是否希望尽可能多地恢复 使用(电子表格文档spreedDoc=SpreadsheetDocument.Create(文件路径, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook) { WorkbookPart wbPart=spreedDo

我正在尝试使用open xml创建一个包含多个工作表的简单excel文件,不幸的是,该文件在创建后无法打开

生成文件后,当我用Microsoft Excel打开它时,它会显示

我们发现了一个问题,您是否希望尽可能多地恢复

使用(电子表格文档spreedDoc=SpreadsheetDocument.Create(文件路径,
DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook)
{
WorkbookPart wbPart=spreedDoc.WorkbookPart;
wbPart=spreedDoc.AddWorkbookPart();
wbPart.Workbook=新工作簿();
Sheets Sheets=wbPart.工作簿.AppendChild(新工作表());
foreach(Excel sheetData中的var sheetData)
{
//添加空白工作表部件。
工作表部件工作表部件=wbPart.AddNewPart();
worksheetPart.Worksheet=新工作表(new SheetData());
string relationshipId=wbPart.GetIdOfPart(工作表部分);
//获取新工作表的唯一ID。
uint sheetId=1;
如果(sheets.Elements().Count()>0)
{
sheetId=sheets.Elements()。选择(s=>s.sheetId.Value)。Max()+1;
}
//为新工作表命名。
字符串sheetnametwrite=sheetName;
if(string.IsNullOrWhiteSpace(sheetNameToWrite))
{
sheetNameToWrite=“Sheet”+图纸ID;
}
//附加新工作表并将其与工作簿关联。
Sheet Sheet=new Sheet(){Id=relationshipId,SheetId=SheetId,Name=sheetName};
表。追加子项(表);
}
//wbPart.工作簿.Sheets.AppendChild(sheet);
wbPart.Workbook.Save();
}
在excel中尝试修复时,给出以下消息

-
修复的记录:来自/xl/workbook.xml部分(工作簿)的工作表属性
你看到这个了吗?

使用OpenXML(适用于我)中的多个工作表创建功能性excel文件的必要步骤如下:

using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
        {
            spreadsheet.AddWorkbookPart();
            spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();

            spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));

            WorkbookStylesPart workbookStylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>("rIdStyles");
            Stylesheet stylesheet = new Stylesheet();
            workbookStylesPart.Stylesheet = stylesheet;
            workbookStylesPart.Stylesheet.Save();

            for (int worksheetNo = 1; worksheetNo < worksheetCountYouWantToCreate; worksheetNo++)
            {
                string workSheetID = "rId" + worksheetNo;
                string worksheetName = "worksheet" + worksheetNo;

                WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
                newWorksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet();

                newWorksheetPart.Worksheet.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.SheetData());

                // write data here
                // ...
                // ...

                newWorksheetPart.Worksheet.Save();

                if (worksheetNo == 1)
                    spreadsheet.WorkbookPart.Workbook.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheets());

                spreadsheet.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>().AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheet()
                {
                    Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart),
                    SheetId = (uint)worksheetNo,
                    Name = worksheetName
                });
            }
            spreadsheet.WorkbookPart.Workbook.Save();
        }
使用(SpreadsheetDocument电子表格=SpreadsheetDocument.Create(路径,SpreadsheetDocumentType.工作簿))
{
电子表格。AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook=newdocumentformat.OpenXml.spreadsheet.Workbook();
电子表格.WorkbookPart.Workbook.Append(newbookview(newworkbookview()));
WorkbookStylesPart WorkbookStylesPart=电子表格.WorkbookPart.AddNewPart(“rIdStyles”);
样式表样式表=新样式表();
workbookStylesPart.Stylesheet=样式表;
workbookStylesPart.Stylesheet.Save();
对于(int worksheetNo=1;worksheetNo
你看到这个了吗?

使用OpenXML(适用于我)中的多个工作表创建功能性excel文件的必要步骤如下:

using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
        {
            spreadsheet.AddWorkbookPart();
            spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();

            spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));

            WorkbookStylesPart workbookStylesPart = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>("rIdStyles");
            Stylesheet stylesheet = new Stylesheet();
            workbookStylesPart.Stylesheet = stylesheet;
            workbookStylesPart.Stylesheet.Save();

            for (int worksheetNo = 1; worksheetNo < worksheetCountYouWantToCreate; worksheetNo++)
            {
                string workSheetID = "rId" + worksheetNo;
                string worksheetName = "worksheet" + worksheetNo;

                WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
                newWorksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet();

                newWorksheetPart.Worksheet.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.SheetData());

                // write data here
                // ...
                // ...

                newWorksheetPart.Worksheet.Save();

                if (worksheetNo == 1)
                    spreadsheet.WorkbookPart.Workbook.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheets());

                spreadsheet.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>().AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheet()
                {
                    Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart),
                    SheetId = (uint)worksheetNo,
                    Name = worksheetName
                });
            }
            spreadsheet.WorkbookPart.Workbook.Save();
        }
使用(SpreadsheetDocument电子表格=SpreadsheetDocument.Create(路径,SpreadsheetDocumentType.工作簿))
{
电子表格。AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook=newdocumentformat.OpenXml.spreadsheet.Workbook();
电子表格.WorkbookPart.Workbook.Append(newbookview(newworkbookview()));
WorkbookStylesPart WorkbookStylesPart=电子表格.WorkbookPart.AddNewPart(“rIdStyles”);
样式表样式表=新样式表();
workbookStylesPart.Stylesheet=样式表;
workbookStylesPart.Stylesheet.Save();
对于(int worksheetNo=1;worksheetNo
您是否尝试过将损坏的文件与Excel修复后的失败文件进行比较,以查看到底发生了什么变化?(你可以