<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>L3soft Studio</title><link>http://blog.donews.com/ant3000/</link><description>圆自己一个开发梦</description><dc:language>zh-CHS</dc:language><generator>.Text Version 1.0.1.0</generator><item><dc:creator>小蚂蚁</dc:creator><title>超级便笺本 V2.64 注册机</title><link>http://blog.donews.com/ant3000/archive/2007/12/25/1239863.aspx</link><pubDate>Tue, 25 Dec 2007 13:43:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/12/25/1239863.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1239863.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/12/25/1239863.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1239863.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1239863</trackback:ping><description>今天的第二个软件就是超级便笺本，这个软件有点熟，不是我用过 而是我前段时间破解了这个作者的另一个软件文件批量更名大师，呵呵，一样的注册原理，所以很容易。~~~~~~~~~~~~
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件简介：超级便笺本是一款实用的桌面便笺软件，用于办公时代替纸和笔随时记下您需要的一些数字、计划等，可充当您的备忘录。所有文本均加密保存，是您书写电子便笺的好帮手。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;原版：&lt;a href="http://www.skycn.com/soft/24583.html"&gt;&lt;font color="#3d6047"&gt;http://www.skycn.com/soft/24583.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注册机：&lt;a href="http://ant3000.gbaopan.com/files/bf9ad285b64d4675993c181da7e66d7c.gbp"&gt;&lt;font color="#3d6047"&gt;http://ant3000.gbaopan.com/files/bf9ad285b64d4675993c181da7e66d7c.gbp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1239863.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>利康药典 注册机</title><link>http://blog.donews.com/ant3000/archive/2007/12/25/1239864.aspx</link><pubDate>Tue, 25 Dec 2007 13:43:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/12/25/1239864.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1239864.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/12/25/1239864.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1239864.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1239864</trackback:ping><description>&lt;p&gt;还有一个电子书的软件，它收录中、西药物及中药方剂共六千五百种，按照科目进行分类，可快速定位药物， 还可全文检索。可以查询常用的药物作用、剂量及副作用，种类较少，属于普及型非专业药物手册。是医务工作者必备的电子读物. &lt;/p&gt;
&lt;p&gt;原版：&lt;a href="http://www.skycn.com/soft/28210.html"&gt;&lt;font color="#3d6047"&gt;http://www.skycn.com/soft/28210.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注册机：&lt;a href="http://ant3000.gbaopan.com/files/2fe5f9214daa4010bd8a4a88ef5b2a2b.gbp"&gt;&lt;font color="#3d6047"&gt;http://ant3000.gbaopan.com/files/2fe5f9214daa4010bd8a4a88ef5b2a2b.gbp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1239864.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>AA制费用分摊 注册机</title><link>http://blog.donews.com/ant3000/archive/2007/12/25/1239862.aspx</link><pubDate>Tue, 25 Dec 2007 13:42:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/12/25/1239862.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1239862.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/12/25/1239862.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1239862.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1239862</trackback:ping><description>今天手痒啊 所以在网上找了AA制费用分摊这么一个小软件来玩一下。
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 软件简介：AA制软件是一款几乎不占空间的纯绿色软件,她主要用于AA制的费用分摊。她操作简单、思路清晰、功能强大、无病毒、无任何插件、是不可多得的好软件,值得收藏.&amp;nbsp;&amp;nbsp;。 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;原版V1.2:&amp;nbsp; &lt;a href="http://www.onlinedown.net/soft/49919.htm"&gt;&lt;font color="#3d6047"&gt;http://www.onlinedown.net/soft/49919.htm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;V1.2注册机: &lt;a href="http://ant3000.gbaopan.com/files/2b2a15b62e314c01&lt;img src ="http://blog.donews.com/ant3000/aggbug/1239862.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>执业药师(中药)资格考试宝典 V7.0 注册补丁</title><link>http://blog.donews.com/ant3000/archive/2007/11/26/1231472.aspx</link><pubDate>Mon, 26 Nov 2007 14:11:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/11/26/1231472.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1231472.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/11/26/1231472.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1231472.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1231472</trackback:ping><description>&lt;p style="TEXT-INDENT: 2em"&gt;今天破解了一个执业药师(中药)资格考试的模拟考试软件，下面就是该软件的介绍：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;软件介绍:&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;《考试宝典》是专门为参加执业药师资格考试的朋友量身定做的自我测试系统，对职称考试也极具参考价值。题型丰富，图文并茂，内容全面，题库设计符合执业药师资格考试最新考试大纲，内容丰富，海量试题(注册用户的题量可达1万9千多题，110万字)，囊括了目前所有的最新模拟试题及历年试题，并提供专业级的解题思路。软件互动性强，支持用户试题、解题思路、考试资料载入，以及对重点试题的收集整理。允许用户对考试资料进行修改，随时自行添加，修改和删除试题库中的试题和答案，形成自己的个性试题库。智能阅卷、实时提供参考答案、可以对全部试题进行打印，做题时系统会显示考试过程已用的时间，做完后显示得分情况和各题答案的正确与错误情况，并可查看答错题的具体内容和答错之处。注册用户可以随时查询网上最新题库版本并进行升级。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;软件特色：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.模拟考试：题型与分值分布均按考试大纲设计，科学合理，考试完毕系统自动批阅，并提供标准答案。基本上覆盖了应考的全部知识点。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.试题查询：可以就某个词，如&amp;ldquo;硝酸甘油&amp;rdquo;进行查询，将包含此词的试题进行汇总，可以针对特定知识点进行复习。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.温故知新：每次答题完毕，批阅试题之后，系统会自动记录用户的答题内容、数量、平均答题速度、正确率、答题耗时、答题日期，方便以后查阅。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4.统计分析：系统能记录下用户的每次答题情况，进行智能分析，并以列表及曲线图的方式显示答题数量、正确率、答题速度，用户可以及时掌握自己的答题情况。 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;原版：&lt;a href="http://www.11nong.com/soft/12356/"&gt;&lt;font color="#c31010"&gt;http://www.11nong.com/soft/12356/&lt;/font&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;补丁：&lt;a href="http://ant3000.gbaopan.com/files/a47204f018b04309bb62ca127e8d75be.gbp"&gt;&lt;font color="#c31010"&gt;http://ant3000.gbaopan.com/files/a47204f018b04309bb62ca127e8d75be.gbp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1231472.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>文摘管理专家 v2.80 破解补丁</title><link>http://blog.donews.com/ant3000/archive/2007/11/26/1231470.aspx</link><pubDate>Mon, 26 Nov 2007 14:10:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/11/26/1231470.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1231470.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/11/26/1231470.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1231470.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1231470</trackback:ping><description>&lt;p&gt;今天 破解了一个叫文摘管理专家的 软件，以下就是该软件的简介&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;《文摘管理专家》是一款收藏、管理各类文档的功能强大的可免费使用的软件。 &lt;br /&gt;1、本软件采用树形图的形式来分类管理各种文档，容易组织和查阅，编辑、查找方便。 &lt;br /&gt;2、支持多种类型文档的收集（TXT、RTF、HTML、CHM、DOC文件等）。支持附件功能。 &lt;br /&gt;3、单一文件结构。文件内所有资料均已被加密及压缩。提供多种资料保密和共享方式。 &lt;br /&gt;4、内置浏览器，可以浏览常见的文本、源程序、网页、图像等类型的附件。 &lt;br /&gt;5、可将所有资料生成EXE及CHM文件。 &lt;br /&gt;6、无须安装，绿色软件。 &lt;br /&gt;V2.80版本在人性化方面做出了更多努力，主要更新如下： &lt;br /&gt;1、附件支持拖动保存：文件拖动到&amp;ldquo;悬浮按钮&amp;rdquo;和拖出附件时都要按住&amp;ldquo;Shift&amp;rdquo;键。 &lt;br /&gt;2、附件列表支持排序（单击列表项标题）。 &lt;br /&gt;3、在&amp;ldquo;设置选项&amp;rdquo;中新增更多选项：&amp;ldquo;切换节点时提示保存已修改过的节点内容&amp;rdquo;、&amp;ldquo;新建节点时智能生成节点标题&amp;rdquo;、&amp;ldquo;已访问过的节点加粗显示&amp;rdquo;、&amp;ldquo;删除节点/附件到回收站前要确认&amp;rdquo;、 剪贴板监视和文本拖存时允许&amp;ldquo;不添加节点&amp;rdquo;等。 &lt;br /&gt;...&lt;/p&gt;
&lt;p&gt;原版：&lt;a href="http://dl3.winu.cn/tools/20060522/200605221717026866.rar"&gt;&lt;font color="#c31010"&gt;http://dl3.winu.cn/tools/20060522/200605221717026866.rar&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;破解补丁：&lt;a href="http://ant3000.gbaopan.com/files/ac803e194352460987af4a881ea58795.gbp"&gt;&lt;font color="#c31010"&gt;http://ant3000.gbaopan.com/files/ac803e194352460987af4a881ea58795.gbp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1231470.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>文件批量更名大师 破解补丁</title><link>http://blog.donews.com/ant3000/archive/2007/11/26/1231468.aspx</link><pubDate>Mon, 26 Nov 2007 14:08:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/11/26/1231468.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1231468.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/11/26/1231468.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1231468.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1231468</trackback:ping><description>&amp;nbsp;本软件是一款极好的文件批量改名工具，他可以轻松的帮助你完成各种形式的文件批量改名工作。您不妨下载试试，相信您一定会喜欢它的^_^
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 破解补丁是本人制作的，下载后运行它就可以以我的名字来注册《文件批量更名大师》，如果想用自己的名字注册，大家可以运行《文件批量更名大师》根目录下的FileRenUnRegKey.reg文件，再运行注册机key.exe。注意，第一次运行注册机一样会弹出注册码 ，但这个注册码是对应空注册名的，大家要先填写自己的注册名，再填写任意注册码，然后重启《文件批量更名大师》，这是用您名字注册的真正注册码出来了，复制它，然后再点注册，填写您刚才的注册名，和复制好的注册码注册就可以注册成功的。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 希望大家喜欢。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;原版：&lt;a href="http://cqdx.skycn.com/down/FileRen.zip"&gt;&lt;font color="#c31010"&gt;http&lt;img src ="http://blog.donews.com/ant3000/aggbug/1231468.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>彩尊圣手黄金版 破解补丁</title><link>http://blog.donews.com/ant3000/archive/2007/11/11/1227138.aspx</link><pubDate>Sun, 11 Nov 2007 16:20:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/11/11/1227138.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1227138.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/11/11/1227138.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1227138.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1227138</trackback:ping><description>&lt;p&gt;刚刚破解了一个彩票软件《彩尊圣手黄金版》，其实也不是什么破解，只是脱了个壳就没有时间限制了，:-)。&lt;/p&gt;
&lt;p&gt;希望给大家带来方便吧~~~&lt;/p&gt;
&lt;p&gt;原版：&lt;a href="http://www.smswriter.com/share/setup.exe"&gt;&lt;font color="#c31010"&gt;http://www.smswriter.com/share/setup.exe&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;破解补丁：&lt;a href="http://ant3000.gbaopan.com/files/081f2736eba6487eb8f1ee66b001ea84.gbp"&gt;&lt;font color="#c31010"&gt;http://ant3000.gbaopan.com/files/081f2736eba6487eb8f1ee66b001ea84.gbp&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1227138.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>分红配股及相关解释</title><link>http://blog.donews.com/ant3000/archive/2007/05/18/1166256.aspx</link><pubDate>Fri, 18 May 2007 16:29:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2007/05/18/1166256.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1166256.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2007/05/18/1166256.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1166256.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1166256</trackback:ping><description>&lt;br /&gt;
&lt;div class="t_msgfont" id="message13289205"&gt;&lt;font size="4"&gt;&lt;font color="#0000ff"&gt;什么是红股和转赠股&lt;br /&gt;　　红股：免费派送予股东的股份。投资者可将红股视为股息的一部分。值得注意的是，红股会摊薄每股盈利、每股派息等，当然亦会摊薄股价。&lt;br /&gt;　　转增股：同样是免费送予股东的股份，与送红股不同的是，红股是利润分配所得，转增股则从资本公积金转成股本。 &lt;br /&gt;深市分红流程&lt;br /&gt;　　领取方式：自动划到投资者帐上。&lt;br /&gt;　　领取时间：R+2日到帐（R：股权登记日）&lt;br /&gt;　　国有股、法人股、职工股、高级管理人员持股的红股，由深交所于R+2直接记入各相应股东的证券帐户。&lt;br /&gt;　　公众股及转配股的红股按下列程序记入各股东证券帐户：&lt;br /&gt;　　（一） R+1日收市后，证券营业部通过结算通讯系统接收结算数据包中的红股明细数据；&lt;br /&gt;　　（二） R+2日，红股到帐，可流通红股上市交易。&lt;br /&gt;&lt;br /&gt;沪市分红流程&lt;br /&gt;　　领取方式：自动划到投资者帐上&lt;img src ="http://blog.donews.com/ant3000/aggbug/1166256.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>[转贴]炮打流氓软件</title><link>http://blog.donews.com/ant3000/archive/2006/09/05/1029169.aspx</link><pubDate>Tue, 05 Sep 2006 12:41:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/09/05/1029169.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1029169.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/09/05/1029169.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1029169.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1029169</trackback:ping><description>&lt;strong&gt;&lt;font size="2"&gt;炮打流氓软件&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;span style="FONT-SIZE: 12px"&gt;炮打流氓软件&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;--我的一张大字报&lt;br /&gt;作者: kinglon(&lt;a href="mailto:gamelife2@21cn.com"&gt;&lt;font color="#003366"&gt;gamelife2@21cn.com&lt;/font&gt;&lt;/a&gt;,&lt;a href="mailto:kinglon@cnns.net"&gt;&lt;font color="#003366"&gt;kinglon@cnns.net&lt;/font&gt;&lt;/a&gt;) (以后自己可以利用搜索引擎找到本文)&lt;br /&gt;关键字:Terminator Lab,卡巴威尔,流氓软件,清除,专杀 (以后自己可以利用搜索引擎找到本文)&lt;br /&gt;日期: 2006-7-01&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; 全国第一个流氓&lt;img src ="http://blog.donews.com/ant3000/aggbug/1029169.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>Gzip Zlib PNG 压缩算法,源码详解</title><link>http://blog.donews.com/ant3000/archive/2006/08/29/1022988.aspx</link><pubDate>Tue, 29 Aug 2006 20:16:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/08/29/1022988.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1022988.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/08/29/1022988.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1022988.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1022988</trackback:ping><description>&amp;nbsp;gzip,zlib,以及图形格式png，使用的是同一个压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做一个详细的说明。我阅读的gzip版本为 gzip-1.2.4。我们对算法做三种程度的说明。第一种程度，对gzip所使用压缩算法基本原理的说明。第二种程度，对gzip压缩算法实现方法的说明。第三种程度，对gzip实现源码级的说明。&lt;br /&gt;　　&lt;br /&gt;　　如果你有时间的话，我建议你先不要看下面的内容，自己尝试通过读gzip源码，来了解它的压缩解压缩是如何实现的，这将会是一个非常有趣的智力游戏，千万不要错过。当一个又一个的谜被解开时，那感觉就像唐伯虎同志所说的，&amp;ldquo;慷慨然诺杯酒中&amp;rdquo;。（小唐的诗，除了另一个倒霉蛋曹雪芹外，好像不太被人提。）&lt;br /&gt;　　&lt;br /&gt;　　1 gzip所使用压缩算法的基本原理&lt;br /&gt;　　&lt;br /&gt;　　gzip 对于要压缩的文件，首先使用lz77算法进行压缩，对得到的结果再使用huffman编码的方法进行压缩。所以我们分别对lz77和huffman编码的原理进行说明。&lt;br /&gt;　　&lt;br /&gt;　　1.1 ... 1.2 ...&lt;br /&gt;　　&lt;br /&gt;　　2 gzip压缩算法实现方法&lt;br /&gt;　　&lt;br /&gt;　　2.1 LZ77算法的gzip实现&lt;br /&gt;　　&lt;br /&gt;　　首先，gzip 从要压缩的文件中读入64KB的内容到一个叫window的缓冲区中。为了简单起见，我们以32KB以下文件的压缩为例做说明。对于我们这里使用32KB以下文件，gzip将整个文件读入到window缓冲区中。然后使用一个叫strstart的变量在window数组中，从0开始一直向后移动。strstart在每一个位置上，都在它之前的区域中，寻找和当前strstart开始的串的头3个字节匹配的串，并试图从这些匹配串中找到最长的匹配串。&lt;br /&gt;　　&lt;br /&gt;　　如果当前的strstart开始的串，可以找到最少为3个字节的匹配串的话，当前的strstart开始的匹配长度那么长的串，将会被一个&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对替换。&lt;br /&gt;　　&lt;br /&gt;　　如果当前的strstart开始的串，找不到任何的最少为3个字节的匹配串的话，那么当前strstart的所在字节将不作改动。&lt;br /&gt;　　&lt;br /&gt;　　为了区分是一个&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对，还是一个没有被改动的字节，还需要为每一个没有被改动的字节或者&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对，另外再占用一 &lt;br /&gt;　　位，来进行区分。这位如果为1，表示是一个&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对，这位如果为0，表示是一个没有被改动的字节。&lt;br /&gt;　　&lt;br /&gt;　　现在来说明一下，为什么最小匹配为3个字节。这是由于，gzip 中，&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对中，&amp;quot;匹配长度&amp;quot;的范围为3-258，也就是256种可能值，需要8bit来保存。&amp;quot;到匹配串开头的距离&amp;quot;的范围为0-32K，需要15bit来保存。所以一个&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对需要23位，差一位3个字节。如果匹配串小于3个字节的话，使用&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对进行替换，不但没有压缩，反而还会增大。所以保存&amp;lt;匹配长度,到匹配串开头的距离&amp;gt;对所需要的位数，决定了最小匹配长度至少要为3个字节。&lt;br /&gt;　　&lt;br /&gt;　　下面我们就来介绍gzip如何实现寻找当前strstart开始的串的最长匹配串。&lt;br /&gt;　　&lt;br /&gt;　　如果每次为当前串寻找匹配串时，都要和之前的每个串的至少3个字节进行比较的话，那么比较量将是非常非常大的。为了提高比较速度，gzip使用了哈希表。这是gzip实现LZ77的关键。这个哈希表是一个叫head的数组（后面我们将看到为什么这个缓冲区叫head）。gzip对windows中的每个串，使用串的头三个字节，也就是strstart,strstart+1,strstart+2，用一个设计好的哈希函数来进行计算，得到一个插入位置ins_h。也就是用串的头三个字节来确定一个插入位置。然后把串的位置，也就是 strstart的值，保存在head数组的第ins_h项中。我们马上就可以看到为什么要这样做。head数组在没有插入任何值时，全部为0。
&lt;p&gt;当某处的当前串的三个字节确定了一个ins_h，并把当时当前串的位置也就是当时的strstart保存在了head[ins_h]中。之后另一处，当另一处的当前串的头三个字节，再为那三个字节时，再使用那个哈希函数来计算，由于是同样的三个字节，同样的哈希函数，得到的ins_h必然和前面得到的ins_h是相同的。于是就会发现head[ins_h]不为0。这就说明了，有一个头三个字节和自己相同的串把自己的位置保存在了这里，现在head[ins_h]中保存的值，也就是那个串的开始位置，我们就可以找到那个串，那个串至少前3个字节和当前串的前3个字节相同（稍后我们就可以看到这种说法不准确，这里是为了说明方便），我们可以找到那个串，做进一步比较，看到底能有多长的匹配。&lt;br /&gt;　　&lt;br /&gt;　　我们现在来说明一下，相同的三个字节，通过哈希函数得到的ins_h必然是相同的。而不同的三个字节，通过哈希函数有没有可能得到同一个ins_h，我没有对这个哈希函数做研究，并不清楚，不过一般的哈希函数都是这样的，所以极大可能这里的也会是这种情况，即不同的三个字节，通过哈希函数有可能得到同一个ins_h，不过这并不要紧，我们发现有可能是匹配串之后，还会进行串的比较。&lt;br /&gt;　　&lt;br /&gt;　　一个文件中，可能有很多个串的头三个字节都是相同的，也就是说他们计算得到的ins_h都是相同的，如何能保证找到他们中的每一个串呢？gzip使用一个链把他们链在一起。gzip每次把当前串的位置插入head的当前串头三个字节算出的ins_h处时，都会首先把原来的head[ins_h]的值，保存到一个叫prev的数组中，保存的位置就在现在的strstart处。这样当以后某处的当前串计算出ins_h，发现head[ins_h]不空时，就可以到prev[ head[ins_h] ]中找到更前一个的头三个字节相同的串的位置。对此我们举例说明。&lt;br /&gt;　　&lt;br /&gt;　　例，串&lt;br /&gt;　　0abcdabceabcfabcg&lt;br /&gt;　　^^^^^^^^^^^^^^^^^&lt;br /&gt;　　01234567890123456&lt;br /&gt;　　&lt;br /&gt;　　整个串被压缩程序处理之后。&lt;br /&gt;　　&lt;br /&gt;　　由abc算出ins_h。&lt;br /&gt;　　这时的head[ins_h]中为 13,即&amp;quot;abcg&amp;quot;的开始位置。&lt;br /&gt;　　这时prev[13]中为 9，即&amp;quot;abcfabcg&amp;quot;的开始位置。&lt;br /&gt;　　这时prev[9]中为 5，即&amp;quot;abceabcfabcg&amp;quot;的开始位置。&lt;br /&gt;　　这时prev[5]中为 1，即&amp;quot;abcdabceabcfabcg&amp;quot;的开始位置。&lt;br /&gt;　　这时prev[1]中为 0。&lt;br /&gt;　　&lt;br /&gt;　　我们看到所有头三个字母为abc的串，被链在了一起，从head可以一直找下去，直到找到0。&lt;br /&gt;　　&lt;br /&gt;　　现在我们也就知道了，三个字节通过哈希函数计算得到同一ins_h的所有的串被链在了一起，head[ins_h]为链头，prev数组中放着的更早的串。这也就是head和prev名称的由 &lt;br /&gt;　　来。&lt;br /&gt;　　&lt;br /&gt;　　gzip寻找匹配串的另外一个值得注意的实现是，延迟匹配。会进行两次尝试。比如当前串为str,那么str发生匹配以后，并不发生压缩，还会对str+1串进行匹配，然后看哪种 &lt;br /&gt;　　匹配效果好。&lt;br /&gt;　　&lt;br /&gt;　　例子 ...&lt;br /&gt;从这个例子中我们就看到了做另外一次尝试的原因。如果碰到的一个匹配就使用了的话，可能错过更长匹配的机会。现在做两次会有所改善。&lt;br /&gt;　　&lt;br /&gt;　　...&lt;br /&gt;　　&lt;br /&gt;　　2.2 问题讨论&lt;br /&gt;　　&lt;br /&gt;　　我在这里对gzip压缩算法做出了一些说明，是希望可以和对gzip或者压缩解压缩感兴趣的朋友进行交流。&lt;br /&gt;　　我对gzip的了解要比这里说的更多一些，也有更多的例子。如果哪位朋友愿意对下面的问题进行研究，以及其他压缩解压缩的问题进行研究，来这里http://jiurl.cosoft.org.cn/forum/ 和我交流的话，我也愿意就我知道的内容进行更多的说明。&lt;br /&gt;　　&lt;br /&gt;　　下面是几个问题&lt;br /&gt;　　&lt;br /&gt;　　这种匹配算法，即用3个字节(最小匹配)来计算一个整数，是否比用串比较来得高效，高效到什么程度。&lt;br /&gt;　　&lt;br /&gt;　　哈希函数的讨论。不同的三个字节，是否可能得到同一个ins_h。ins_h和计算它的三个字节的关系。&lt;br /&gt;　　&lt;br /&gt;　　几次延迟尝试比较好？&lt;br /&gt;　　&lt;br /&gt;　　用延迟，两次尝试是否对压缩率的改善是非常有限的？&lt;br /&gt;　　&lt;br /&gt;　　影响lz77压缩率的因素。&lt;br /&gt;　　&lt;br /&gt;　　压缩的极限。&lt;br /&gt;　　　　&lt;br /&gt;　　2.3 ...&lt;br /&gt;　　&lt;br /&gt;　　3 gzip源码分析&lt;br /&gt;　　&lt;br /&gt;　　main() 中调用函数 treat_file() 。&lt;br /&gt;　　treat_file() 中打开文件，调用函数 zip()。注意这里的 work 的用法，这是一个函数指针。&lt;br /&gt;　　zip() 中输出gzip文件格式的头，调用 bi_init，ct_init，lm_init，&lt;br /&gt;　　其中在lm_init中将 head 初始化清0。初始化strstart为0。从文件中读入64KB的内容到window缓冲区中。&lt;br /&gt;　　由于计算strstart=0时的ins_h，需要0,1,2这三个字节和哈希函数发生关系，所以在lm_init中，预读0,1两个字节，并和哈希函数发生关系。&lt;br /&gt;　　&lt;br /&gt;　　然后lm_init调用 deflate()。&lt;br /&gt;　　deflate() gzip的LZ77的实现主要deflate()中。&lt;br /&gt;&lt;/p&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1022988.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>LZW压缩算法简介</title><link>http://blog.donews.com/ant3000/archive/2006/08/29/1022981.aspx</link><pubDate>Tue, 29 Aug 2006 20:14:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/08/29/1022981.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/1022981.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/08/29/1022981.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/1022981.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=1022981</trackback:ping><description>称:LZW压缩算法简介&lt;br /&gt;作者:宋成&lt;br /&gt;描述:一篇关于LZW压缩算法简介的文章，通俗易懂，值得一看！&lt;br /&gt;备注:该文章整理自软件报1998年合订本上册。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LZW压缩算法是一种新颖的压缩方法，由Lemple-Ziv-Welch 三人共同创造，用他们的名字命名。它采用了一种先进的串表压缩不，将每个第一次出现的串放在一个串表中，用一个数字来表示串，压缩文件只存贮数字，则不存贮串，从而使图象文件的压缩效率得到较大的提高。奇妙的是，不管是在压缩还是在解压缩的过程中都能正确的建立这个串表，压缩或解压缩完成后，这个串表又被丢弃。&lt;br /&gt;&lt;br /&gt;1.基本原理&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;首先建立一个字符串表，把每一个第一次出现的字符串放入串表中，并用一个数字来表示，这个数字与此字符串在串表中的位置有关，并将这个数字存入压缩文件中，如果这个字符串再次出现时，即可用表示它的数字来代替，并将这个数字存入文件中。压缩完成后将串表丢弃。如&amp;quot;print&amp;quot;&lt;img src ="http://blog.donews.com/ant3000/aggbug/1022981.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>下载安装Atlas</title><link>http://blog.donews.com/ant3000/archive/2006/08/06/989951.aspx</link><pubDate>Sun, 06 Aug 2006 10:13:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/08/06/989951.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/989951.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/08/06/989951.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/989951.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=989951</trackback:ping><description>http://go.microsoft.com/fwlink/?LinkId=52384&lt;img src ="http://blog.donews.com/ant3000/aggbug/989951.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>[转贴]C#编程实现在Excel文档中搜索文本 </title><link>http://blog.donews.com/ant3000/archive/2006/06/06/904248.aspx</link><pubDate>Tue, 06 Jun 2006 09:37:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/06/06/904248.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/904248.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/06/06/904248.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/904248.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=904248</trackback:ping><description>&lt;table cellspacing="1" cellpadding="0" width="80%" bgcolor="#ffffcc" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="50%" bgcolor="#ffcc99" height="24"&gt;&lt;strong&gt;C#编程实现在Excel文档中搜索文本&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3"&gt;作者：&amp;nbsp;it步行者 &amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#575757"&gt;www.ASPCool.com&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;时间:2006-5-18 21:34:37&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="100%" colspan="3"&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有了在Word文档中编程实现搜索文本的经验，在Excel中实现这个功能也并非难事。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　打开Excel的VBA帮助，查看Excel的对象模型，很容易找到完成这个功能需要的几个集合和对象：Application、Workbooks、Workbook、Worksheets还有Worksheet和Range。Application创建Excel应用，Workbooks打开Excel文档，Workbook获得Excel文档工作薄，Worksheets操作工作表集合，Worksheet获得单个工作表。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　搜索的思路对应上述集合和对象，可以这样表述：要搜索的文本可能存在Excel文档当中的某个工作表上，搜索应该遍历目标Excel文件的每个工作表中的有效区域，如果找到，则退出本次搜索，如果没有找到，则继续搜索直到完成本次搜索。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　跟Word对象模型不一样的是，Excel对象模型没有提供Find对象，不过没有关系，可以通过两种方法来实现，一个是通过Range对象的Find()方法来实现，另外一个比较麻烦，取得工作表Worksheet的有效区域UsedRange之后，遍历该Range对象中的所有行列。实际开发中，用第二种方法时发现了一个特别的现象，所以第二种方法也准备详细记述一下。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　第一步，打开Excel文档： &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;object filename=&amp;quot;&amp;quot;; &lt;br/&gt;&amp;nbsp;&amp;nbsp;object MissingValue=Type.Missing; &lt;br/&gt;&amp;nbsp;&amp;nbsp;string strKeyWord=&amp;quot;&amp;quot;; //指定要搜索的文本，如果有多个，则声明string[] &lt;br/&gt;&amp;nbsp;&amp;nbsp;Excel.Application ep=new Excel.ApplicationClass(); &lt;br/&gt;&amp;nbsp;&amp;nbsp;Excel.Workbook ew=ep.Workbooks.Open(filename.ToString(),MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue); &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　然后准备遍历Excel工作表： &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;Excel.Worksheet ews; &lt;br/&gt;&amp;nbsp;&amp;nbsp;int iEWSCnt=ew.Worksheets.Count; &lt;br/&gt;&amp;nbsp;&amp;nbsp;int i=0,j=0; &lt;br/&gt;&amp;nbsp;&amp;nbsp;Excel.Range oRange; &lt;br/&gt;&amp;nbsp;&amp;nbsp;object oText=strKeyWord.Trim().ToUpper(); &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;for(i=1;i&amp;lt;=iEWSCnt;i++) &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; ews=null; &lt;br/&gt;&amp;nbsp;&amp;nbsp; ews=(Excel.Worksheet)ew.Worksheets[i]; &lt;br/&gt;&amp;nbsp;&amp;nbsp; oRange=null; &lt;br/&gt;&amp;nbsp;&amp;nbsp; (Excel.Range)oRange=((Excel.Range)ews.UsedRange).Find( &lt;br/&gt;&amp;nbsp;&amp;nbsp; oText,MissingValue,MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,Excel.XlSearchDirection.xlNext, &lt;br/&gt;&amp;nbsp;&amp;nbsp; MissingValue,MissingValue,MissingValue); &lt;br/&gt;&amp;nbsp;&amp;nbsp; if (oRange!=null &amp;amp;&amp;amp; oRange.Cells.Rows.Count&amp;gt;=1 &amp;amp;&amp;amp; oRange.Cells.Columns.Count&amp;gt;=1) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中包含指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp; break; &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　这里要说两个值得注意的地方。一个是遍历工作表的索引，不是从0开始，而是从1开始；另外一个是Find方法的第六个参数SearchDirection，指定搜索的方向，帮助文档中说这个参数是可选项，但是我用MissingValue如论如何编译不能通过，不知什么原因，于是显式指定它的默认值xlNext。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　第一种方法实现了，再看看第二种方法。这种方法除了要遍历工作表，还要对工作表使用区域的行和列进行遍历。其它一样，只对遍历说明，代码如下： &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;bool blFlag=false; &lt;br/&gt;&amp;nbsp;&amp;nbsp;int iRowCnt=0,iColCnt=0,iBgnRow,iBgnCol; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;for(m=1;m&amp;lt;=iEWSCnt;m++) &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; ews=(Excel.Worksheet)ew.Worksheets[m]; &lt;br/&gt;&amp;nbsp;&amp;nbsp; iRowCnt=0+ews.UsedRange.Cells.Rows.Count; &lt;br/&gt;&amp;nbsp;&amp;nbsp; iColCnt=0+ews.UsedRange.Cells.Columns.Count; &lt;br/&gt;&amp;nbsp;&amp;nbsp; iBgnRow=(ews.UsedRange.Cells.Row&amp;gt;1)? &lt;br/&gt;&amp;nbsp;&amp;nbsp; ews.UsedRange.Cells.Row-1:ews.UsedRange.Cells.Row; &lt;br/&gt;&amp;nbsp;&amp;nbsp; iBgnCol=(ews.UsedRange.Cells.Column&amp;gt;1)? &lt;br/&gt;&amp;nbsp;&amp;nbsp; ews.UsedRange.Cells.Column-1:ews.UsedRange.Cells.Column; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; for(i=iBgnRow;i&amp;lt;iRowCnt+iBgnRow;i++) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; for(j=iBgnCol;j&amp;lt;iColCnt+iBgnCol;j++) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; strText=((Excel.Range)ews.UsedRange.Cells[i,j]).Text.ToString(); &lt;br/&gt;&amp;nbsp;&amp;nbsp; if (strText.ToUpper().IndexOf(strKeyWord.ToUpper())&amp;gt;=0) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中包含指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　显然这种方法比第一种繁琐得多，不过这里有一个关于遍历单元格的索引很特别的地方，当工作表中的使用区域UsedRange为单行单列的时候，对UsedRange中的单元格遍历起始索引值为1，为多行多列的时候，起始索引值为0，不知这是Excel程序设计者出于什么样的考虑？ &lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/904248.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>[转贴]用C#实现在Word文档中搜索文本  </title><link>http://blog.donews.com/ant3000/archive/2006/06/06/904246.aspx</link><pubDate>Tue, 06 Jun 2006 09:36:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/06/06/904246.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/904246.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/06/06/904246.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/904246.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=904246</trackback:ping><description>&lt;table cellspacing="1" cellpadding="0" width="80%" bgcolor="#ffffcc" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="50%" bgcolor="#ffcc99" height="24"&gt;&lt;strong&gt;用C#实现在Word文档中搜索文本&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3"&gt;作者：&amp;nbsp;it步行者 &amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#575757"&gt;www.ASPCool.com&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;时间:2006-5-18 21:34:59&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="100%" colspan="3"&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在word应用程序中搜索和替换文本是举手之劳的事情，通过word的对象模型，我们也可以使用编程方式来实现。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　Word的对象模型有比较详细的帮助文档，放在Office安装程序目录，office 2003是在Program Files\Microsoft Office\OFFICE11\2052下，文档本身是为VBA提供的，在这个目录下还可以看到所有的office应用程序的VBA帮助。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　打开VBAWD10.CHM，看到word的对象模型，根据以往的使用经验，很容易在Document对象下找到Content属性，该属性会返回一个文档文字部分的Range对象，从这个对象中不难取到所有的文档内容，再用string的IndexOf()方法很容易达到目标。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;object filename=&amp;quot;&amp;quot;; //要打开的文档路径 &lt;br/&gt;&amp;nbsp;&amp;nbsp;string strKey=&amp;quot;&amp;quot;; //要搜索的文本 &lt;br/&gt;&amp;nbsp;&amp;nbsp;object MissingValue=Type.Missing; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;Word.Application wp=new Word.ApplicationClass(); &lt;br/&gt;&amp;nbsp;&amp;nbsp;Word.Document wd=wp.Documents.Open(ref filename,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue); &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;if (wd.Content.Text.IndexOf(strKey)&amp;gt;=0) &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中包含指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp;else &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中没有指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　不过，这种做法是很勉强的，对小文档来说，不存在问题，对超长超大的文档来说，这样的实现方法已经暗埋bug了，而且是程序级的bug，因为正常的测试会很难发现问题，在使用中导致程序出现什么样的结果也很难量化描述。 &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　其实，在word中已经提供了可以用作搜索的对象Find，在对象模型上也比较容易找到，对应的说明是这样的：该对象代表查找操作的执行条件。Find 对象的属性和方法与&amp;ldquo;替换&amp;rdquo;对话框中的选项一致。从模型上看，Find对象是Selection的成员，从示例代码来看似乎也是Range的成员，查找Range的属性，果然如此。于是修改上面的代码： &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;wd.Content.Find.Text=strKey; &lt;br/&gt;&amp;nbsp;&amp;nbsp;if (wd.Content.Find.Execute(ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue)) &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中包含指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp;else &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中没有指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;　　这样似乎也不是最好，因为我只要判断指定的文本是不是在文档中，而不需要知道它出现了几次，如果有多个要搜索的文本，难道每次都进行全文档搜索？假设我要搜索的文本包含在文档中，最好的情况是在文档开头就包含我要查找的文本，最坏的情况是在文档的最后包含要查找的文本，如果每次取一部分文档进行判断，符合条件就结束本次搜索，就可以避免每次搜索整个文档了。模型中的Paragraphs对象现在派上用场了，再修改一下代码： &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;int i=0,iCount=0; &lt;br/&gt;&amp;nbsp;&amp;nbsp;Word.Find wfnd; &lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;if (wd.Paragraphs!=null &amp;amp;&amp;amp; wd.Paragraphs.Count&amp;gt;0) &lt;br/&gt;&amp;nbsp;&amp;nbsp;{ &lt;br/&gt;&amp;nbsp;&amp;nbsp; iCount=wd.Paragraphs.Count; &lt;br/&gt;&amp;nbsp;&amp;nbsp; for(i=1;i&amp;lt;=iCount;i++) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; wfnd=wd.Paragraphs[i].Range.Find; &lt;br/&gt;&amp;nbsp;&amp;nbsp; wfnd.ClearFormatting(); &lt;br/&gt;&amp;nbsp;&amp;nbsp; wfnd.Text=strKey; &lt;br/&gt;&amp;nbsp;&amp;nbsp; if (wfnd.Execute(ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue,ref MissingValue, &lt;br/&gt;&amp;nbsp;&amp;nbsp; ref MissingValue)) &lt;br/&gt;&amp;nbsp;&amp;nbsp; { &lt;br/&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show(&amp;quot;文档中包含指定的关键字！&amp;quot;,&amp;quot;搜索结果&amp;quot;,MessageBoxButtons.OK); &lt;br/&gt;&amp;nbsp;&amp;nbsp; break; &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp; } &lt;br/&gt;&amp;nbsp;&amp;nbsp;} &lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/904246.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小蚂蚁</dc:creator><title>c#操作word(2) </title><link>http://blog.donews.com/ant3000/archive/2006/06/06/904234.aspx</link><pubDate>Tue, 06 Jun 2006 09:31:00 GMT</pubDate><guid>http://blog.donews.com/ant3000/archive/2006/06/06/904234.aspx</guid><wfw:comment>http://blog.donews.com/ant3000/comments/904234.aspx</wfw:comment><comments>http://blog.donews.com/ant3000/archive/2006/06/06/904234.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.donews.com/ant3000/comments/commentRss/904234.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=904234</trackback:ping><description>&lt;div class="postTitle"&gt;&lt;/div&gt;&lt;div class="postText"&gt;上一篇讲到，一个Document可能会有多个Rang对象。Rang由起始和结束字符来定他的位置。&lt;br/&gt;以下代码为先清空Document里的内容，再在第一行写入内容。&lt;br/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear out any existing information.&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object start = Type.Missing;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object end = Type.Missing;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object unit = Type.Missing;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object count = Type.Missing;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ThisDocument.Range(ref start, ref end). Delete(ref unit, ref count);&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set up the header information.&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; start = 0;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end = 0;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rng = ThisDocument.Range(ref start, ref end);&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; rng.InsertBefore(&amp;quot;Xiaopai&amp;quot;);&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; rng.Font.Name = &amp;quot;Verdana&amp;quot;;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rng.Font.Size = 16;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; rng.InsertParagraphAfter();//输入回车&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;以下为在刚写入的内容后添加一个表格。&lt;br/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; object missingValue = Type.Missing; &lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; object location = 8; //注：若location超过已有字符的长度将会出错。&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Word.Range rng = ThisDocument.Range(ref location, ref location);&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ThisDocument.Tables.Add(rng, 3, 4, ref missingValue, ref missingValue); &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;以下为在刚创建的表格里添加一行&lt;br/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Word.Table tbl = ThisDocument.Tables[1]; //第一个表格为1，而不是0&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object beforeRow = Type.Missing; &lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Rows.Add(ref beforeRow); //在表格的最后添加一行&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;填充表格内容&lt;br/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Cell(1, 1).Range.Text = &amp;quot;shuai&amp;quot;; //在表格的第一行第一列填入内容。&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;设置单元格风格&lt;br/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Word.Range rngCell; &lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rngCell = tbl.Cell(1, 2).Range; &lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rngCell.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rngCell.Font.Size = 8;&lt;/span&gt;&lt;br style="COLOR: rgb(0,51,51)"/&gt;&lt;span style="COLOR: rgb(0,51,51)"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rngCell.Font.Name = &amp;quot;Verdana&amp;quot;;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;当时没找到合并单元格的方法。有谁知道的共享一下哈。&lt;br/&gt;&lt;br/&gt;参考资料：&lt;br/&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrtskhowtocreatewordtables.asp &lt;br/&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wrtskhowtoaddrowscolumnstowordtables.asp &lt;br/&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_vsto2003_ta/html/odc_VSTWordtbl.asp &lt;/div&gt;&lt;img src ="http://blog.donews.com/ant3000/aggbug/904234.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>