C#Excel图表替代文本

C#Excel图表替代文本,c#,excel,charts,C#,Excel,Charts,我正在使用Visual Studio 2013与Excel 2013连接以生成图表。我尝试访问图表上的备选文本。如果工作表上有图表,我将使用此脚本: Excel.Application oXL; Excel.Workbook oWB; Excel.Worksheet oSheet; oXL =(Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObje

我正在使用Visual Studio 2013与Excel 2013连接以生成图表。我尝试访问图表上的备选文本。如果工作表上有图表,我将使用此脚本:

        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$";
        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,我不知道如何访问替代文本

我在VBA中也检查了此代码,但是在C#事件中,如果我使用此代码:

        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$";
        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

在Excel中,可以将Alt文本指定给嵌入工作表或图表工作表中的形状。内嵌在工作表中的图表实际上是封闭在一个形状中的(一种称为ChartObject的特殊形状)。当你使用

ActiveWorkbook.Shapes.Items(1)

您正在引用工作表中嵌入的形状,在本例中,该形状也是包含图表的ChartObject。您将Alt文本指定给此图表对象(图表的容器),而不是图表本身

好吧,这对你有用

图表自身图纸上的图表未嵌入形状中。它既是图表又是工作表(不是工作表,工作表也是工作表,而是图表工作表)。没有可指定Alt文本的形状

可以在Excel UI中将Alt文本指定给图表工作表,如果将图表的位置从图表工作表更改为嵌入在另一个工作表中的对象,Excel将记住Atl文本

但是图表工作表的Alt文本的OM看起来已损坏。如果在将Alt文本指定给嵌入式图表(ChartObject名称为“chart 1”)时记录Excel VBA宏,则代码如下:

ActiveSheet.Shapes("Chart 1").Title = "Embedded Chart Alt Text"
ActiveSheet.Shapes("Chart 1").AlternativeText = "Embedded Chart Description"
如果在将Alt文本指定给图表工作表(工作表名称“Chart1”)时记录Excel VBA宏,则会得到几乎相同的代码:

ActiveSheet.Shapes("Chart 1").Title = "Chart Sheet Alt Text"
ActiveSheet.Shapes("Chart 1").AlternativeText = "Chart Sheet Description"
Alt文本和描述被保存,因为我使用了excelui来分配它们,但是代码没有意义。活动表就是图表,它不包含任何形状,特别是不包含名为“图表1”的形状。我不知道“图表1”从何而来,因为在我把它移到自己的图表表之前,它是“图表2”

这是一个错误。我在Excel对象模型中看不到为图表页替换文本的钩子(事实上,它只对嵌入的形状有意义,因为它用于嵌入到网页中的图像)。将Alt文本指定给图表工作表时记录的代码没有意义,回放该代码会导致错误,因为找不到“图表1”


我将报告此错误,但您可能应该继续使用嵌入式图表。

为什么将此标记为C#?因为我在Visual Studio 2013中使用C#连接Excel 2013,我恐怕无法使用嵌入式图表。我有太多了。还有其他想法吗?如何读取这些属性?没有。VBA对象模型不允许在图表页上显示这些属性。图表太多是什么意思?看起来,通过根据某种方案将特定的元素嵌入到一起,可以使它们更有条理。