精华内容
下载资源
问答
  • word文档时间修改

    2018-03-08 14:46:58
    word批量时间修改器!一键修改就是这么方便!!!!!!
  • Unity创建和修改本地Word文档

    千次阅读 2019-10-10 17:02:03
    最多搞个截图就行了,最近客户突然提出要将实验报告(UGUI,包括图片、按钮、输入框、文字等),这就有点懵,好在经过一段时间的研究,可以在Unity内通过NPOI类库(没听说的可以找度娘问一下)创建和修改Word文档,...

    之前做项目基本都是在本地读读数据,最多搞个截图就行了,最近客户突然提出要将实验报告(UGUI,包括图片、按钮、输入框、文字等),这就有点懵,好在经过一段时间的研究,可以在Unity内通过NPOI类库(没听说的可以找度娘问一下)创建和修改Word文档,OK,进入正题吧!

    一、导入NPOI类库文件

    我直接把所需要的dll文件全都打包出来了,在官网下的比较麻烦,不怕麻烦的童靴可以自己去官网逛一下学习学习,以下附上链接,可直接在百度网盘下载(提取码:kkkk)。
    https://pan.baidu.com/s/1fE9hmm62ms_KgPj5HffEVA

    别忘了类库文件一定要放在Plugins文件夹里面才能在C#中引用哦,在引用后发现报错,这里需要把Unity的Scripting Runtime Version改成 .NET 4.6 的(我是用Unity 2017.2.0 测试的)
    在这里插入图片描述
    在这里插入图片描述

    二、创建Word文档

    先来引用以下吧

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using NPOI.XWPF.UserModel;
    using System.IO;
    using System;
    

    定义好文件路径、文件名称,在这里我用一个Path准备缝合路径

        /// <summary>
        /// 文件路径
        /// </summary>
        private const string filePath = @"C:/Users/Administrator/Desktop";
    
        /// <summary>
        /// 文件名称
        /// </summary>
        private string fileName = "david.docx";
    
        private string path;
        
        /// <summary>
        /// word文档
        /// </summary>
        private XWPFDocument doc = new XWPFDocument();
        
        private void Start()
        {
            //缝合路径
            path = Path.Combine(filePath, fileName);
        }
    

    开始写入文档并保存在本地,这里涉及到字体大小、字体颜色、段落内容。

        /// <summary>
        /// 创建段落
        /// </summary>
        /// <param name="_alignment">对齐方式</param>
        /// <param name="_fontSize">字体大小</param>
        /// <param name="_color">字体颜色(16进制)</param>
        /// <param name="_content">内容</param>
        private void CreateParagraph(ParagraphAlignment _alignment, int _fontSize,
            string _color, string _content)
        {
            XWPFParagraph paragraph = doc.CreateParagraph();
            paragraph.Alignment = _alignment;
            XWPFRun run = paragraph.CreateRun();
            run.FontSize = _fontSize;
            run.SetColor(_color);
            run.FontFamily = "宋体";
            run.SetText(_content);
            FileStream fs = new FileStream(path, FileMode.Create);
            doc.Write(fs);
            fs.Close();
            fs.Dispose();
            Debug.Log("写入成功");
        }
    

    OK,现在回到Unity后把该脚本随便挂到一个游戏物体身上,引用这个方法,运行游戏会发现在指定路径下创建了一个Word文档(并且有我们写入的内容哦)。
    在这里插入图片描述在这里插入图片描述

    三、修改本地文档内容

    个人感觉创建文件并没有什么卵用,举个例子,咱们做一个带有考核的项目,最终的实验报告文字和图片基本上都是固定的,需要改动的只有姓名、学号、成绩等等字段对不对,那么问题来了,如果所有的内容都是通过API手动创建的话(能够想到有多麻烦,文字居中、标题大小、创建表格等等等。。。)。因此修改文档内容才是最高效和简便的方法,直接进入主题。

    首先,当然先搞一个Word文档了,PS:这里的路径一定要和Unity里面的路径保持一致。
    在这里插入图片描述
    这个{$test}就相当于一个字段,为了与其他文字或者符号区分,这里我只是为了方便测试,才用test代替,当然也可以用score、name等等名称,最关键的要来了。

        /// <summary>
        /// 读写文件
        /// </summary>
        private void ReadWriteFile()
        {
            path = Path.Combine(filePath, fileName);
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            XWPFDocument doc = new XWPFDocument(fs);
    
            //遍历段落
            foreach (var para in doc.Paragraphs)
            {
                string oldText = para.ParagraphText;
    
                if (oldText == "")
                {
                    continue;
                }
                //记录段落文本
                string tempText = para.ParagraphText;
    
                //查找标记并修改内容
                if (tempText.Contains("{$test}"))
                {
                    tempText = tempText.Replace("{$test}", "我的测试");
                }
    
                //替换内容
                para.ReplaceText(oldText, tempText);
            }
    
            FileStream output = new FileStream(path, FileMode.Create);
            doc.Write(output);
            fs.Close();
            fs.Dispose();
            output.Close();
            output.Dispose();
    
            Debug.Log("修改文件");
        }
    

    通过指定路径读取Word文档,然后遍历每个段落,可以看到,通过API可以获取文档内是否有我们自定义的字段,找到了可以直接替换成我们需要改成的内容,最后在进行输出,文件就得到更新了,是不是很简单。
    在这里插入图片描述
    OK,内容最终得到了完美的修改,是不是很方便呢,实验报告生成后直接打印出来就可以看到考核的成绩了。

    展开全文
  • 其实Word本身就能做到的,能够在每次保存文档时自动更新修改时间,当然如果没做任何更改只是点击保存按钮,Word是不会上当的。 以Word2007为例,方法如下: 1、将光标定位到需要插入日期的位置,如:修改日期: 2...

    当我们在撰写某些重要文档时除了定义版本号可能还想加上修改时间等信息,可是不是每个修改者每次修改文档后都能记得同时更新这个时间。

    其实Word本身就能做到的,能够在每次保存文档时自动更新修改时间,当然如果没做任何更改只是点击保存按钮,Word是不会上当的。

    以Word2007为例,方法如下:

    1、将光标定位到需要插入日期的位置,如:修改日期:

    2、插入-》文档部件-》域

    3、域窗口中,“类别”选择“日期和时间”,“域名”选择“SaveData”,“日期格式”根据自己需要选择,

    如果都不喜欢可以自己编辑,如希望是“2012-08-08 13:12” 的格式,输入“yyyy-M-d H:mm”

    4、最后确定就可以了

    第2步骤也可以通过以下步骤进入域窗口:

    插入-》日期和时间,随便选种格式,右下角选中“自动更新”,插入日期后,右键单击,菜单中选择“编辑域”

     

    展开全文
  • 在前面的实例中已经详细介绍了怎样使用C#创建Word文档,本实例将会使用C#方便的向指定的Word文档中输入文本内容。实例运行效果如图1所示。 图1 向Word文档中写入文字 实例运行中单击“创建Word文档”按钮,会根据...

    实例说明
    Word有着强大的文本编辑功能,我们可以轻松的在Word中输入文本内容,更改文字字体,设置文字大小、颜色,方便的对文本内容排版。在前面的实例中已经详细介绍了怎样使用C#创建Word文档,本实例将会使用C#方便的向指定的Word文档中输入文本内容。实例运行效果如图1所示。
     
    图1  向Word文档中写入文字
    实例运行中单击“创建Word文档”按钮,会根据用户选择的路径位置创建Word文档并向文档中添加文字,而文档的名称就是当前系统日期与时间。创建的Word文档如图2所示。
     
    图2  被写入文字的Word文档
    ? 关键技术
    本实例重点在于向读者介绍怎样使用Word文档中Range属性向Word中添加文本信息,下面对本实例用到的关键技术进行详细讲解。
    读取或设置Word文档中的文本内容的方式基本相同,首先是得到文本内容的范围,然后通过范围对象读取或设置文本信息。实例中首先使用了Paragraphs集合中的索引获取Word文档中的段落对象,然后通过Paragraph段落对象的Range属性得到文档中段落的范围,最后通过范围对象的Text属性获取或设置段落内的文本信息。
      说明&#x

    展开全文
  • Swagger文档Word 文档

    千次阅读 2019-06-13 09:10:00
    点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:JmCuicnblogs.com/jmcui/p/8298823.html技术经验交流:点击入群一...

    点击上方“Java知音”,选择“置顶公众号”

    技术文章第一时间送达!


    作者:JmCui

    cnblogs.com/jmcui/p/8298823.html


    技术经验交流:点击入群

    一、前言

    为什么会产生这个需求呢?

    我们公司作为乙方,老是被客户追着要一份API文档,当我们把一个 Swagger 文档地址丢给客户的时候。客户还是很不满意,嫌不够正式!!死活坚持要一份 word 文档 。然后领导给了个接口模板,就把这个活交给我了……我去,近10个微服务,几百个接口,这不得要了我的命啊(最后整理出来将近200页的 word 文档)。最后,还是领导有办法:要不我们把Swagger的 json文件转成word文档吧!

    一直坚持一句话。作为使用者,人要迁就机器;作为开发者,要机器迁就人。

    二、思路

    领导提供了一个接口模板,类似下面这样,其实就是一个word的table页。想到 html 可以转 word ,那么问题就变成了 :

    • 解析JSON 文件

    • 把JSON文件的内容填充进html 的Table中

    • 由html直接转成word

    几百个接口,一气呵成!如下,还有一个简单的示例,就是请求参数 和 返回值 。怎么处理呢?在程序中写了 HTTP 的请求,封装了需要的参数去执行了一个请求,得到相应的返回值!

    640?wx_fmt=png

    三、实现

    1、封装对象

    按照面向对象的思想,一个接口Table就是一个对象,可变的请求参数和返回参数也封装成一个对象……

    640?wx_fmt=png

    Table


    Request


    public class Request {

        /**
         * 请求参数
         */

        private String description;

        /**
         * 参数名
         */

        private String name;

        /**
         * 数据类型
         */

        private String type;

        /**
         * 参数类型
         */

        private String paramType;

        /**
         * 是否必填
         */

        private Boolean require;

        /**
         * 说明
         */

        private String remark;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public Boolean getRequire() {
            return require;
        }

        public void setRequire(Boolean require) {
            this.require = require;
        }

        public String getRemark() {
            return remark;
        }

        public void setRemark(String remark) {
            this.remark = remark;
        }

        public String getParamType() {
            return paramType;
        }

        public void setParamType(String paramType) {
            this.paramType = paramType;
        }
    }


    Response


    public class Response {
        /**
         * 返回参数
         */

        private String description;

        /**
         * 参数名
         */

        private String name;

        /**
         * 说明
         */

        private String remark;

        public Response(String description, String name, String remark) {
            this.description = description;
            this.name = name;
            this.remark = remark;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getRemark() {
            return remark;
        }

        public void setRemark(String remark) {
            this.remark = remark;
        }
    }

    2、解析 json

    先来看看Swagger json文件的格式吧!需要注意的是这个 json 文件默认的 host 是没有加 http:// 前缀的,需要我们手动加上,因为程序的HTTP请求不像浏览器一样会自动补上 http:// 的前缀 ……

    640?wx_fmt=png

    解析JSON真是一件枯燥的工作,大家可以按照自己想要生成模板的样子修改这边的代码……需要提的是,这里有一点让我纠结了好久。怎么伪造接口的请求参数发送HTTP请求以避免不会抛异常呢?最后还是参考了Swagger的方式,即:如果是 String 类型的参数,就把这个参数置为"string";如果是 Integer 类型的参数,就把这个参数置为 0 ;如果是Double 类型的参数,就置为 0.0 ;如果是其他没办法预见的类型,就全部置为 null;

    解析 JSON 用的是Spring推荐的 jackson ,这部分感觉没什么好说的,直接上代码吧!

    @Service
    public class TableServiceImpl implements TableService {

        @Override
        public List<Table> tableList() {
            List<Table> list = new LinkedList();
            try {
                ClassLoader classLoader = TableService.class.getClassLoader();
                URL resource = classLoader.getResource("data.json");
                Map map = new ObjectMapper().readValue(resource, Map.class);
                //得到host,用于模拟http请求
                String host = String.valueOf(map.get("host"));
                //解析paths
                LinkedHashMap<String, LinkedHashMap> paths = (LinkedHashMap) map.get("paths");
                if (paths != null) {
                    Iterator<Map.Entry<String, LinkedHashMap>> iterator = paths.entrySet().iterator();
                    while (iterator.hasNext()) {
                        Table table = new Table();
                        List<Request> requestList = new LinkedList<Request>();
                        String requestType = "";

                        Map.Entry<String, LinkedHashMap> next = iterator.next();
                        String url = next.getKey();//得到url
                        LinkedHashMap<String, LinkedHashMap> value = next.getValue();
                        //得到请求方式,输出结果类似为 get/post/delete/put 这样
                        Set<String> requestTypes = value.keySet();
                        for (String str : requestTypes) {
                            requestType += str + "/";
                        }
                        Iterator<Map.Entry<String, LinkedHashMap>> it2 = value.entrySet().iterator();
                        //解析请求
                        Map.Entry<String, LinkedHashMap> get = it2.next();//得到get
                        LinkedHashMap getValue = get.getValue();
                        String title = (String) ((List) getValue.get("tags")).get(0);//得到大标题
                        String tag = String.valueOf(getValue.get("summary"));
                        //请求体
                        ArrayList parameters = (ArrayList) getValue.get("parameters");
                        if (parameters != null && parameters.size() > 0) {
                            for (int i = 0; i < parameters.size(); i++) {
                                Request request = new Request();
                                LinkedHashMap<StringObject> param = (LinkedHashMap) parameters.get(i);
                                request.setDescription(String.valueOf(param.get("description")));
                                request.setName(String.valueOf(param.get("name")));
                                request.setType(String.valueOf(param.get("type")));
                                request.setParamType(String.valueOf(param.get("in")));
                                request.setRequire((Boolean) param.get("required"));
                                requestList.add(request);
                            }
                        }
                        //返回体,比较固定
                        List<Response> responseList = listResponse();
                        //模拟一次HTTP请求,封装请求体和返回体,如果是Restful的文档可以再补充
                        if (requestType.contains("post")) {
                            Map<StringString> stringStringMap = toPostBody(requestList);
                            table.setRequestParam(stringStringMap.toString());
                            String post = NetUtil.post(host + url, stringStringMap);
                            table.setResponseParam(post);
                        } else if (requestType.contains("get")) {
                            String s = toGetHeader(requestList);
                            table.setResponseParam(s);
                            String getStr = NetUtil.get(host + url + s);
                            table.setResponseParam(getStr);
                        }

                        //封装Table
                        table.setTitle(title);
                        table.setUrl(url);
                        table.setTag(tag);
                        table.setResponseForm("application/json");
                        table.setRequestType(StringUtils.removeEnd(requestType, "/"));
                        table.setRequestList(requestList);
                        table.setResponseList(responseList);
                        list.add(table);
                    }
                }
                return list;

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }


        //封装返回信息,可能需求不一样,可以自定义
        private List<Response> listResponse() {
            List<Response> responseList = new LinkedList<Response>();
            responseList.add(new Response("受影响的行数""counts"null));
            responseList.add(new Response("结果说明信息""msg"null));
            responseList.add(new Response("是否成功""success"null));
            responseList.add(new Response("返回对象""data"null));
            responseList.add(new Response("错误代码""errCode"null));
            return responseList;
        }

        //封装post请求体
        private Map<StringString> toPostBody(List<Request> list) {
            Map<StringString> map = new HashMap<>(16);
            if (list != null && list.size() > 0) {
                for (Request request : list) {
                    String name = request.getName();
                    String type = request.getType();
                    switch (type) {
                        case "string":
                            map.put(name, "string");
                            break;
                        case "integer":
                            map.put(name, "0");
                            break;
                        case "double":
                            map.put(name, "0.0");
                            break;
                        default:
                            map.put(name, "null");
                            break;
                    }
                }
            }
            return map;
        }

        //封装get请求头
        private String toGetHeader(List<Request> list) {
            StringBuffer stringBuffer = new StringBuffer();
            if (list != null && list.size() > 0) {
                for (Request request : list) {
                    String name = request.getName();
                    String type = request.getType();
                    switch (type) {
                        case "string":
                            stringBuffer.append(name+"&=string");
                            break;
                        case "integer":
                            stringBuffer.append(name+"&=0");
                            break;
                        case "double":
                            stringBuffer.append(name+"&=0.0");
                            break;
                        default:
                            stringBuffer.append(name+"&=null");
                            break;
                    }
                }
            }
            String s = stringBuffer.toString();
            if ("".equalsIgnoreCase(s)){
                return "";
            }
            return "?" + StringUtils.removeStart(s, "&");
        }
    }

    3、html 模板

    我们需要一个和 Word Table 模板一样的HTML 页面,然后利用JSP的 foreach 遍历后台得到的 List<Table>集合,一气呵成,生成所有接口……

    <%-- text/html:正常的html显示  application/msword:html页面直接转word--%><%@ page contentType="application/msword" pageEncoding="UTF-8" language="java" %><%--<%@page contentType="text/html" pageEncoding="UTF-8" language="java" %>--%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
        <head>
            <title>tool</title>
            <style type="text/css">
                .bg {
                background-colorrgb(84, 127, 177);
                }

                tr {
                height20px;
                font-size12px;
                }

                .specialHeight {
                height40px;
                }
            
    </style>
        </head>
        <body>
            <div style="width:800px; margin: 0 auto">
                <c:forEach items="${table}" var="t">
                    <h4>${t.title}</h4> 
    <%--这个是类的说明--%>
                    <h5>${t.tag}</h5>   
    <%--这个是每个请求的说明,方便生成文档后进行整理--%>
                    <table border="1" cellspacing="0" cellpadding="0" width="100%">
                        <tr class="bg">
                            <td colspan="6"><c:out value="${t.tag}"/></td>
                        </tr>
                        <tr>
                            <td>URL</td>
                            <td colspan="5">${t.url}</td>
                        </tr>
                        <tr>
                            <td>请求方式</td>
                            <td colspan="5">${t.requestType}</td>
                        </tr>
                        <tr>
                            <td>返回值类型</td>
                            <td colspan="5">${t.responseForm}</td>
                        </tr>

                        <tr class="bg" align="center">
                            <td>请求参数</td>
                            <td>参数名</td>
                            <td>数据类型</td>
                            <td>参数类型</td>
                            <td>是否必填</td>
                            <td>说明</td>
                        </tr>
                        <c:forEach items="${t.requestList}" var="req">
                            <tr align="center">
                                <td>${req.description}</td>
                                <td>${req.name}</td>
                                <td>${req.type}</td>
                                <td>${req.paramType}</td>
                                <td>
                                    <c:choose>
                                        <c:when test="${req.require == true}">Y</c:when>
                                        <c:otherwise>N</c:otherwise>
                                    </c:choose>
                                </td>
                                <td>${remark}</td>
                            </tr>
                        </c:forEach>
                        <tr class="bg" align="center">
                            <td>返回参数</td>
                            <td>参数名</td>
                            <td colspan="4">说明</td>
                        </tr>

                        <c:forEach items="${t.responseList}" var="res">
                            <tr align="center">
                                <td>${res.description}</td>
                                <td>${res.name}</td>
                                <td colspan="4">${res.remark}</td>
                            </tr>
                        </c:forEach>

                        <tr class="bg">
                            <td colspan="6">示例</td>
                        </tr>
                        <tr class="specialHeight">
                            <td class="bg">请求参数</td>
                            <td colspan="5">${t.requestParam}</td>
                        </tr>
                        <tr class="specialHeight">
                            <td class="bg">返回值</td>
                            <td colspan="5">${t.responseParam}</td>
                        </tr>
                    </table>
                    <br>
                </c:forEach>
            </div>
        </body>
    </html>

    4、效果

    把代码运行起来后,访问JSP页面,不会像平常一样看到 HTML 页面,而是直接下载生成一个 文件,按照SpringMVC请求方法命名(这个项目中是getWord文件)。把这个文件的后缀名改成 .doc 就能看到效果了!差不多是如下效果:

    640?wx_fmt=png

    当然,剩下的工作,就要我们手动去整理维护了。比如:把属于同一个类的请求分类整理到一起;把HTTP请求错误的返回值删除(还无法适配所有的HTTP请求情况);整理维护效果如下:

    640?wx_fmt=png

    四、使用

    如果直接采用我的API文档模板的话,只需要将 resources 目录下的 data.json 文件的内容替换成自己的Swagger Json 文件内容就好。但是,考虑到我们模板中的返回参数是我们公司一个自定义的对象,所以可能这里还需要大家根据自己的要求稍作修改,主要 修改TableServiceImpl 类下的 listResponse() 方法。

    需要说明的是,这个项目还没有很好的支持所有的HTTP请求,比如 restful 服务将请求参数放在请求路径中的;比如参数是放在header中的;以及一系列可能没有考虑到的bug……

    另外,我觉得 TableServiceImpl 还有很大可以改善的地方,代码略显冗余。之后慢慢维护吧!当然,很欢迎大家一起来开发…哈哈

    五、结语

    一直觉得,IT最迷人的地方就是开源和分享,大家互不相识,即使没有利益可图,却能为同一个项目,相同的目标 贡献自己的时间和精力。想想就不可思议。写这个博文的目地更多是分享自己的创意和想法,说实话,代码可能写的有点烂。还请大家不要嫌弃,不吝指教!

    六、更新说明

    之前看《Spring In Action》的时候,发现了 RestTemplate 这个东西, 作为取代 HttpClients 的请求方式。当时就在想,要是放在这个项目中不是恰到好处?

    更新说明如下:

    1、引入了Spring的RestTemplate取代 HttpClients 以支持更多的Restful请求。
    2、命名规范以及增加异常处理,对于无法处理的HTTP请求返回空字符串。
    3、修改之前导入data.josn的方式,变成restTemplate.getForObject("SwaggerJson的url地址",Map.class);的动态获取方式。

    现在的使用方式也更加简单:

    1、修改resources目录下resources.properties文件的 swaggerUrl 为Swagger Json资源的url地址。
    2、服务启动后:访问 http://host(主机):port(端口)/getWord,etc:http://localhost:8080/getWord 
    3、将生成的getWord文件,增加后缀名 getWord.doc 。

    GitHub 地址

    https://github.com/JMCuixy/swagger2word

    1. SpringBoot 整合篇

    2. 手写一套迷你版HTTP服务器

    3. 记住:永远不要在MySQL中使用UTF-8

    4. Springboot启动原理解析

    看完本文有收获?请转发分享给更多人


    640?

    展开全文
  • 文档的新建时间是和文件没有关系的(对word来说就是新建word时间),而文件的时间是系统创建这个文件的时间(可能描述不准确)。具体来说文件的新建时间应该是操作系统维护的,但是每个类型的文档,其编辑器都是...
  • 如何在不安装Word的情况下生成Word文档
  • 使用VB对word文档进行格式调整

    千次阅读 2015-12-22 16:53:05
    word文档中,有时候会出现大量表格,在需要调整格式时,只能一个一个手动刷格式,这样不仅费时而且很费力。...所以下定决心,抽点时间研究WORD中的宏编程。经过测试,基本上能批量改变word中的样式。
  • java使用jacob操作word文档

    千次阅读 2014-11-26 14:47:12
    ava使用jacob操作word文档 java调用com组件操作word使用总结(jacob) 简单描述  在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作;  一、准备工作 ...
  • 有如下这样一份Word文档的模板 2. 我们需要在服务器端动态生成这样的文件,每次需要换的内容是标题、描述、时间。而且应该把员工列表读出来,填充在下面的表格中 我们的解决方案是: 1. 在服务端安装Word,然后通过...
  • Word 文档小知识

    千次阅读 2010-05-21 16:13:00
    一、从网页复制到Word时,怎么去掉硬回车“↓”这个符号 从网上复制的文件,粘贴到WORD时会有“↓”这个符号,其功能与WORD的回车符号一样的,怎样把它去掉或换成回车符号呢? 用ctrl+H叫出“替换”窗口,然后点...
  • SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以”.docx”结尾的微软Office word文档的读和写操作。 本文介绍了ABAP类CL_DOCX_DOCUMENT的简单用法。 Office OpenXML 从微软 Office2007开始, 当...
  • Word邮件合并功能详解:合并后生成多个word文档,删除空白页 最近在实习,干了很多打杂得工作,所以office软件用的很多很多,瞬间觉得自己可以去裸考计算机二级了哈哈哈哈哈哈。今天因为工作用到了邮件合并这个功能...
  • 最近公司要做一套OA系统,涉及到word文档模版操作,第一时间想到的是office com组件,以前使用过,但是这个组件有个问题要求系统必须安装office完整系统,同时属于单利模式,不能同时占用office应用程序,考虑到用户...
  • 用 Python 操作 Word 文档

    千次阅读 2019-07-23 08:30:00
    图片来源于网络♚作者:贠云龙Blog:zhihu.com/people/yunlongyun本文主要讲解python中操作word的思路。一、Hello,world!使...
  • C#比较两个word文档的内容

    千次阅读 2012-08-26 13:41:50
     最近在开发的项目中,又遇到一个和word有关的问题,就是用户修改了一个word文档的内容后,需要将这个文档另一个事生成好的文档进行对比,看是否有修改.从而决定要不要提示用户修改另一文档..  wo
  • word文档批量转换为html格式

    千次阅读 2020-03-03 08:51:51
    有时需要将doc/docx格式的文档批量...将doc文档的标题属性修改为文件名,以使生成的网页文件显示的标题为文件名; 对图片大小进行统一按比例缩放,防止图片过大影响展示; 将生成的html文件保存在指定的目录中。 Pr...
  • vue+elementUI导出数据为word文档

    千次阅读 热门讨论 2020-03-02 19:33:02
    今天做项目遇到需求是在word文档里面增加数据,在已知文案里面加上用户签名和时间。我也按搜索到的做的。我做的时候主要参考了简书写的,具体链接:https://www.jianshu.com/p/0de31429b12a 以下是我写的代码模块,...
  • java freemarker 导出富文本到Word文档

    千次阅读 2021-04-14 10:33:21
    之前使用freemaker导出图片等信息时 使用的是xml方式,不明白的 可以看freemaker生成Word文档(图片、超链接) 由于xml方式 不识别<p><b>等这种HTML标签,所以只能使用mht方式来解决,话不多说 干起来...
  • 前有java-poi替换模板文件word文档中的变量,生成Word文档,后有Java-Freemarker替换模板文件.ftl中的变量,生成Word文档。 Freemarker是如今最流行的文档处理组件,poi已经相对过时了。 FreeMarker 是一款模板...
  • 破解Word文档保护全过程

    千次阅读 2007-12-04 07:19:00
    今天朋友在网上找了一篇资料,想复制内容但却被保护,根本无法复制,更不能修改文档传给我一看还不是简单的读写密码保护,... 上次使用软件破解修改权限的密码,结果算了半天也没算出来,最后放弃了。这回我可不想
  • word、ppt文档比较

    千次阅读 2012-10-15 14:31:17
    [导读]Word文档比较 “小王,昨天老总看了你写的财务制度,做了一些修改,你最后再完善一下。”今天一上班,主任就给小王安排了任务。 老总究竟修改了哪些地方?怎么样才能快速精确地比较出两份文件的异同呢?难道...
  • 用phpword处理docx模板时候始终发生神奇的BUG,就是复制原版例子里的${Value1}进自己的模板然后替换是没问题的,但是只要一改动这个变量文字,PHP做相应替换就失效了。 用了下残废百度无果,一怒翻起google,准确...
  • Word文档换台电脑打开后字体、排版等会发生变化的原因及解决方案!(帮你解决困扰已久的烦恼)
  • docx4j创建word文档

    千次阅读 2017-12-16 11:13:56
    根据模版用docx4j生成doc文档,并将doc文档转成pdf文档再下载下来 1.模版 2.docx4j操作类package com.hdkj.common.util; import java.io.File; import java.io.FileInputStream; import java.io....
  • Android中使用POI加载与显示word文档

    万次阅读 热门讨论 2014-01-07 18:20:35
    最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开。查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地。调用poi将word文档转成html格式并...
  • docx4j 处理word2007文档

    千次阅读 2017-05-12 15:16:12
    Word2007采用ECMA-376标准,在java开发中,处理word文档有很多优秀的第三方开源项目,例如: 1)POI(兼容doc、docx文件)  官方网站:http://poi.apache.org/  网上例子很多,由于发布时间较早,很多外国网站的...
  • React纯前端生成word文档(支持多图片导出)前言准备工作代码实现 前言 作为一个入职不就的前端小白来说,前段时间的项目中老大提了一个在我看来十分无理的需求,对!无理。他要求我用纯前端实现一个word文档导出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,700
精华内容 20,280
关键字:

word文档最后修改时间