C#Excel图表替代文字

时间:2016-02-17 13:44:49

标签: c# excel charts

我使用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$";

在这种情况下,当我尝试计数形状时,给我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.

1 个答案:

答案 0 :(得分:0)

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

ActiveWorkbook.Shapes.Items(1)

您正在引用工作表中嵌入的形状,在您的情况下,该形状也是包含图表的ChartObject。您正在将Alt文本分配给此ChartObject,即图表的容器,而不是图表本身。

好的,这对你有用。

自己工作表上的图表未嵌入到形状中。它既是图表又是工作表(不是工作表,也是工作表,而是图表工作表)。没有形状可以将Alt文本分配给。

您可以在Excel用户界面中将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文本和说明,因为我使用Excel UI分配它们,但代码没有意义。活动表是图表,它不包含任何形状,尤其是不包含名为“图表1”的形状。我不知道“图表1”的来源,因为在我将图表移到自己的图表表之前,图表是“图表2”。

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

我会报告错误,但你应该回到使用嵌入式图表。