我正在使用epplus
编辑现有的excel文件。 excel文件由多个工作表组成,在其中一个工作表中,我有一个指向其他工作表中数据的图表。
接下来,我将其中一个数据表(比如表A)复制到另一个(表B)。我想更新我的图表并添加一行指向工作表B.我不知道数据在哪一列。我的想法是从对应于表A数据的图表行中获取此信息。
我可以找到对应于表A的serie
,但我看不到有关列的信息。
如何提取此信息?
所以在没有得到答案之后,我通过反思并获得了潜在的私有领域来破解它。这不是我想要做的,但它现在解决了我的问题。
在这个例子中,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;
}