C#删除Excel图表

时间:2014-03-31 12:40:17

标签: 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);

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

这样的东西
            Excel._Chart asdf = Sheet.ChartObjects("Chart01").Chart;
            if (asdf != null)
            {
                asdf.Delete();
            }

这找不到名称为“Übersicht”的图表,但有一个标题为“Übersicht”的图表

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

2 个答案:

答案 0 :(得分:4)

在Excel中,确保图表实际存在并带有名称。

您可以使用

重命名图表
Sheets("Sheet1").ChartObjects(1).Name = "Chart01"

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

enter image description here

在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"));
}

答案 1 :(得分:0)

尝试将图表名称重命名为普通英语,如:'Chart01'。 问题可能是由于Unicode支持。