zoukankan      html  css  js  c++  java
  • 如何用代码读取Office Online Server2016的文档的备注信息

    前言

    在一个项目上客户要求读取office online server 2016的对文档的备注信息,如下图:

    以前思路老纠结在OOS这个在线上,总有以为这个信息存储在某个列表中,其实错了,这个备注信息其实就是word文档的备注信息,微软采用openxml开发的OOS,因此我也采用openxml读取备注信息的思路进行尝试,结果发现原来是可以的,成功效果图如下:

    注意:

    OpenXml格式只有office2007以及以上版本才支持的格式,如果office97-2003格式的文档是二进制格式的文档,openxml无法进行此操作,需要用代码另存为2007以上的格式。当然OOS在线编辑也不支持此office97-2003格式的文档进行备注信息,如下是office97-2003兼容格式的文档在OOS果然不支持备注信息的编辑,无批注按钮,如下图:

     

    实现

    1、 下载OpenXMLSDK2.5,如下下载地址:

    https://www.microsoft.com/en-us/download/details.aspx?id=30425

    2、 下载完毕后,引用如下2个DLL,如下图:

    3、 具体代码如下:(注意,sp文档库的文档要转成stream流的方式进行openxml操作)

    StringBuilder sb = new StringBuilder();
                #region//spsite
                using (SPSite site = new SPSite("http://sp2016:8001"))
                {
                    if (site != null)
                    {
                        #region//spweb
                        using (SPWeb web = site.OpenWeb(""))
                        {
                            if (web != null)
                            {
                                Stream docStream = web.GetFile("http://sp2016:8001/DocLib1/测试文档.docx").OpenBinaryStream();
    
                                #region//openxml读取备注信息
                                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(docStream, true))
                                {
                                    //body
                                    var body = wordDoc.MainDocumentPart.Document.Body;
                                    //parts
                                    var paras = body.Elements<Paragraph>();
                                    //得到备注信息
                                    Comments comments = wordDoc.MainDocumentPart.WordprocessingCommentsPart.Comments;
                                    //循环备注信息
                                    foreach (Comment item in comments)
                                    {
                                        //内容
                                        string content = item.InnerText;
                                        //作者
                                        string userID = item.Author;
                                        //时间
                                        string createT = item.Date.Value.ToString("yyyy-MM-dd HH:mm:ss");
                                        //sb
                                        sb.Append("作者:" + userID + ",备注内容:"+ content +",时间:"+ createT +"
    ");
                                    }
    
                                }
                                #endregion
                            }
                        }
                        #endregion
                    }
                }
                #endregion
                //赋值给textBox
            this.textBox1.Text = sb.ToString();

    效果

  • 相关阅读:
    C++ 多线程编程
    协程简介(coroutine)
    Yanhua Digimaster 3如何使用免焊适配器重置仪表板?
    Autel OTOFIX IM1 远程/在线技术支持指南
    Xhorse奥迪免焊适配器套装功能列表+常见问题
    如何通过 DDD 构建一辆汽车
    周末复习一波Linux,Linux常用命令总结,还有语法+案例
    Dubbo 基础知识
    GIT版本控制学习博客
    C++检测和定位内存泄漏
  • 原文地址:https://www.cnblogs.com/love007/p/5958528.html
Copyright © 2011-2022 走看看