首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenXML样式警告打开Excel文件

OpenXML样式警告打开Excel文件
EN

Stack Overflow用户
提问于 2015-07-22 00:07:27
回答 1查看 744关注 0票数 0

我已经使用OpenXML创建了一个XSLX文件。

文件是正确创建的,但由于我已经应用了样式,所以当我使用MS Excel打开文件时收到一条消息:Excel询问我是否要尝试恢复部分内容。

如果我查看日志文件,我可以看到问题与样式有关。

下面是我使用的样式代码:

代码语言:javascript
复制
private Stylesheet GenerateStyleSheet()
        {
            return new Stylesheet(
                new DocumentFormat.OpenXml.Spreadsheet.Font(
                    new DocumentFormat.OpenXml.Spreadsheet.Font(                                                               // Index 0 - The default font.
                        new DocumentFormat.OpenXml.Spreadsheet.FontSize() { Val = 11 },
                        new DocumentFormat.OpenXml.Spreadsheet.Color() { Rgb = new HexBinaryValue() { Value = "000000" } },
                        new DocumentFormat.OpenXml.Spreadsheet.FontName() { Val = "Calibri" }),
                    new DocumentFormat.OpenXml.Spreadsheet.Font(                                                               // Index 1 - The bold font.
                        new DocumentFormat.OpenXml.Spreadsheet.Bold(),
                        new DocumentFormat.OpenXml.Spreadsheet.FontSize() { Val = 13 },
                        new DocumentFormat.OpenXml.Spreadsheet.Color() { Rgb = new HexBinaryValue() { Value = "000000" } },
                        new DocumentFormat.OpenXml.Spreadsheet.FontName() { Val = "Calibri" }),
                    new DocumentFormat.OpenXml.Spreadsheet.Font(                                                               // Index 2 - The Italic font.
                        new DocumentFormat.OpenXml.Spreadsheet.Italic(),
                        new DocumentFormat.OpenXml.Spreadsheet.FontSize() { Val = 11 },
                        new DocumentFormat.OpenXml.Spreadsheet.Color() { Rgb = new HexBinaryValue() { Value = "000000" } },
                        new DocumentFormat.OpenXml.Spreadsheet.FontName() { Val = "Calibri" }),
                    new DocumentFormat.OpenXml.Spreadsheet.Font(                                                               // Index 2 - The Times Roman font. with 16 size
                        new DocumentFormat.OpenXml.Spreadsheet.FontSize() { Val = 16 },
                        new DocumentFormat.OpenXml.Spreadsheet.Color() { Rgb = new HexBinaryValue() { Value = "000000" } },
                        new DocumentFormat.OpenXml.Spreadsheet.FontName() { Val = "Times New Roman" })
                ),
                new Fills(
                    new DocumentFormat.OpenXml.Spreadsheet.Fill(                                                           // Index 0 - The default fill.
                        new DocumentFormat.OpenXml.Spreadsheet.PatternFill() { PatternType = PatternValues.None }),
                    new DocumentFormat.OpenXml.Spreadsheet.Fill(                                                           // Index 1 - The default fill of gray 125 (required)
                        new DocumentFormat.OpenXml.Spreadsheet.PatternFill() { PatternType = PatternValues.Gray125 }),
                    new DocumentFormat.OpenXml.Spreadsheet.Fill(                                                           // Index 2 - The yellow fill.
                        new DocumentFormat.OpenXml.Spreadsheet.PatternFill(
                            new DocumentFormat.OpenXml.Spreadsheet.ForegroundColor() { Rgb = new HexBinaryValue() { Value = "AFEEEE" } }
                        ) { PatternType = PatternValues.Solid })
                ),
                new Borders(
                    new Border(                                                         // Index 0 - The default border.
                        new DocumentFormat.OpenXml.Spreadsheet.LeftBorder(),
                        new DocumentFormat.OpenXml.Spreadsheet.RightBorder(),
                        new DocumentFormat.OpenXml.Spreadsheet.TopBorder(),
                        new DocumentFormat.OpenXml.Spreadsheet.BottomBorder(),
                        new DiagonalBorder()),
                    new Border(                                                         // Index 1 - Applies a Left, Right, Top, Bottom border to a cell
                        new DocumentFormat.OpenXml.Spreadsheet.LeftBorder(
                            new DocumentFormat.OpenXml.Spreadsheet.Color() { Auto = true }
                        ) { Style = BorderStyleValues.Thin },
                        new DocumentFormat.OpenXml.Spreadsheet.RightBorder(
                            new DocumentFormat.OpenXml.Spreadsheet.Color() { Auto = true }
                        ) { Style = BorderStyleValues.Thin },
                        new DocumentFormat.OpenXml.Spreadsheet.TopBorder(
                            new DocumentFormat.OpenXml.Spreadsheet.Color() { Auto = true }
                        ) { Style = BorderStyleValues.Thin },
                        new DocumentFormat.OpenXml.Spreadsheet.BottomBorder(
                            new DocumentFormat.OpenXml.Spreadsheet.Color() { Auto = true }
                        ) { Style = BorderStyleValues.Thin },
                        new DiagonalBorder())
                ),
                new CellFormats(
                    new CellFormat() { },
                    new CellFormat() { },
                    new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 },                          // Index 2 - The default cell style.  If a cell does not have a style index applied it will use this style combination instead
                    new CellFormat() { FontId = 1, FillId = 0, BorderId = 0, ApplyFont = true },       // Index 3 - Bold 
                    new CellFormat() { FontId = 2, FillId = 0, BorderId = 0, ApplyFont = true },       // Index 4 - Italic
                    new CellFormat(                                                                   // Index 5 - Alignment
                        new Alignment() { Horizontal = HorizontalAlignmentValues.Center, Vertical = VerticalAlignmentValues.Center }
                    ) { FontId = 0, FillId = 0, BorderId = 0, ApplyAlignment = true },
                    new CellFormat() { FontId = 0, FillId = 0, BorderId = 1, ApplyBorder = true },      // Index 6 - Border
                    new CellFormat() { FontId = 1, FillId = 2, BorderId = 0, ApplyFont = true }       // Index 7 - Bold + Blue fill
                )
            ); // return
        }

然后,我以这种方式将样式应用到单元格:

代码语言:javascript
复制
myCell.StyleIndex = 6;

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-30 22:05:04

我敢肯定,当有空的CellFormats()时,Excel不会喜欢它。我建议你试着去掉这两个

代码语言:javascript
复制
new CellFormat() { },
new CellFormat() { },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31544216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档