本文转载:http://www.cnblogs.com/huyong/archive/2011/08/24/2151599.html

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

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

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

 

下面来看具体操作。

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

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

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

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);
        }
    }

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

源码下载(下载前请评论与推荐下,感谢)

本文只是提供一种解决问题的思路,欢迎大家拍砖,也分享一下你们的经验。

在大型软件中用Word做报表: 书签的应用相关推荐

  1. 劝大家别去国企制造业干IT,软件多数据乱,报表开发完全没法做

    作为一个干了十几年报表开发的程序员,我劝大家千万别去制造业干IT,特别是IT部门还不是非常健全的公司.通常来说,这些公司具有下面的特点: 第一,业务数据多,但数据杂乱无章.第二,业务系统多,但数据孤岛 ...

  2. 茶楼软件如何做报表?有哪些功能模块?

    茶楼软件做报表是比较重要的,因为老板可以通过手机端随时随机查看一下关于店铺的营业数据或者是经营的报表,可以按照每天或者是每月以及每个季度查看一下营业的走势分析,帮助老板准确掌握门店的经营情况,从而及时 ...

  3. 组装办公室用计算机,(需要组装一批电脑,用于办公。多运用于普通办公软件,WORD、EXCEL、PPT、PS等。 要求实惠,可用集成显卡。)组装电脑excle模板...

    我想组装一台笔记本电脑,用于学习cad,3d,vr,ps,excel和平时看看教学视频, 笔记本还是买品牌吧,台式组装还不错,如果想组装电脑,可以点我头像,资料来看!也可以按配置出单,期待我们的故事- ...

  4. 2019最新bi 报表工具软件选型对比指标--报表软件评测重点注意事项

    原文地址:http://c.raqsoft.com.cn/article/1571024764129?r=CGQ 原地址可以下载更清晰的pdf版 报表选型中那些想不到的 坑 传统的选型是什么样的? 找 ...

  5. 借鉴丰田方法对大型软件组织进行敏捷改造 (上)

    借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰田倡 导 的精益生 ...

  6. 项目启动 ora-00942:_如何解决大型软件项目开发难题?唯快不破!

    目前多数信息管理软件可以满足行业内的通用需求,而在特殊流程和场景定制上成本很高.对于大型软件项目需求方来讲,主要面临三方面难题: l 软件行业专业性强,产品业务和技术实现衔接难: l 供应商及其输出品 ...

  7. 年薪60w财务总监的加薪秘诀:从不用Excel做报表

    都2021年了,已经是数字化转型的时代了,竟然还有企业在用Excel做报表? 在Boss招聘上花了几千块钱招人,统一格式是:"精通Excel,要求会使用数据透视表.Vlookup等函数,完成 ...

  8. 职场老油条靠它升职后:还用Excel手动做报表?想想就可笑

    先听我这个职场老油条给大家讲个故事吧:从传统行业业务员转成大数据分析师,你知道我这些年怎么过的吗? 这家企业的信息系统里,虽然Oracle数据库.ERP等软件都是标配,但是利用率可以说是非常低了,现在 ...

  9. 别拿Excel糊弄老板了!IT总监做报表好看且简单,诀窍在哪

    很多人,无论是业务(运营.销售.财务),还是IT员工,程序员,会遇到报表的问题,就算没有报表,也有日报.周报的痛苦. 我本是数据仓库工程师一枚,一直做着数据仓库的运维.代码开发工作和业务部门开会沟通需 ...

最新文章

  1. Android LocalBroadcast 本地广播源码解析
  2. php读取mysql分页查询
  3. Ubuntu 16.04上安装SkyEye及测试
  4. DevExpress v17.2新版亮点—WinForms篇(四)
  5. python easygui_Python里的easygui库
  6. Must、should、have to、can 和 need to的否定句_56
  7. python内置函数系列之str(一)(持续更新)
  8. 使用STM32与MAX30102实现的较为稳定的血氧算法
  9. 官方发布 激情世界杯】浩海技术 GHOST XP SP3 世界杯装机特别版★用稳定压倒一切!...
  10. wc2018冲刺期总结
  11. MOV格式视频转MP4
  12. 【Pytorch】测试单张图片(调用transforms)
  13. 【linux】正点原子linux教程学习
  14. 直播小程序推出,解锁2018微信直播新玩法
  15. rrpp协议如何修改_04-RRPP命令
  16. (8)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接3
  17. Vue element-ui之神坑
  18. 【单片机】自学单片机第01天|单片机简介、内部资源、最小系统
  19. You have enabled checking of packages via GPG keys. This is a good thing.  However, you do not have
  20. nginx访问后端偶尔超时问题

热门文章

  1. django之全文检索
  2. Windows Server2012R2 FTP服务器配置
  3. 算数运算符/空值问题
  4. JQ-CSS-实现导航菜单效果
  5. 卓越软件工程--《微软360度》读后感
  6. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java
  7. 《LeetCode力扣练习》第226题 翻转二叉树 Java
  8. Rstudio连接spark失败
  9. php加密手机版_PHP解密支付宝小程序的加密数据、手机号的示例代码
  10. 初学者编写python用什么软件好_初学者编写python用什么软件