使用 epplus 复制 Excel 图表线

Duplicate Excel graph line using epplus

我正在使用 epplus 编辑现有的 excel 文件。 excel 文件由几个 sheet 组成,在其中一个 sheet 中,我有一个图表指向另一个 sheet 中的数据。

接下来,我将其中一个数据 sheets(比如 sheet A)复制到另一个数据(sheet B)。我想更新我的图表并向其添加一条指向 sheet B 的线。我不知道数据在哪一列中。我的想法是从对应于 sheet A 的数据的图表行中获取此信息。

我可以找到sheet A对应的serie,但是我看不到关于列的信息在哪里。

如何提取此信息?

所以在没有得到答案之后,我通过反射破解了它并获取了底层的私有字段。这不是我想要做的,但它暂时解决了我的问题。

在此示例中,oldSheetName 是我要复制其行的 sheet。我希望有一天这对某人有所帮助。

foreach (ExcelChartSerie serie in chart.Series)
{
    if (!serie.HeaderAddress.Address.Contains(oldSheetName)) continue;

    FieldInfo property = serie.GetType().GetField("_node", BindingFlags.NonPublic | BindingFlags.Instance);

    XmlNode node = property.GetValue(serie) as XmlNode;

    string xval = node["c:xVal"]?["c:numRef"]?["c:f"]?.InnerText
                                              .Replace(oldSheetName + "!", "").Replace("$", "") ?? "";

    string yval = node["c:yVal"]?["c:numRef"]?["c:f"]?.InnerText
                                              .Replace(oldSheetName + "!", "").Replace("$", "") ?? "";

    var newSerie = chart.Series.Add(newSheet.Cells[xval], newSheet.Cells[yval]);

    newSerie.HeaderAddress = new ExcelAddress(serie.HeaderAddress.Address.Replace(oldSheetName, newSheet.Name));

    break;

}