不忘初心,能偷懒就偷懒:C#操作Word文件

2023-05-16

换了一家公司,新单位的信息化建设仍然在路上。OA也正在建设中,目前项目发票报销等流程仍然是手工的,只能线下填单子。至于是电脑上填好打印出来还是直接空白模板打出来手写倒是不管,随意。疫情期间积压了太多项目,所以复工后填单子很快就让我暴躁了。尤其是大小写金额,还有三分位的那种小写金额的格式,浪费了太多时间,几乎就没有一次成功过的,简直不能忍。。。所以最后默默的打开了devenv。干嘛不写个程序呢,多少能省点力气。

 不过从头按这个模板的格式一行行代码生成Word文件看样子工作量有点大,本着能偷懒就偷懒的宗旨,想到了一个办法:空白处用先占位符代替,到程序里做替换。具体说来,就是用一些特殊的字符串先把位置占好,连带着格式也调好,到程序里用真实有意义的内容去替换这些特殊字符串,就像下图:

 所以需求就转换成了如何用C#实现Word的字符串替换。显然有这个需求的人应该也不少,网上很快就找到了相关代码,经测试靠谱。操作Word文档替换文字的核心代码为(需要在项目中引入word的com):

        private void FindAndReplace(Microsoft.Office.Interop.Word.Application WordApp, object findText, object replaceWithText)
        {
            object matchCase = true; // 重点关注!!
            object matchWholeWord = false; // 重点关注!!
            object matchWildCards = false;
            object matchSoundsLike = false;
            object nmatchAllWordForms = false;
            object forward = true;
            object format = false;
            object matchKashida = false;
            object matchDiacritics = false;
            object matchAlefHamza = false;
            object matchControl = false;
            object read_only = false;
            object visible = true;
            object replace = 2;
            object wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
            object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
            WordApp.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildCards, ref matchSoundsLike,
            ref nmatchAllWordForms, ref forward,
            ref wrap, ref format, ref replaceWithText,
            ref replaceAll, ref matchKashida,
            ref matchDiacritics, ref matchAlefHamza,
            ref matchControl);
        }

 调用的核心代码为:

            // 打开文档
            MSWord.Application wordApp = new MSWord.Application();              
            MSWord.Document wordDoc = wordApp.Documents.Open(带占位符的模板文件名);
            wordApp.Visible = false;
            wordDoc.Activate();

            FindAndReplace(wordApp, "##YY", txtYear.Text.Trim());
            FindAndReplace(wordApp, "#M", txtMonth.Text.Trim());
            FindAndReplace(wordApp, "#D", txtDay.Text.Trim());
            FindAndReplace(wordApp, "@@SY", txtSY.Text.Trim());
            FindAndReplace(wordApp, "@@XX", txtJE.Text.Trim());
            FindAndReplace(wordApp, "@@DX", txtCHN.Text.Trim());
            FindAndReplace(wordApp, "@@GS", txtCorp.Text.Trim());
            FindAndReplace(wordApp, "@@ZS", txtDJ.Text.Trim());

            wordDoc.Save();
            wordDoc.Close();

            wordApp.Quit();

大小写转换的代码略了,反正网上到处都是。小写金额加三分位也很简单,ToString("#,##0.00")即可。软件界面也略了,总之就是一堆Text控件用以输入与占位符对应的内容。

运行后打开程序修改过的Word效果如下:

 这下可以稍微平复一下暴躁的心情了,不过还是希望OA能早点建好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不忘初心,能偷懒就偷懒:C#操作Word文件 的相关文章

  • Opencv之边界跟踪

    问题描述 一般是将二值化后的图像进行边界的提取 需要说明的是这个提取不是简单的找到边界 xff0c 而是按照顺序的找出来 即边界上的点是按照邻接关系依次给出 相关算法 xff08 1 xff09 这里解释 xff1a https blog
  • OpenCV之滤波

    图像滤波 xff0c 指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 xff0c 是图像预处理中不可缺少的操作 xff0c 其处理效果的好坏将直接影响后续图像处理和分析的准确性 这里有个概述 xff0c 很好的 xff1a Ope
  • C++文件读写

    这个不错 xff1a C 43 43 文件读写详解 xff08 ofstream ifstream fstream xff09 C 43 43 文件读写详解 xff08 ofstream ifstream fstream xff09 c 4
  • python及其工具

    目录 1 conda xff1a 包管理器2 Anoconda xff1a 开源的包 环境管理器3 labelme4 tensorflow5 cuda和cudnn6 使用yml文件创建环境并安装文件6 1 yml文件由来6 2 如何获得ym
  • C++之文件操作移动、复制、重命名

    1 C 43 43 笔记之CopyFile和MoveFile的使用 2 删除和重命名 include lt fstream gt include lt windows h gt 与opencv的命名空间CV有冲突 xff0c 不能在一个文件
  • (转)C#数字转固定长度的字符串

    转 C 数字转固定长度的字符串
  • 进程监视工具

    Process Monitor 搜索能下到 xff0c 记下 xff0c 以后用 Process Monitor分析某个应用行为 Process Monitor 系统进程监视器 介绍教程 Using Process Monitor 帮助文档
  • UML建模工具Enterprise Architect(EA) -- 安装及简单使用

    目录 一 什么是EA xff1f 二 安装EA 三 为什么要学会用EA 四 创建EA工程 五 创建类视图 xff0c 构建类和接口 六 选中模型目录 xff0c 自动检出Java代码 七 构建内部类 八 趁热打铁 xff0c 构建数据表视图
  • SVN目录结构与分支等

    TortoiseSVN打分支 合并分支 切换分支 SVN创建分支 合并分支 切换分支
  • WPF上下标

    这里有个介绍的文章 xff1a 定义显示的上标和下标 里面介绍了三种方法 我之前有的是这个方法 xff1a Typography Variants 61 Superscript xff0c 如下所示 xff1a lt TextBlock g
  • [WPF] HamburgerMenu

    有两个库支持的 xff1a Metro App库中的 VS自己的控件 xff1a https docs microsoft com zh cn windows communitytoolkit archive hamburgermenu
  • 面积误差三种计算表达的比较

    引自 xff1a 面积误差三种计算表达的比较 有三种理论 xff0c 最基本的经典的 xff0c 引用一个吧 xff1a 网上有个题目 xff0c 求桌面面积的测量结果 桌面为矩形 用米尺测量 xff0c 长L为100 0 cm xff0c
  • 【转】WPF:Canvas中元素的定位

    概述 xff1a Canvas中的元素的大小和位置都是相对于Canvas容器的 xff0c 他的左上角为原点 xff0c 长度也是相对于他的 WPF xff1a Canvas中元素的定位 https blog csdn net chz cs
  • 【转】C#中计时

    一般可以用Environment TickCount xff0c 但是25天后会翻转 有很多 xff0c 见下面两个转的 C 中精确计时的一点收获 https www cnblogs com jintianhu archive 2010 0
  • 利用python分析微信聊天记录

    文章目录 前言一 任务分析二 工具三 步骤1 数据获取获取DB计算密码导出数据库 2 数据清洗 xff08 具体方法以后补充 xff09 3 数据分析 前言 昨天跟女朋友讨论谁给对方发的消息比较多 xff0c 两人各执一词 xff0c 事实
  • C++学习之模板

    文章目录 xff1a 一 模板 二 函数模板 三 类模板 一 模板 模板 也称泛型编程 泛型编程 xff1a 编写与类型无关的通用代码 xff0c 是代码复用的一种手段 模板是泛型编程的基础 在这之前我们可以利用C 43 43 的函数重载来
  • ROS2 创建python包

    1 创建python包 ros2 pkg create build type ament python span class token string 39 demo 39 span dependencies rclpy 以上指令为创建一个
  • Springboot集成SpringSecurity过程中遇到的问题

    Spring Security 开发文档 xff1a https www springcloud cc spring security zhcn html 一 配置的免登录访问接口不生效 span class token annotatio
  • 在sublime text3中配置c/c++运行环境

    在参考网上诸多大神配置sublime text3后 xff0c 自己也想写一篇有关在sublime中配置c c 43 43 的运行环境的文章 xff0c 顺便总结一下 安装sublime text3 xff1a 下载地址 xff08 官方地
  • STM32CubeMX 新建工程详细步骤

    STM32CubeMX 新建工程详细步骤 1 MPU CPU选择step1 打开CubeMX 软件 xff0c 在主页面上 点击如下按钮 xff0c 进入芯片选择界面step2 在Part Number Search 栏搜索我们需要用到的芯

随机推荐