使用epplus复制Excel图形行

问题描述 投票:-1回答:1

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

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

我可以找到对应于表A的serie,但我看不到有关列的信息。

如何提取此信息?

excel epplus
1个回答
0
投票

所以在没有得到答案之后,我通过反思并获得了潜在的私有领域来破解它。这不是我想要做的,但它现在解决了我的问题。

在这个例子中,oldSheetName是我要复制其行的工作表。我希望有一天能帮助别人。

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;

}
© www.soinside.com 2019 - 2024. All rights reserved.