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

如何用EPPLUS/Open XML设置XY散点线图标签垂直(45°)方向?

解决EPPlus散点折线图X轴标签垂直显示的问题

用EPPlus生成eChartType.XYScatterLinesNoMarkers类型图表后,若想通过OpenXML设置X轴标签垂直以避免拥挤,直接参考普通图表的分类轴设置方案会出现空引用错误——因为散点图的X轴是数值轴(ValueAxis),而非普通图表的分类轴(CategoryAxis)。

以下是可行的代码实现:

using System.IO;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Drawing.Charts;
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;

// 加载目标Excel文件
using (var package = new ExcelPackage(new FileInfo("你的文件路径.xlsx")))
{
    var worksheet = package.Workbook.Worksheets["目标工作表名"];
    var scatterChart = worksheet.Drawings["目标图表名"] as ExcelScatterChart;

    // 将EPPlus包写入内存流,用于OpenXML操作
    using (var stream = new MemoryStream())
    {
        package.SaveAs(stream);
        stream.Position = 0;

        using (var doc = SpreadsheetDocument.Open(stream, true))
        {
            // 获取对应工作表的ChartPart
            var chartPart = doc.WorkbookPart.WorksheetParts.First(wp => wp.Worksheet.Name == "目标工作表名")
                .DrawingsPart.ChartParts.First();
            
            var chart = chartPart.ChartSpace.Chart;

            // 定位散点图的X轴(ValueAxis类型)
            var xValueAxis = chart.Descendants<ValueAxis>().FirstOrDefault(axis => axis.AxisId?.Val == scatterChart.XAxis.AxisId);
            if (xValueAxis != null)
            {
                // 若TickLabels不存在则创建
                var tickLabels = xValueAxis.TickLabels ?? new TickLabels();
                if (xValueAxis.TickLabels == null)
                {
                    xValueAxis.Append(tickLabels);
                }

                // 设置标签旋转为90度(垂直显示)
                tickLabels.Rotation = new Rotation { Val = 90 };
            }

            chartPart.ChartSpace.Save();
        }

        // 将修改后的内容写回文件
        using (var fileStream = new FileStream("你的文件路径.xlsx", FileMode.Create))
        {
            stream.WriteTo(fileStream);
        }
    }
}

关键说明

  • 散点图的X轴属于ValueAxis类型,而非普通柱状图/折线图的CategoryAxis,这是之前出现空引用的核心原因。
  • 代码中通过AxisId匹配EPPlus生成的X轴,确保定位准确;若未设置轴ID,也可通过顺序(第一个ValueAxis)定位。
  • 设置Rotation.Val = 90即可让标签垂直显示,解决拥挤问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:52:20