删除 Excel 图表

Delete Excel Chart

提问人:jochot 提问时间:3/31/2014 最后编辑:John Saundersjochot 更新时间:12/30/2021 访问量:1869

问:

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

现在,我需要删除该代码之前的现有图表。

类似的东西

Excel._Chart asdf = Sheet.ChartObjects("Chart01").Chart;
if (asdf != null)
{
    asdf.Delete();
}

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

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

C# Excel 图表

评论

0赞 Karol Marian Słuszniak 3/31/2014
变量 Excel._Chart asdf = null 吗?
0赞 jochot 3/31/2014
我什至没有达到这一点,代码停止在Excel._Chart asdf =...
0赞 3/31/2014
@jochot 1.您如何将图表重命名为??Chart01
0赞 jochot 3/31/2014
手动,我进入 Excel 文件并更改了名称,然后由程序本身自动更改 () 两者都不起作用Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value,"Chart01");
0赞 Karol Marian Słuszniak 3/31/2014
也许它不是这张纸......如果 ActiveSheet.ChartObjects(1) 返回超过 0 个打印图表名称,请尝试 Sheet.ChartObjects.Count。名字

答:

0赞 tal.tzf 3/31/2014 #1

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

评论

0赞 jochot 3/31/2014
未找到具有指定名称的项。对于“Chart01”,ArgumentException 也是如此
4赞 user2140173 3/31/2014 #2

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

评论

0赞 jochot 3/31/2014
我更改了图表的名称,就像您的图片一样,现在它找到了图表,但无法删除它,异常是 HRESULT 的异常:0x800A03EC
0赞 3/31/2014
将图表对象声明为 not ?ChartObject_Chart
0赞 3/31/2014
@jochot您不需要在问题中提供解决方案。当您接受答案时,这意味着这是适合您的解决方案。我会把你的问题留给任何可能遇到类似甚至相同问题的未来访客。
0赞 jochot 3/31/2014
好吧,不知道;)现在的问题是,如果那里没有图表,我会得到一个异常,我不能做类似的事情,因为我在这里也得到了一个异常if (Sheet.ChartObjects("Chart 1"))
1赞 3/31/2014
@jochot只需用 try/catch/finally 包装您的代码。不确定我能在这里提供更多帮助。如果您仍然无法解决它,请考虑提出一个新问题,因为我相信这个问题现在应该得到解决。