You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core7 Web API用OfficeOpenXML生成Excel在Excel2016显示异常

Excel 2016打开EPPlus生成文件黑屏问题修复方案

问题根源

用EPPlus生成的Excel在WPS正常,但Excel 2016部分区域黑屏,核心原因是样式设置不完整、无效单元格操作或Excel 2016对OpenXML格式的兼容性要求更严格。

修复步骤

1. 补全填充样式设置

仅设置PatternType = Solid但未指定背景色,会导致Excel 2016渲染异常,需明确设置背景色(比如默认白色):

using (var colorrange = worksheet.Cells[counter, 1, i - 1, colHeaderCounter + 2])
{
    colorrange.Style.Fill.PatternType = ExcelFillStyle.Solid;
    colorrange.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.White); // 必须指定颜色
}

2. 修正边框设置逻辑

确保SetCellBorders方法完整设置所有边框,避免部分边框缺失导致的渲染错误:

private static void SetCellBorders(ExcelRange range)
{
    var border = range.Style.Border;
    border.Top.Style = ExcelBorderStyle.Thin;
    border.Left.Style = ExcelBorderStyle.Thin;
    border.Right.Style = ExcelBorderStyle.Thin;
    border.Bottom.Style = ExcelBorderStyle.Thin;
}

3. 优化列宽计算逻辑

原代码手动计算列宽的方式在Excel 2016中适配性差,改用EPPlus自带的自动列宽:

// 替换原列宽循环代码
worksheet.Cells[1, 1, j - 1, colHeaderCounter + 4].AutoFitColumns(5); // 最小宽度设为5,避免过窄

4. 移除无效单元格操作

删除代码中对空单元格的冗余赋值和无效范围样式设置,比如:

// 移除这两行空单元格赋值
// worksheet.Cells[counter, colHeaderCounter + 1].Value = string.Empty;
// worksheet.Cells[counter, colHeaderCounter + 2].Value = string.Empty;

// 移除超出数据范围的无效样式设置
// using (var range = worksheet.Cells[i, 1, i, colHeaderCounter + 2])
// {
//     range.Style.Font.Bold = true;
// }

5. 保存时指定兼容格式

保存ExcelPackage时明确指定Xlsx格式,确保Excel 2016能正确解析:

package.SaveAs(stream, new ExcelSaveOptions { SaveFormat = ExcelOpenXmlFormat.Xlsx });

内容的提问来源于stack exchange,提问作者ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:34:58