删除Excel图表

5

我想从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);

现在我需要在这段代码之前删除现有的图表。
类似于:
```python # 删除现有的图表 chart.remove() ```
Excel._Chart asdf = Sheet.ChartObjects("Chart01").Chart;
if (asdf != null)
{
    asdf.Delete();
}

这里没有找到名称为“Übersicht”的图表,但有一个标题为“Übersicht”的图表。
编辑: 现在的问题是无法删除该图表:HRESULT 异常:0x800A03EC

变量 Excel._Chart asdf 是否为 null? - Karol Marian Słuszniak
我甚至没有达到那个点,代码停在Excel._Chart asdf =... - jochot
@jochot 你是怎么将图表重命名为Chart01的? - user2140173
我手动进入Excel文件并更改了名称,然后通过程序自身自动更改(Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value,"Chart01");),但两者都没有起作用。 - jochot
也许不是这个表格...尝试使用Sheet.ChartObjects.Count,如果返回大于0,则通过ActiveSheet.ChartObjects(1).Name打印图表名称。 - Karol Marian Słuszniak
2个回答

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

我已经像你的图片一样更改了图表的名称,现在它可以找到该图表,但无法删除它,异常为“HRESULT: 0x800A03EC”。 - jochot
将您的图表对象声明为 ChartObject 而不是 _Chart - user2140173
@jochot,你不需要在问题中提供解决方案。当你接受一个答案时,这意味着这是适合你的解决方案。我会保留你的问题,以便未来的访问者可能遇到类似甚至相同的问题。 - user2140173
好的,不知道那个;现在的问题是,如果里面没有图表,我会得到一个异常,而且我不能像这样做 if (Sheet.ChartObjects("Chart 1")),因为我在这里也会得到一个异常。 - jochot
1
@jochot 只需用 try/catch/finally 包装您的代码即可。我不确定我能在这方面提供更多帮助。如果您仍然无法解决问题,请考虑提出一个新问题,因为我认为这个问题现在应该已经解决了。 - user2140173

0

尝试将图表名称重命名为简单的英文,例如:“Chart01”。 问题可能是由于Unicode支持引起的。


找不到指定名称的项。同时也出现了“Chart01”的参数异常。 - jochot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接