2014-03-31 47 views
5

我想從Excel文件中刪除圖表。 Excel文件是一個帶圖表的自動生成的歷史文件,問題是,每當我更新歷史時,它都會生成一個新圖表,但舊圖表必須被刪除... 這是我的代碼:C#刪除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」

編輯圖表: 現在的問題是,它傾斜刪除圖表:異常來自HRESULT:0x800A03EC

+0

是變量Excel._Chart asd f = null? –

+0

我甚至沒有到這一點,代碼停止在'Excel._Chart asdf = ...' – jochot

+0

@jochot 1.你是如何將圖表重命名爲'Chart01'? –

回答

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

我更改了圖表的名稱,就像在圖片中一樣,現在它找到了圖表,但它無法刪除它,異常是來自HRESULT的_Exception:0x800A03EC_ – jochot

+0

將圖表對象聲明爲「ChartObject '不'_Chart'? –

+1

好的,對不起,我的錯,你的代碼有效,謝謝! :) – jochot

0

嘗試將圖表名稱重命名爲普通英語,如:'Chart01'。 這個問題可能是由於Unicode支持。

+0

_找不到具有指定名稱的項目._ 同樣用「Chart01」,ArgumentException – jochot