当前位置: 首页 > 知识库问答 >
问题:

为什么我在这个OpenXML Excel下载上得到“修复的记录:来自 /xl/styles.xml部分的格式”错误?

楮庆
2023-03-14

我试图将标题行格式添加到我的OpenXML电子表格文档中,但出现了上述错误。我很确定这与我如何添加样式有关,但我不知道我做错了什么。

在我尝试添加样式之前,文档打开正确。

非常感谢您的帮助。

    private void AddStyles()
    {
        stylesPart = doc.WorkbookPart.AddNewPart<WorkbookStylesPart>();
        stylesPart.Stylesheet = new Stylesheet();
        stylesPart.Stylesheet.Fonts = new Fonts();
        stylesPart.Stylesheet.Fills = new Fills();
        stylesPart.Stylesheet.Borders = new Borders();
        stylesPart.Stylesheet.CellFormats = new CellFormats();

        stylesPart.Stylesheet.Fonts.Append(new Font()); // normal
        stylesPart.Stylesheet.Fonts.Append(new Font(new Bold())); // header

        stylesPart.Stylesheet.Fills.Append(new Fill()); //default fill
        stylesPart.Stylesheet.Borders.Append(new Borders()); // default border

        stylesPart.Stylesheet.CellFormats.Append(new CellFormat() { FormatId = 0, FillId = 0, BorderId = 0, FontId = 0 });
        stylesPart.Stylesheet.CellFormats.Append(new CellFormat() { FormatId = 1, FillId = 0, BorderId = 0, FontId = 1 });
    }

当我打开它时,它会提示修复它,并且它会正确地进行修复。然而,如果我在记事本上打开它,我会得到一些疯狂的东西。

PK    ÄCSM5øiº   %    xl/workbook.xml ¢ (                      Á‚0†_eé]‡F   !€/^õ   æè`­dÊã;1‘«·¯›æû«ÓìFñÄÀ–|

以下是代码的其余部分,以供参考:

    public OpenXMLExcelDoc(string sheetName = "Sheet 1")
    {
        ms = new MemoryStream();
        doc = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);

        workBookPart = doc.AddWorkbookPart();
        workBookPart.Workbook = new Workbook();

        workSheetPart = workBookPart.AddNewPart<WorksheetPart>();
        workSheetPart.Worksheet = new Worksheet();

        sheets = workBookPart.Workbook.AppendChild(new Sheets());
        sheet = new Sheet() { Id = workBookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = sheetName };
        sheetData = workSheetPart.Worksheet.AppendChild(new SheetData());
        sheets.Append(sheet);

        AddStyles();

        doc.Save();
    }

    public void StartRow()
    {
        row = new Row();
    }
    public void FinishRow()
    {
        sheetData.AppendChild(row);
    }

    public void AddCellData(string data, CellValues dataType, FontStyles style = FontStyles.Normal)
    {
        var newCell = new Cell()
        {
            CellValue = new CellValue(data),
            DataType = new EnumValue<CellValues>(dataType),
            StyleIndex = Convert.ToUInt32((int)style)
        };

        row.Append(newCell);
    }

    public void AddDataGrid(DataGrid dg)
    {
        StartRow();
        for (var i = 0; i < dg.Columns.Count; i++)
        {
            AddCellData(dg.Columns[i].HeaderText, CellValues.String, FontStyles.Header);
        }
        FinishRow();

        for (var i = 0; i < dg.Items.Count; i++)
        {
            var gridRow = dg.Items[i];

            StartRow();
            for(var j = 0; j < gridRow.Cells.Count; j++)
            {
                var gridCell = gridRow.Cells[j];
                AddCellData(gridCell.Text, CellValues.String);
            }

            FinishRow();
        }
    }


    public void Finish(string title, HttpResponse Response)
    {            
        doc.Close();

        Response.AddHeader("content-disposition", "attachment;filename=" + title + ".xlsx");

        ms.Position = 0;
        ms.CopyTo(Response.OutputStream);

        Response.End();            
    }

共有1个答案

秦伯寅
2023-03-14

嗯,我仍然不明白“为什么”我的代码不起作用,但是基于这篇文章的代码起作用了。

    private void AddStyles()
    {
        stylesPart = workBookPart.AddNewPart<WorkbookStylesPart>();

        Fonts fonts = new Fonts(
            new Font(),
            new Font(new Bold())
            );

        Fills fills = new Fills(new Fill());
        Borders borders = new Borders(new Border());

        CellFormats cellFormats = new CellFormats(
                new CellFormat(), // default
                new CellFormat { FontId = 0, FillId = 0, BorderId = 0 }, // body
                new CellFormat { FontId = 1, FillId = 0, BorderId = 0 } // header
            );

        stylesPart.Stylesheet = new Stylesheet(fonts, fills, borders, cellFormats);
        stylesPart.Stylesheet.Save();
    }
 类似资料:
  • 我使用这里指定的代码合并了两个excel文件 http://www.coderanch.com/t/614715/Web-Services/java/merge-excel-files 这是为我的合并单元格应用样式的块 这一切都如预期的那样工作,并且在生成我的XSSFWorkbook时进展顺利。 尝试打开时出现问题: 我看到下面的错误 我的错误报告包含以下内容 在所有这些之后,我的床单打开得很好,

  • 我需要将12小时的时间转换为24小时的格式。 我现在已经把12小时的时间硬编码了,以使事情更简单。 我的逻辑:输入sting 07:05:45PM提取最后2个字符。如果AM check为前两个字符,则为12。。如果是,则将其设置为00,否则按原样输出,如果PM检查前两位数字是否为12。。如果是,请保持原样,如果不是,则在前2位加上12 总线错误:10是我运行代码得到的

  • 在执行结束后,当我使用Ms-excel-2007打开处理过的文件(.xlsx文件)时,我一直在处理excel表格中的突出显示单元格。我面临两个弹出窗口。此处显示指定的代码和图像:

  • 我们有以下依赖关系: 我们使用代码生成器从AVRO模式文件生成Scala case类。一个这样生成的case类的字段之一是一个任一值。在AVRO模式中,这是用type=[t1,t2]表示的,因此生成似乎是体面的,即是一个和类型:可以是t1类型或t2类型。

  • {“error”:“invalid_scope”,“error_description”:“AADSTS70011:为输入参数”scope“提供的值无效。作用域 https://graph.microsoft.com/User.Read https://graph.microsoft.com/User.ReadWrite https://graph.microsoft.com/User.ReadB

  • 我是Python的初学者。我合并了两个之后,我试图用另一个列值更改一个列的'未分配'值。我不能那样做。如果我使用,那么我可以更改。 我从页面上抓取了一个表,然后修改了数据框中的数据。 pip安装lxml 这是我使用的代码。 我希望将邻域值更改为自治区值。 我得到了这个错误。 KeyError回溯(最近一次调用上次)/usr/local/lib/python3。6/数据包/熊猫/核心/索引/基础。p