zoukankan      html  css  js  c++  java
  • 关于atl server 的感受(3) 一个我自以为豪的应用

    其实,在整个学习和使用atl server技术的过程中,因为vc的缘故,我是比较痛苦的;
    反而,根据它的启示, 我用c#写了一个副产品,却让我体会到了收获成果的高兴。

    概括: 将若干个股票的总括情况输出到doc文件中。就是说,将db中的一些信息,写到doc中的表格中。
    这个doc 文件的格式,文字的字体,大小,等都是要根据不同的情况而设置的。写到表格中的内容,
    包括一些表的一行记录, 还有,从另一些表查出来的多行记录,就是一个相对复杂的综合报表。
    (或者,我们干脆称它为中国式的报表) 这一页报表,大约要涉及10几个table.

    设计思想: 借用atl server的思路,
    1。设置标志,然后以相应的内容替换。
    2。设置标志,然后在标志处插入表格。
    3。设计一个doc文件,作为输出文件的模板template.doc(相应与atlsever的srf文件)。
    4。对每一个标志,专门为他动态的指定一个处理函数(相应于atlserver的tag_handler方法)。

    标志完全与atlserver一样,如{{company('addr')}},在atlserver中,看到这个标志,
    就会找tag=company的 方法,在这个方法中,根据参数'addr',进行处理。

    在本程序中,这个思路也完全一样。
    很自然的设计一个类Mark,它来表明一个mark的名字,参数,处理它的handler方法(用delegate实现)
    在template.doc中,设置好各种表格,格式,并填写上各种标志。程序的开始,要把所有的Mark注册到一个集合中,
    然后遍历这个集合,用其中每一个mark,找到相应的handler,执行handler中的处理程序。 再说,另外一个问题。
    在handler中的处理中,大都要涉及到对word的操作,如replace,inserttable,setCellText(i,j),insertBmp等。
    但这些所谓的automation操作,都有其一定的响应时间,但你认为它应该把某个功能做好的时候,它却抛出了异常。
    只好重复再执行N次,直到成功为止。(一般也就3,4次,我设置最多执行20次) 为解决这个问题,我把对word的
    所有操作独立成一个原子操作,封装起来,目的就是能让这些原子操作确实执行, 然后调用这些封装后的方法。
    这样程序就具有了三个性能:
    1。通过封装对word的原子操作,保证了对word调用的健壮。
    2。通过template.doc,可以对输出内容及格式任意变化。
    3。通过设置mark,和mark_handler,可以实现对mark的任意处理。

    20040702(写完了,就可能不在上班了,也上不了网了,BYE,MY-BLOG)
  • 相关阅读:
    安卓权威编程指南-笔记(第24章 Looper Handler 和 HandlerThread)
    AndroidImageSlider
    ToolBar的使用
    安卓权威编程指南-笔记(第26章 服务的作用)
    关于两个update语句互相死锁的显现,加深我们对锁的了解 转载
    js 原型和构造方法 转载
    关于distinct 和group by的去重逻辑浅析
    tab 下一个
    当前浏览器版本
    清除li间隔
  • 原文地址:https://www.cnblogs.com/zguosir/p/20400.html
Copyright © 2011-2022 走看看