C#删除Excel图表

joc*_*hot 5 c# excel charts

我想从Excel文件中删除图表.Excel文件是一个自动生成的带有图表的历史文件,问题是,每次更新历史记录时,它都会生成一个新图表,但必须删除旧图表...这是我的代码:

                Excel.Workbook ExcelWorkBook = ExcelApp.Workbooks.Open(path);
                ExcelApp.Visible = true;
                Excel.Worksheet Sheet = (Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
                Excel.Range range = Sheet.UsedRange;
                int i = 2;
                while (Convert.ToString((range.Cells[i, 1] as Excel.Range).Value2) != null)
                {
                    i++;
                }

                Excel.Range oRange;
                Excel._Chart oChart;
                Excel.Series oSeries;
                oChart = (Excel._Chart)ExcelWorkBook.Charts.Add(Missing.Value, Missing.Value,
                Missing.Value, Missing.Value);
                oRange = Sheet.get_Range("A2:H" + i).get_Resize(Missing.Value, 8);
                oChart.ChartWizard(oRange, Excel.XlChartType.xlLineStacked, Missing.Value,
                Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value,"Chart01");
                oSeries = (Excel.Series)oChart.SeriesCollection(1);
                oSeries.XValues = Sheet.get_Range("A2", "A" + i);
                oChart.Location(Excel.XlChartLocation.xlLocationAsObject, Sheet.Name);
Run Code Online (Sandbox Code Playgroud)

现在我需要在该代码之前删除现有的Chart.

就像是

            Excel._Chart asdf = Sheet.ChartObjects("Chart01").Chart;
            if (asdf != null)
            {
                asdf.Delete();
            }
Run Code Online (Sandbox Code Playgroud)

这没有找到名称为"Übersicht"的图表,但有一个标题为"Übersicht"的图表

编辑:现在的问题是,它无法删除图表:HRESULT的异常:0x800A03EC

小智 4

在 Excel 中,确保图表确实存在且具有该名称。

您可以使用重命名图表

Sheets("Sheet1").ChartObjects(1).Name = "Chart01"
Run Code Online (Sandbox Code Playgroud)

然后,当您单击电子表格视图中的图表时,您可以看到它实际上已重命名

在此输入图像描述

在 C# 方面,我建议一个像这样的最小示例

bool deleted = false;
try
{
    ChartObject myChart = ws.ChartObjects("Chart01");
    myChart.Delete();
    deleted = true;
}
catch
{
    MessageBox.Show("Chart with this name could not be found");
    //throw new Exception("Chart with this name could not be found");
}
finally
{
    MessageBox.Show("the chart was " + (deleted ? "deleted" : "not deleted"));
}
Run Code Online (Sandbox Code Playgroud)