VC利用WORD替换功能打印发票

2024-04-02 19:48

本文主要是介绍VC利用WORD替换功能打印发票,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在用VC开发一项目时,需要打印发票。由于发票的种类比较多,而且有的是已经有文字,有的空白的,还有一部分文字是可变的,动态改变。如果用VC直接控制它的输出,是一件很烦人的事情,而且工作量巨大,因此考虑到office的word文字操作软件有杰出的文字操作功能,并且它有相关的VBA函数用于二次开发。在VC中当然也会提供相应的操作函数,只要电脑安装了word,只需要将其它导入开发程序即可。

相关思路是,在word中做好一个发票模板,然后将那些需要动态改的文字设成特定的标志,在VC中用word的替换功能将其替换,这样可以省去很多的麻烦,简化操作。这样一来,发票的格式,文字位置就可以简单地通过改变WORD模板的设计而改变了。

 


//前期准备  参考 博客文章 Visual C++ 中操纵 MS Word 123

 

1  创建(或打开已有的)一个 MFC 的程序工程
2  Ctrl+W 执行 ClassWizard->automation-> Add Class.../From a type Library... 在 Office2000 目录中,找到MSWORD9.OLB  C:/Program Files/Microsoft Office/Office/MSWORD9.OLB(该文件名根据版本不同会有所区别)->选择需要的类,或者用鼠标和Shift键配合,全部选择也可以。
3  初始化COM。方法一,找到App的InitInstance()函数,在其中添加 AfxOleInit()函数的调用
4  在需要调用 Office 功能函数的 cpp 文件中
     #include <atlbase.h>  // 为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类
     #include "头文件.h"   // 具体的头文件名,是由装载类型库的文件名决定的。(鼠标双点包装类的文件,就可以看到)
                           // 比如使用 msword9.olb类型库,那么头文件是 msword9.h

 

//相关变量
 Find fndInDoc;
 Range myRange;
 _Application myApp;
 Documents myDocs;
 _Document myDoc;
 Replacement rpInDoc;

//打开word
 myApp.CreateDispatch("Word.Application");
 myApp.SetVisible(TRUE);

//打开文档

/***********获得绝对路径********************************************/
 CString fileName("test.doc");
 TCHAR exeFullPath[MAX_PATH];
    CString strPath;
    GetModuleFileName(NULL,exeFullPath,MAX_PATH);
    strPath=(CString)exeFullPath;
    int position=strPath.ReverseFind('//');
    strPath=strPath.Left(position+1); 
 fileName=strPath+fileName;
/****************************************************************/

// COleVariant FileName("C://test.doc");//注意写文件名全路径
          //如果文件找不到会出现错误
 COleVariant FileName(fileName);//test.doc放在当前路径

 COleVariant vTrue((short)TRUE),
  vFalse((short)FALSE),
  vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 myDocs=myApp.GetDocuments();
 myDoc=myDocs.Add(FileName,vOpt,vOpt,vOpt);

//利用替换功能,相关参数的选择最困难
 myRange=myDoc.GetContent();
 fndInDoc=myRange.GetFind();
 fndInDoc.ClearFormatting(); 
 rpInDoc=fndInDoc.GetReplacement();
 rpInDoc.ClearFormatting();
 
 CString replaceStr("#用户姓名#");//被替换
 CString replaceStrWith("邱秋十九");//替换

 COleVariant Text(replaceStr); //被替换
 COleVariant MatchCase((short)FALSE);
 COleVariant MatchWholeWord((short)FALSE);
 COleVariant MatchWildcards((short)FALSE);
 COleVariant MatchSoundsLike((short)FALSE);
 COleVariant MatchAllWordForms((short)FALSE);
 COleVariant Forward((short)TRUE);
 COleVariant Wrap((short)1);//用msgbox(wdFindContinue)得到
 COleVariant format((short)FALSE);
 COleVariant ReplaceWith=(replaceStrWith);//替换
 COleVariant Replace((short)2);//用msgbox(wdReplaceAll)得到
 COleVariant MatchKashida=((short)FALSE); //以下四个参数默认false
 COleVariant MatchDiacritics=((short)FALSE);
 COleVariant MatchAlefHamza=((short)FALSE);
 COleVariant MatchControl=((short)FALSE);
 
 fndInDoc.Execute(&Text, &MatchCase, &MatchWholeWord, &MatchWildcards,
  &MatchSoundsLike, &MatchAllWordForms, &Forward, &Wrap,
  &format, &ReplaceWith, &Replace, &MatchKashida,
  &MatchDiacritics, &MatchAlefHamza, &MatchControl);

//打印
 COleVariant covTrue((short)TRUE),
  covFalse((short)FALSE),
  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 
// myDoc.PrintPreview();// 如果你希望打印前预览文档,加上这句
// AfxMessageBox("请预览");
 if(MessageBox("是否打印","打印",MB_ICONEXCLAMATION|MB_OKCANCEL)==IDOK)
 {
  myDoc.PrintOut(covFalse,              // Background.
   covOptional,           // Append.
   covOptional,           // Range.
   covOptional,           // OutputFileName.
   covOptional,           // From.
   covOptional,           // To.
   covOptional,           // Item.
   COleVariant((long)1),  // Copies.
   covOptional,           // Pages.
   covOptional,           // PageType.
   covOptional,           // PrintToFile.
   covOptional,           // Collate.
   covOptional,           // ActivePrinterMacGX.
   covOptional,           // ManualDuplexPrint.
   covOptional,           // PrintZoomColumn  New with Word 2002
   covOptional,           // PrintZoomRow          ditto
   covOptional,           // PrintZoomPaperWidth   ditto
   covOptional);          // PrintZoomPaperHeight  ditto*/
 }
//关闭
 CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
 myApp.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);

//数据清空
 myRange.ReleaseDispatch();
 fndInDoc.ReleaseDispatch();
 rpInDoc.ReleaseDispatch();
 myDocs.ReleaseDispatch();
 myDoc.ReleaseDispatch();

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/do2jiang/archive/2009/04/17/4087132.aspx

这篇关于VC利用WORD替换功能打印发票的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870895

相关文章

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.