C# excel文件是使用DocumentFormat.OpenXML创建的,但在excel中操作时需要修复

C# excel文件是使用DocumentFormat.OpenXML创建的,但在excel中操作时需要修复,c#,vb.net,C#,Vb.net,我是DocumentFormat程序的新手。我搜索了web,找到了使用OpenXML将数据集导出到excel的示例。按照代码生成excel文件。但是,当文件打开时,存在一个问题,Excel显示“报告中的某些内容有问题。是否希望我们尝试尽可能多地恢复?”当用户单击“是”时,数据正常。我搜索了这个网站,看起来像是使用InlineString的字符串列类型。我错了吗?我不知道是哪个代码导致了这个问题。有人能告诉我吗?提前谢谢 我在网上找到了以下代码: namespace ExcelObject { p

我是DocumentFormat程序的新手。我搜索了web,找到了使用OpenXML将数据集导出到excel的示例。按照代码生成excel文件。但是,当文件打开时,存在一个问题,Excel显示“报告中的某些内容有问题。是否希望我们尝试尽可能多地恢复?”当用户单击“是”时,数据正常。我搜索了这个网站,看起来像是使用InlineString的字符串列类型。我错了吗?我不知道是哪个代码导致了这个问题。有人能告诉我吗?提前谢谢

我在网上找到了以下代码:

namespace ExcelObject
{
public class ExcelStream
{
    SpreadsheetDocument document = null;   

    public MemoryStream GetExcelStream(DataSet dataset)
    {
        DataSet ds = dataset;
        using (var ms = new MemoryStream())
        {
            //Create workbook in memory
            document = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);

            //Add workbook
            var workbookpart = document.AddWorkbookPart();
            workbookpart.Workbook = new Workbook();

            //add worksheet to wrokbook
            var worksheet = workbookpart.AddNewPart<WorksheetPart>();
            worksheet.Worksheet = new Worksheet(new SheetData());


            var sheets = document.WorkbookPart.Workbook.AppendChild(new Sheets());
            //Add a new worksheet and associte it with the workbook.
            var mainSheet = new Sheet()
            {
                Id = document.WorkbookPart.GetIdOfPart(worksheet),
                SheetId = 1,
                Name = "TestReport"
            };

            sheets.Append(mainSheet);

            uint rowIndex = 0;

            //Get sheet data
            var sheetData = worksheet.Worksheet.GetFirstChild<SheetData>();
            var row = new Row { RowIndex = ++rowIndex };
            AddColumnHeaderRow(ds, row, sheetData);
            AddDataRows(ds, rowIndex, sheetData);
            workbookpart.Workbook.Save();
            document.Close();
            return ms;


        }
    }

    private static void AddColumnHeaderRow(DataSet ds, Row row, SheetData sheetData)
    {
        for (var i = 0; i < ds.Tables[0].Columns.Count; i++)
        {
            var cell = new Cell { DataType = CellValues.InlineString, StyleIndex = 1 };
            var inlineCell = new InlineString();
            var cellText = new Text { Text = ds.Tables[0].Columns[i].ColumnName };
            inlineCell.AppendChild<Text>(cellText);
            cell.AppendChild<InlineString>(inlineCell);
            row.AppendChild<Cell>(cell);

        }
        sheetData.AppendChild(row);

    }

    private static void AddDataRows(DataSet ds, uint rowIndex, SheetData sheetData)
    {
        for (var r = 0; r < ds.Tables[0].Rows.Count; r++)
        {
            var row = new Row { RowIndex = ++rowIndex };
            for (var c = 0; c < ds.Tables[0].Columns.Count; c++)
            {

                var cell = new Cell { DataType = CellValues.InlineString };
                var istring = new InlineString();
                var t = new Text
                {
                    Text = ds.Tables[0].Rows[r][c].ToString()

                };
                istring.AppendChild<Text>(t);
                cell.AppendChild<InlineString>(istring);
                row.AppendChild(cell);
            }
            //append each data row to sheet data
            sheetData.AppendChild<Row>(row);
        }
    }
}
}

我发现我的代码有什么问题。这个傻瓜有我没有的风格。因此,我将“var cell=new cell{DataType=CellValues.InlineString,StyleIndex=1}”更改为“var cell=new cell{DataType=CellValues.InlineString}”;打开文件时错误消息没有显示。

我发现了代码的错误。这个傻瓜有我没有的风格。因此,我将“var cell=new cell{DataType=CellValues.InlineString,StyleIndex=1}”更改为“var cell=new cell{DataType=CellValues.InlineString}”;打开文件时没有显示错误消息

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim dt As New DataTable("Test")     
    dt.Columns.Add("Code", GetType(String))
    dt.Columns.Add("Price", GetType(String))

    Dim dr As DataRow = dt.NewRow()
    dr("Code") = "ABC"
    dr("Price") = "12"

    dt.Rows.Add(dr)

    Dim dr1 As DataRow = dt.NewRow()
    dr1("Code") = "DEF"
    dr1("Price") = "1"

    dt.Rows.Add(dr1)
    Dim ds As New DataSet
    ds.Tables.Add(dt)

    Dim t As ExcelStreamObject.ExcelStream = New ExcelStreamObject.ExcelStream
    Dim ms As MemoryStream = t.GetExcelStream(ds)

    Response.Clear()
    Response.ClearContent()
    Response.ClearHeaders()
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    Response.AppendHeader("Content-Disposition", "attachment; filename=TestReport.xlsx")
    Response.BinaryWrite(ms.ToArray())
    Response.Flush()
    Response.Close()
    Response.End()

End Sub