2016-02-17 19 views
0

我正在使用Visual Studio 2013與Excel 2013連接來生成圖表。我嘗試訪問圖表上的替代文字。如果圖是牀單上,我使用這個腳本:C#Excel圖表替代文本

 Excel.Application oXL; 
     Excel.Workbook oWB; 
     Excel.Worksheet oSheet; 
     oXL =(Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
     oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
     oSheet = (Excel.Worksheet)oWB.ActiveSheet; 
     oSheet.Shapes.Item(1).Title = "2016-02-17 A$16$"; 

直到圖表是在片材中的工作,問題是當圖表是獨立的圖表,在這種情況下,我使用此代碼:

 Excel.Application oXL; 
     Excel.Workbook oWB; 
     Excel.Chart cht; 
     oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

     oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
     cht = (Excel.Chart)oWB.ActiveChart; 
     chart.Shapes.Item(1).Title = "2016-02-17 A$16$"; 

在這種情況下當我嘗試計數形狀是給我0,我不知道如何獲得替代文字。

我檢查了VBA這個問題,以及,然而,在C#事件,如果我使用此代碼:

 Excel.Application oXL; 
     Excel.Workbook oWB; 
     Excel.Worksheet oWS; 


     oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
     oWB = (Excel.Workbook)oXL.ActiveWorkbook; 

     oWS = (Excel.Worksheet)oWB.Worksheets[1]; 

     oWS.Shapes.Item(1).Title = "2016-02-17 A$16$"; 
     oWS.Shapes.Item(1).AlternativeText= "2016-02-17 A$16$"; 

如果圖表獨立圖表片,形狀的計數仍然是0。

+0

爲什麼標記爲C#? –

+0

因爲我在Visual Studio 2013中使用C#來連接Excel 2013 –

回答

0

在Excel中,可以將Alt文本分配給嵌入工作表或圖表工作表中的形狀。嵌入在工作表中的圖表實際上被包含在一個形狀中(稱爲ChartObject的特殊形狀)。當您使用

ActiveWorkbook.Shapes.Items(1)

你引用嵌入在工作表中的形狀,而你的情況也是包含創建圖表的ChartObject。您正在將Alt文本分配給此ChartObject(圖表的容器),而不是圖表本身。

好的,所以這是爲你工作。

它自己的圖表中沒有嵌入圖形。它既是圖表也是圖紙(不是工作表,也是圖紙,而是圖表)。沒有形狀可以將Alt文本分配給。

您可以將Excel文本分配給Excel用戶界面中的圖表,並且如果將圖表的位置從圖表更改爲另一個表格中嵌入的對象,則Excel會記住Atl文本。

但是,圖表工作表的替代文本的OM看起來已損壞。如果我錄製一個Excel VBA宏同時分配的替代文字來嵌入圖表(與ChartObject名「圖1」),這是代碼:

ActiveSheet.Shapes("Chart 1").Title = "Embedded Chart Alt Text" 
ActiveSheet.Shapes("Chart 1").AlternativeText = "Embedded Chart Description" 

如果我錄製一個Excel VBA宏同時分配替換文本到圖表工作表(表名「Chart1」),我得到幾乎相同的代碼:

ActiveSheet.Shapes("Chart 1").Title = "Chart Sheet Alt Text" 
ActiveSheet.Shapes("Chart 1").AlternativeText = "Chart Sheet Description" 

alt文本和說明都省了,因爲我用Excel的UI給它們分配,但代碼是沒有意義的。 activesheet是圖表,它不包含任何形狀,特別是沒有一個名爲「Chart 1」的圖形。我不知道「圖表1」來自哪裏,因爲圖表是「圖表2」,然後我將它移至自己的圖表。

這是一個錯誤。我可以在Excel對象模型中看到沒有任何鉤子可以用於圖表工作表的替代文本(事實上,對於嵌入形狀,因爲它用於嵌入在網頁中的圖像中,所以它確實是有意義的)。將Alt文本分配給圖表表單時記錄的代碼沒有意義,並且回放會導致錯誤,因爲找不到「圖表1」。

我會報告錯誤,但您應該回到使用嵌入式圖表。

+0

恐怕我不能使用嵌入圖表。我有太多了。任何其他的想法,如何閱讀這些屬性? –

+0

否.VBA對象模型不允許在圖表上顯示這些屬性。 –

+0

你是什麼意思,太多圖表?看起來你可以通過根據某種方案嵌入某些特定組件來使它們更加有組織。 –