Excel打开xml sdk – 控制图表位置

我试图找出如何获得在工作表上的现有图表的位置,并了解它“隐藏”的范围(列和行)…
我有图表部分和图表元素。

图表包含两部分 – 图表本身和包含图表位置信息的graphics元素。 因此,要找出图表的位置,您需要findDrawingsPart 。 实际位置存储在一个TwoCellAnchor ,其中包含绘图对象的左上angular和右下angular单元格的从零开始的列和行索引。 由于绘图对象不必位于单元格的边界上,因此也有一个偏移量来显示绘图对象在单元格中的起始位置。 这个值是EMU的,除非紧跟着一个单位标识符。

以下代码将迭代所有ChartParts中的DrawingsPart所有ChartParts ,并输出TwoCellAnchor信息。

 public static void FindCharts(string filename) { using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false)) { foreach (WorksheetPart wsp in spreadsheetDocument.WorkbookPart.WorksheetParts) { if (wsp.DrawingsPart != null) { foreach (ChartPart chart in wsp.DrawingsPart.ChartParts) { TwoCellAnchor tca = wsp.DrawingsPart.WorksheetDrawing.Descendants<TwoCellAnchor>().FirstOrDefault(); if (tca != null) { Console.WriteLine("A Chart starts at Column {0} ({1}), Row {2} ({3}) and ends at Column {4} ({5}), Row {6} ({7})", tca.FromMarker.ColumnId.Text, tca.FromMarker.ColumnOffset.Text, tca.FromMarker.RowId.Text, tca.FromMarker.RowOffset.Text, tca.ToMarker.ColumnId.Text, tca.ToMarker.ColumnOffset.Text, tca.ToMarker.RowId.Text, tca.ToMarker.RowOffset.Text ); } else { Console.WriteLine("Couldn't find position of chart {0}", chart.ChartSpace.LocalName.ToString()); } } } } } }