首页 > 其他分享 >【Openxml】如何为OpenXml元素创建超链接

【Openxml】如何为OpenXml元素创建超链接

时间:2024-03-01 17:33:41浏览次数:20  
标签:Openxml HyperlinkOnClick 超链接 ppaction 跳转 var new presentationDocument OpenXml

已知在OpenXml有以下几种超链接

功能 说明
跳转页面 跳转某一页:ppaction://hlinksldjump
跳转第一页:ppaction://hlinkshowjump?jump=firstslide
跳转最后一页:ppaction://hlinkshowjump?jump=lastslide
跳转下一页:ppaction://hlinkshowjump?jump=nextslide
跳转上一页:ppaction://hlinkshowjump?jump=previousslide
跳转文件 跳转打开本地文件:ppaction://hlinkfile
跳转打开Office支持的主流文档类文件(office系文档、pdf、txt...):ppaction://hlinkpres?slideindex=1&slidetitle=
跳转网页

例子

我们先准备好这样一份pptx文件,如图:

我们分别为四个形状插入超链接,代码如下:

    internal class Program
    {
        static void Main(string[] args)
        {

            var mainExecuteDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            var pptFilePath = Path.Combine(mainExecuteDirectory!, "YourPresentation.pptx");


            // 打开一个PPTX文档
            using PresentationDocument presentationDocument = PresentationDocument.Open(pptFilePath, true);

            var slideIdList = presentationDocument.PresentationPart!.Presentation.SlideIdList;
            if (slideIdList is null || !slideIdList.Any())
            {
                return;
            }

            var firstSlideId =(SlideId) slideIdList.First();
            // 获取页面内容
            var firstSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(firstSlideId.RelationshipId!.Value!);



            //设置跳转到第三页
            var targetSlideId = (SlideId) slideIdList.ChildElements[2];
            var targetSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(targetSlideId.RelationshipId!.Value!);
            var relationshipId = firstSlidePart.CreateRelationshipToPart(targetSlidePart);

            var shapeElements = firstSlidePart.Slide.CommonSlideData!.ShapeTree!.Elements<Shape>().ToList();

            //第一个形状设置跳转第三页
            shapeElements[0]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
            {
                Action = PptAction.SlideJump,
                Id = relationshipId
            };


            //第二个形状设置跳转下一页
            var shapeElement = shapeElements[1];
            shapeElement.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
            {
                Action = PptAction.JumpNextSlide,
            };

            var filePath = Path.Combine(mainExecuteDirectory!, "两只老虎-原声.mp3");
            var fileHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri(filePath, UriKind.Absolute), true);
            //第三个形状设置打开文件
            shapeElements[2]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
            {
                Action = PptAction.OpenFile,
                Id = fileHyperlinkRelationship.Id
            };

            //第四个形状设置打开网页链接
            var httpHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri($"http://www.baidu.com", UriKind.Absolute), true);
            shapeElements[3]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
            {
                Id = httpHyperlinkRelationship.Id
            };

            // 保存并关闭文档
            presentationDocument.Save();
        }
    }

    public static class PptAction
    {
        /// <summary>
        /// 跳转页面
        /// </summary>
        public const string SlideJump = "ppaction://hlinksldjump";

        /// <summary>
        /// 跳转下一页
        /// </summary>
        public const string JumpNextSlide = "ppaction://hlinkshowjump?jump=nextslide";

        /// <summary>
        /// 打开文件
        /// </summary>
        public const string OpenFile = "ppaction://hlinkfile";

    }

效果如下:


源码

源码链接

标签:Openxml,HyperlinkOnClick,超链接,ppaction,跳转,var,new,presentationDocument,OpenXml
From: https://www.cnblogs.com/ryzen/p/18047555

相关文章

  • 超链接中设置href不跳转的三种方法
    javascript:void(0)//阻止链接跳转,URL不会有任何变化<ahref="javascript:void(0)"rel="nofollowugc">点击此处</a>//虽然阻止了链接跳转,但URL尾部会多个#,改变了当前URL。(#主要用于配合location.hash)<ahref="#"rel="nofollowugc">点击此处<......
  • 轻松导航:教你在Excel中添加超链接功能
    前言超链接是指在网页或电子文档中常见的元素,它的主要作用是将一个文本或图像与另一网页、文件或资源链接起来,从而使用户能够通过点击该链接跳转到目标资源、超链接可以起到导航以及引用的作用。超链接通常有以下几种用途:网页链接文档链接内部定位链接电子邮件链接在Java......
  • 帆软报表如何在超链接传入参数,又如何在SQL中接收参数?
    1、这是帆软的超链接http://localhost:8075/webroot/decision/view/report?viewlet=3C%252F%25E6%25B5%258B%25E8%25AF%2595%252xxxxxxx.cpt添加一个fileName的参数。http://localhost:8075/webroot/decision/view/report?viewlet=3C%252F%25E6%25B5%258B%25E8%25AF%2595%252xx......
  • 关于NPOI word 异常解决NPOI.OpenXml4Net.Exceptions.OpenXML4NetRuntimeException:“
    NPOI.OpenXml4Net.Exceptions.OpenXML4NetRuntimeException:“Failtosave:anerroroccurswhilesavingthepackage:Mustsupportwriting源代码stringfileContent=File.ReadAllText(filePath,Encoding.Default);Dictionary<string,string>dic=......
  • C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)
    C#读写Excel四种方案(OpenXml、NPOI、EPPlus、Spire.Office)翔星有10年+工作经验,高级软件工程师,可以解决各种问题​关注 你经常看TA的内容前言在项目中需要使用C#读写Excel,每天定时将数据输出到Excel表格中。在参考了很多的方案后,找到了4......
  • python如何提取excel表格中的超链接
    importxlrddefget_wb(path):wb=xlrd.open_workbook(path)returnwbdefget_wb(path):wb=xlrd.open_workbook(path)returnwbdefget_hyperlink(wb,sheet_name,cell):worksheet=wb.sheet_by_name(sheet_name)hyperlink=worksheet.......
  • url特殊字符传递参数解决方法(特指超链接)
    需要进行转码:十六进制值1.+URL中+号表示空格%2B2.空格URL中的空格可以用+号或者编码%203./分隔目录和子目录%2F4.?分隔实际的URL和参数%3F5.%指定特殊字符%256.#表示书签%237.&URL中指定的参数间的分隔符%268.=URL中指定参数的值%3D//带有特殊字符的......
  • 如何在 Dash 中使表格的单元格值超链接? (使用 Plotly、Dash、Pandas 等)
    要在Dash中使表格的单元格值超链接,您可以使用dash_table.DataTable组件和Pandas数据框。以下是一个基本示例代码,演示了如何将表格中的某些单元格值转换为超链接:首先,确保已完成以下安装:pipinstalldashpipinstallpandas然后,使用以下代码创建一个具有超链接单元格值的Dash......
  • url特殊字符传递参数解决方法(特指超链接)
    需要进行转码:十六进制值1.+URL中+号表示空格%2B2.空格URL中的空格可以用+号或者编码%203./分隔目录和子目录%2F4.?分隔实际的URL和参数%3F5.%指定特殊字符%256.#表示书签%237.&URL中指定的参数间的分隔符%268.=URL中指定参数的值%3D//带有特殊字......
  • 超链接-跳转页面,跳转到文件,锚点
    一、<ahref="链接路径">链接名字</a>一般是默认效果,在当前页面中打开二、在当前页面打开页面:target="_self"<ahref="链接路径" target="_self">链接名字</a>三、在新标签打开页面:target="_blank"<ahref="链接路径"target="......