[提供源码下载]在大型软件中用Word做报表:书签的应用(提供一种思路)

简介:

[提供源码下载]在大型软件中用Word做报表:

书签的应用(提供一种思路)

 

——通过知识共享树立个人品牌。

 

报表基本上在每一个项目中占有很大的比例,做报表也是我们开发人员必须过的坎,现在市面上各种类型的报表,我们到底应该如何选择呢?每一种报表都有他自己优秀的一面,我在项目开发中,一般用Grid++Report做报表,对于复杂的,量大的也用ExcelWord来做,大家也可以分享一下你们在项目中用到的报表软件!

现在有这样一个需求,比如有一个几十页的合同(合同内容每年会有所不同),合同中要填的数据(如:甲方、乙方什么的)从数据库中得到,各个页都有可能填写相关数据,最后生成合同打印出来,对于这样的需求,我想要用水晶报表等来做相当麻烦。

本文给大家提供一种思路,就是用Word来做这种类型的报表, 具体来说,就是用“书签”定位到Word中要填数据的地方,然后把数据填上去,再把word导出来,灵活应用,以不变应万变。

 

下面来看具体操作。

步骤一:准备好Word合同模板,在需要填写数据的地方插入书签(不明白的,可以下载源码后自己慢慢看)后保存应模板文件,如下图:

 

 

    步骤二:新建一个WinForm项目,添加WordDll引用,如下图:

 

 

   步骤三:编写代码,把相关数据写入到书签中,代码如下:

  

         private   void  btnWriteDataToWord_Click( object  sender, EventArgs e)
        {
            
object  missingValue  =  System.Reflection.Missing.Value;
            
object  fileName  =  System.Windows.Forms.Application.StartupPath  +   " \\Test.doc " ;
            
if  (System.IO.File.Exists(fileName  as   string ))
            {                
                
object  myTrue  =   false ;
                Microsoft.Office.Interop.Word.Application oWord 
=   new  Microsoft.Office.Interop.Word.ApplicationClass();
                Microsoft.Office.Interop.Word.Document oDoc;
                oDoc 
=  oWord.Documents.Open( ref  fileName,  ref  missingValue,  ref  myTrue,
                    
ref  missingValue,  ref  missingValue,  ref  missingValue,
                    
ref  missingValue,  ref  missingValue,  ref  missingValue,
                    
ref  missingValue,  ref  missingValue,  ref  missingValue,
                    
ref  missingValue,  ref  missingValue,  ref  missingValue,
                    
ref  missingValue);

                MessageBox.Show(oDoc.Bookmarks.Count.ToString()); 
// 得到word中的所有书签个数

                
// 写入Word文档
                 object [] oBookMarks  =  {  " 出让方名称 " " 出让方通讯地址 " " 出让方邮政编码 "  }; // Word中的书签
                 string [] sValues  =  {  " 测试出让方名称 " " 测试出让方通讯地址43号 " " 测试出让方邮政编码432123 "  };    // 给书签的值
                 for  ( int  iTemp  =   0 ; iTemp  <  oBookMarks.Length; iTemp ++ )
                {

                    Microsoft.Office.Interop.Word.Range tmpRng 
=  oWord.ActiveDocument.Bookmarks.get_Item( ref  oBookMarks[iTemp]).Range;
                    tmpRng.Text 
=  sValues[iTemp].ToString();  // 通过tmpRng.Text还可以得到标签处的数据,在这儿是设置它的数据
                     object  oRng  =  tmpRng;
                    oDoc.Bookmarks.Add(oBookMarks[iTemp].ToString(), 
ref  oRng);

                }

                
object  bSaveChange  =   true ;                

                
// 如果"D:\Word"目录不存在,就创建
                 if  ( ! Directory.Exists( " D:\\Word " )) 
                {
                    Directory.CreateDirectory(
" D:\\Word " );  // 创建目录
                }
                 
                
string  guid  =  System.Guid.NewGuid().ToString();
                
object  sFileName  =   @" D:/Word/出让合同 "   +  guid  +   " .doc " ;

                
// 把写好的合同另存为
                 if  (oDoc.SaveFormat  ==  ( int )Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument)
                {
                    oDoc.SaveAs(
ref  sFileName,  ref  missingValue,  ref  myTrue,
                         
ref  missingValue,  ref  missingValue,  ref  missingValue,
                         
ref  missingValue,  ref  missingValue,  ref  missingValue,
                         
ref  missingValue,  ref  missingValue,  ref  missingValue,
                         
ref  missingValue,  ref  missingValue,  ref  missingValue,
                         
ref  missingValue);                    
                 }
                oDoc.Close(
ref  bSaveChange,  ref  missingValue,  ref  missingValue);
                oWord.Quit(
ref  bSaveChange,  ref  missingValue,  ref  missingValue);
            }
            
else
            {
                MessageBox.Show(
" 合同模板不存在! " );
                
return ;
            }
            
// object tmp = "msr_01";
            
// Word.Range tmpRng = oWord.ActiveDocument.Bookmarks.get_Item(ref tmp).Range;
            
// tmpRng.Text = "China";
             /// /由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个
             // object oRng = tmpRng;
            
// oDoc.Bookmarks.Add(tmp.ToString(), ref oRng);
            
// object bSaveChange = true;
            
// oDoc.Close(ref bSaveChange, ref missingValue, ref missingValue);
        }
    }

 

    步骤四:查看效果,如下图所示:

     

 


本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321337,如需转载请自行联系原作者

相关文章
|
12天前
|
人工智能 自然语言处理 运维
2025主流AI智能客服软件深度评测,一文看懂企业智能客服选型
在AI与数字化转型背景下,智能客服成企业核心竞争力。本文系统对比瓴羊Quick Service、智齿客服、网易七鱼、沃丰Udesk四大产品,在全渠道覆盖、AI能力、部署灵活性等方面深度剖析,结合业务适配性、技术性能、成本服务等维度,为企业提供科学选型框架与实践建议,助力提升服务效率与客户体验。
|
9月前
|
人工智能 固态存储 iOS开发
5分钟搞定Photoshop 2025安装:官方下载+许可证激活避坑指南
Adobe Photoshop 2025 是 Adobe 公司推出的最新图像处理软件,广泛应用于平面设计、摄影后期和 UI 设计等领域。其核心功能包括智能 AI 工具(一键抠图、生成填充等)、高效工作流(优化图层管理与色彩调整)、跨平台兼容(支持 Windows 11 和 macOS 15)以及云协作功能(与 Adobe Creative Cloud 集成)。本文详细介绍软件的安装流程、系统要求、正版激活方法及常见问题解决方案,并提供扩展学习资源,帮助用户更好地掌握这款强大工具。
32791 3
|
12月前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
272 31
|
网络协议 网络虚拟化 数据中心
|
Java 数据库连接 Nacos
SpringCloud微服务配置管理、配置热更新
SpringCloud微服务配置管理、配置热更新
584 0
|
人工智能 算法 Cloud Native
向量数据库小白必关注的“扫盲贴”来啦
自从ChatGPT问世以来,大语言模型受到广泛关注。但大模型更新频率低且不擅长垂直领域知识,向量数据库恰好可以与之互补,通过Retrieval Plugin为大模型和企业私有数据构建了一座桥梁,成为数据面向大模型的切入口。不过,你真的了解向量吗?什么又是向量数据库呢?向量检索的原理又是什么呢?向量爱好者们速速上车,跟着小编一起开启“向量探索之旅”吧!
4741 4
向量数据库小白必关注的“扫盲贴”来啦
|
存储 缓存 Kubernetes
数据缓存系列分享(一):打开大模型应用的另一种方式
容器镜像的加速技术如今已经非常成熟,比如阿里云容器镜像缓存,还有p2p分发技术以及开源的dadi、nydus等按需加载技术,然而这些加速技术对于大模型文件的加载都很难有显著的效果。 MaaS的概念最近开始被提出,模型已经逐渐开始具备相对独立的存储、版本管理能力,也有类OCI的概念被提出,模型与应用的解耦会是必然的一个趋势。 为了解决模型加载与容器镜像加载解耦的问题,我们提供了模型缓存的技术,让模型无需从远端的仓库加载,也不用打包进应用的镜像里,就可以直接像加载本地的文件一样使用模型,而且在模型缓存的制作、使用流程上做了极大的简化。
2263 1
数据缓存系列分享(一):打开大模型应用的另一种方式
|
开发框架 安全 JavaScript
解密IIS服务器API跨域问题的终极解决方案
解密IIS服务器API跨域问题的终极解决方案
909 0
|
Java Linux 应用服务中间件
|
监控 前端开发 JavaScript
(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明 | 学习笔记
快速学习(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明
(扩展)网站流量日志分析--数据可视化-- vue 版--前端项目搭建、接口规则说明 | 学习笔记