Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c读取power Point中图像的超链接#_C#_Asp.net_Hyperlink_Ms Office_Office Interop - Fatal编程技术网

C# 如何使用c读取power Point中图像的超链接#

C# 如何使用c读取power Point中图像的超链接#,c#,asp.net,hyperlink,ms-office,office-interop,C#,Asp.net,Hyperlink,Ms Office,Office Interop,我已经使用c#将一幅图像插入powerpoint,并插入了一个指向该图片的超链接,而且效果很好。但现在我需要阅读我使用c#插入的该图片的超链接 而我使用c#将带有超链接的文本插入powerpoint,并通过以下方法从powerpoint中读取超链接 for (int i = 0; i < presentation.Slides.Count; i++) { foreach (var item in presentation.Slides[i + 1].

我已经使用c#将一幅图像插入powerpoint,并插入了一个指向该图片的超链接,而且效果很好。但现在我需要阅读我使用c#插入的该图片的超链接

而我使用c#将带有超链接的文本插入powerpoint,并通过以下方法从powerpoint中读取超链接

for (int i = 0; i < presentation.Slides.Count; i++)
        {
            foreach (var item in presentation.Slides[i + 1].Shapes)
            {
                var shape = (PPT.Shape)item;
                if (shape.HasTextFrame == MsoTriState.msoTrue)
                {
                    if (shape.TextFrame.HasText == MsoTriState.msoTrue)
                    {
                        var textRange = shape.TextFrame.TextRange;
                        var text = textRange.Text;

                        string address=textRange.ActionSettings[PPT.PpMouseActivation.ppMouseClick].Hyperlink.Address;
                    }
                }
            }

        }
for(int i=0;i
在变量address中获取超链接地址的地方,同样地,我需要从使用c#插入PPT的图像中获取超链接


有可能吗?

一种选择是在幻灯片上反复浏览形状,看看它们是否包含超链接。或者你应该在创建图片时给它一个id,然后根据给定的id找到它

    private void GetHyperlink()
    {
        Microsoft.Office.Interop.PowerPoint.Application objApp = new Microsoft.Office.Interop.PowerPoint.Application();
        objApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
        Presentations objPresSet = objApp.Presentations;
        Presentation p = objPresSet.Open("C:\test.ppt");
        Slide slide = p.Slides[1];
        // or Slide slide = objApp.ActiveWindow.View.Slide;

        for (int i = 1; i <= slide.Shapes.Count; i++)
        {
            //If the hyperlink address is filled then display it in MessageBox
            if (slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
        }
    }
然后,在读取文件时,可以使用标记或名称来区分形状:

            //tags check
            if (slide.Shapes[i].Tags.Count > 0 && slide.Shapes[i].Tags["MyPic"]!=null && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
            //or
            //name check
            if (slide.Shapes[i].Name.Equals("MyPic", StringComparison.InvariantCultureIgnoreCase) && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);

@vDhhnal:但它也可能显示其他na的超链接。?是的,您必须首先通过其ID找到正确的形状,然后才能轻松获得超链接。但是如何区分textframe和diagramya okie之间的形状,我将尝试一下。@Arshad-对于textframe,我想HasTextFrame属性将为真。您可以检查此属性为false的形状。。。
            //tags check
            if (slide.Shapes[i].Tags.Count > 0 && slide.Shapes[i].Tags["MyPic"]!=null && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
            //or
            //name check
            if (slide.Shapes[i].Name.Equals("MyPic", StringComparison.InvariantCultureIgnoreCase) && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);