C#使用Aspose.Words操作word文档[通俗易懂]

C#使用Aspose.Words操作word文档

大家好,又见面了,我是你们的朋友全栈君。

最近接到个需求,由于客服这边要导出大量有一定规则的word文件,里面的内容希望系统自动填充,例如

C#使用Aspose.Words操作word文档[通俗易懂]

这里我使用Aspose.Words.dll这个类库,

1.首先,我们需要创建模板文件,毕竟有规则的东西才好开发。在各个位置处添加书签,如下:

C#使用Aspose.Words操作word文档[通俗易懂]

2.核心方法如下,由于我这边需求最多填充四个参数:中文品名、英文描述、HAWB、件数,所以下面方法就定义这几个变量。其中,有些模板若不需要个别参数,直接传空值就行。

 /// <summary>
        /// 非危保函(将指定路径的模板Path_TempleteDoc输出至Path_out路径)
        /// </summary>
        /// <param name="Path_TempleteDoc">模板文件路径,包含文件名</param>
        /// <param name="CNName">中文品名</param>
        /// <param name="ENName">英文描述</param>
        /// <param name="HAWB">HAWB</param>
        /// <param name="PCS">件数</param>
        /// <param name="Path_out">文件输出路径,包含文件名</param>
        private void HandleGuaranteeDoc(string Path_TempleteDoc,string CNName,string ENName,string HAWB,string PCS,string Path_out)
        {
            string tempFile = Path.GetFullPath(Path_TempleteDoc).ToString();      //获取模板路径,这个根据个人模板路径而定。
            Document doc = new Document(tempFile);
            DocumentBuilder builder = new DocumentBuilder(doc);   //操作word
            Dictionary<string, string> dic = new Dictionary<string, string>();   //创建键值对   第一个string 为书签名称 第二个string为要填充的数据
            if (!string.IsNullOrEmpty(CNName))
            {
                dic.Add("CNName", CNName);
            }
            if (!string.IsNullOrEmpty(ENName))
            {
                dic.Add("ENName", ENName);
            }
            if (!string.IsNullOrEmpty(HAWB))
            {
                dic.Add("HAWB", HAWB);
            }
            if (!string.IsNullOrEmpty(PCS))
            {
                dic.Add("PCS", PCS);
            }
            foreach (var key in dic.Keys)   //循环键值对
            {
                builder.MoveToBookmark(key);  //将光标移入书签的位置
                builder.Write(dic[key]);   //填充值
            }
            doc.Save(Path_out); //保存word
        }

另附上文件的复制和整个文件夹的复制

文件复制(路径都准确到文件名):

 /// <summary>
        /// 大文件多次复制文件  true:复制成功   false:复制失败
        /// </summary>
        /// <param name="soucrePath">原始文件路径包含文件名</param>
        /// <param name="targetPath">复制目标文件路径,包含文件名</param>
        /// <returns></returns>
        public bool CopyFile(string soucrePath, string targetPath)
        {
            try
            {
                //读取复制文件流
                using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
                {
                    //写入文件复制流
                    using (FileStream fsWrite = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        byte[] buffer = new byte[1024 * 1024 * 2]; //每次读取2M
                        //可能文件比较大,要循环读取,每次读取2M
                        while (true)
                        {
                            //每次读取的数据    n:是每次读取到的实际数据大小
                            int n = fsRead.Read(buffer, 0, buffer.Count());
                            //如果n=0说明读取的数据为空,已经读取到最后了,跳出循环
                            if (n == 0)
                            {
                                break;
                            }
                            //写入每次读取的实际数据大小
                            fsWrite.Write(buffer, 0, n);
                        }
                    }
                }
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
        }

文件夹复制(路径都指到文件夹路径)

/// <summary>
        /// Copy文件夹至
        /// </summary>
        /// <param name="sourceDir">原路径</param>
        /// <param name="toDir">目标路径</param>
        public static void CopyDirectInfo(string sourceDir, string toDir)
        {
            if (!Directory.Exists(sourceDir))
            {
                throw new ApplicationException("Source directory does not exist");
            }
            if (!Directory.Exists(toDir))
            {
                Directory.CreateDirectory(toDir);
            }
            DirectoryInfo directInfo = new DirectoryInfo(sourceDir);
            //copy files
            FileInfo[] filesInfos = directInfo.GetFiles();
            foreach (FileInfo fileinfo in filesInfos)
            {
                string fileName = fileinfo.Name;
                File.Copy(fileinfo.FullName, toDir + @"/" + fileName, true);
            }
            //copy directory
            foreach (DirectoryInfo directoryPath in directInfo.GetDirectories())
            {
                string toDirPath = toDir + @"/" + directoryPath.Name;
                CopyDirectInfo(directoryPath.FullName, toDirPath);
            }
        }

 

转载于:https://www.cnblogs.com/evanmemo/p/9330600.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107411.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 数据库字符串转时间_mysql时间与字符串之间相互转换详解

    mysql 数据库字符串转时间_mysql时间与字符串之间相互转换详解1.时间转字符串DATE_FORMAT(日期,格式字符串)SELECTDATE_FORMAT(NOW(),’%Y-%m-%d%H:%i:%s’);2.字符串转时间STR_TO_DATE(字符串,日志格式)SELECTSTR_TO_DATE(‘2019-01-2016:01:45′,’%Y-%m-%d%H:%i:%s’);3.时间转时间戳selectunix_timestamp(no…

    2022年6月2日
    384
  • 如何编程简单的病毒_永恒之蓝病毒如何传播

    如何编程简单的病毒_永恒之蓝病毒如何传播永恒之蓝病毒2018《开发者经济学:开发者国家现状》第15版已发布,它提供了一些非常有趣的见解。SlashData在2018年5月至6月的七周时间内进行了大规模调查,调查覆盖了167个国家的20,500多名开发人员。开发者国家状况报告有六个主要重点领域,包括:数据科学开发人员有兴趣破坏全球经济,但仍致力于定制软件编程语言社区–更新不断发展的技术和新渠道…

    2022年10月9日
    5
  • 你不知道的几个牛逼网站,欢迎收藏

    你不知道的几个牛逼网站,欢迎收藏自己收藏的几个好玩牛逼的网站1、搜源码-方便找到你想要的一些源码,例如一些插件的js,免得去一些博客花钱去下载了链接:http://www.bvbcode.com/cn/.2、在线P图,不用下载或者等待photoshop打开,很爽的一个网站链接:https://www.uupoop.com/ps/.3、最全的jquery源码插件大全链接:http://www.jq22.com.4、在线的postwoman,测试接口方便至极链接:https://postwoman.io/.5、几个可

    2022年7月20日
    24
  • 记忆化搜索(搜索+dp思想)

    记忆化搜索(搜索+dp思想)一:简介(1)记忆化搜索即搜索+动态规划数组记录上一层计算结果,避免过多的重复计算算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存;一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解

    2022年7月26日
    12
  • python QQ刷屏代码[通俗易懂]

    python QQ刷屏代码[通俗易懂]这个代码只能支持一个窗口进行刷屏,name变量是窗口名,foriinrange(1):括号中的数字是发送数量,由于是初学python如有不足请大佬们指教fromunicodedataimportnameimportwin32guiimportwin32conimportwin32clipboardaswclassqqshuapin:defsend(self,msg):name=”我的Android手机”w.OpenClipboard(

    2022年4月27日
    288
  • JavaMD5工具类(加盐加密)[通俗易懂]

    JavaMD5工具类(加盐加密)[通俗易懂]代码如下,粘进去直接可以使用packagecom.study.utils;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Random;publicclassMD5Utils{/***byte[]字节数组转换成十六进制

    2022年7月15日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号