<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_狂风之家－.net 学习、研究中</title><subtitle type="text">.net 学习、研究中。</subtitle><id>http://feed.cnblogs.com/blog/u/17393/rss</id><updated>2012-02-05T06:05:50Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/17393/rss"/><entry><id>http://www.cnblogs.com/bccu/archive/2010/12/06/1897714.html</id><title type="text">ActiveRecord 模型</title><summary type="text">ActiveRecord是什么:1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD; 3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑; ActiveRecord与数据库耦合更紧; 定义： 1、Active Record pattern实现，它是指一个既包含数据又包含行为的对象，这些数据需要持久保存到对应的数据表中。Active Record一个很明显的特</summary><published>2010-12-06T06:20:00Z</published><updated>2010-12-06T06:20:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/12/06/1897714.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/12/06/1897714.html"/><content type="html">&lt;div&gt;&lt;div&gt;       &lt;div&gt;&lt;strong&gt;ActiveRecord是什么:&lt;/strong&gt;&lt;br /&gt;1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;&lt;br /&gt;2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD; &lt;br /&gt;3. ActiveRecord是一种领域模型(Domain Model), &lt;strong&gt;封装了部分业务逻辑;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;ActiveRecord与数据库耦合更紧;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;定义：&lt;/div&gt; &lt;div&gt;1、Active Record pattern&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;实现，它是指一个既包含数据又包含行为的对象，这些数据需要持久保存到对应的数据表中。&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;Active Record&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;一个很明显的特征是：将数据访问逻辑也包含在这个&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;domain&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;对象中，通过这种办法让人们可以知道如何从数据库读写数据。也就是将&lt;span style="font-size: 10.5pt;"&gt;Dao&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;中对数据库的&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;CRUD&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;方法和&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;Domain Object&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"&gt;整合在一起&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;strong&gt;ActiveRecord适用于:&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;1. 业务逻辑比较简单;当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的, 即你的业务逻辑大多数是对单表操作;&lt;/div&gt; &lt;div&gt;2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script), 把跨表事务提升到事务脚本中;&lt;/div&gt; &lt;div&gt;3. ActiveRecord最大优点是简单, 直观; 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了;&lt;/div&gt; &lt;div&gt;4. 这些优点使ActiveRecord特别适合web快速开发, 而正是快速开发框架ROR采用了ActiveRecord, 并且很多类ROR框架如Castle的纷纷效仿才使ActiveRecord重新进入大家视线; &lt;br /&gt;我想这也是为什么Martin Fowler在PoEAA中早就提出了这个模式, 但是直到最近两三年ActiveRecord才热起来可能就是这个原因;&lt;/div&gt; &lt;div&gt;ActiveRecord不适合于&lt;br /&gt;1. ActiveRecord虽然有业务逻辑, 但基本上都是基于单表的.  跨表逻辑一般会放到当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script)中. 如果对象间的关联越来越多,  你的事务脚本越来越庞大, 重复的代码越来越多, 你就要考虑Domain Model + O/R Mapper了;&lt;/div&gt; &lt;div&gt;2. ActiveRecord保存了数据, 使它有时候看上去像数据传输对象(DTO). 但是ActiveRecord有数据库访问能力, 不要把它当DTO用. 尤其在跨越进程边界调用的时候, 不能传递ActiveRecord对象;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;这个模式的技术架构：&lt;/div&gt; &lt;div&gt;&lt;strong&gt;UI（Form/Web网页）&lt;/strong&gt;：数据展示， 有控件， 或者完全的HTML标签， Jsp中还有EL&lt;/div&gt; &lt;div&gt;&lt;strong&gt;Datasource&lt;/strong&gt;：数据提供者，提供给页面控件（元素）展示数据， Net有 SQLDatasource，ObjectDatasource&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Java有 JSP 对应的&amp;lt;jsp:bean&amp;gt;, &amp;lt;jsp:setProperty&amp;gt;, &amp;lt;jsp:getProperty&amp;gt; 等标签&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Zen框架中 QuerySource&lt;/div&gt; &lt;div&gt;&lt;strong&gt;BO：业务逻辑层&lt;/strong&gt;， 实现：业务逻辑与算法，Entity类业务逻辑方法，数据验证， 生成DTO层对象等功能，&lt;/div&gt; &lt;div&gt;&lt;strong&gt;业务逻辑与Datasource之间的DTO层&lt;/strong&gt;， 用来传输数据，这些数据可能是表、视图或者综合的一个POJO，对于简单数据可以与Entity共用一个类。&lt;/div&gt; &lt;div&gt;&lt;strong&gt;Entity层&lt;/strong&gt;： 类与数据库之间的映射层， 对应的关系型数据库， 保存数据时转换成SQL语句， 对应Cache数据库使用它自己的代理方法&lt;/div&gt; &lt;div&gt;&lt;strong&gt;ActiveRecord&lt;/strong&gt;： 技术框架层， 所有的Entity都继承此层的基类；本基类中包含了数据操作方法，封装了部分业务逻辑&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对应的产品： Net Castle的 ActiveRecord框架， Cache数据库的Persistent类的数据存储框架， &lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;本文出处&lt;a href="http://zhaocz.blog.51cto.com/542576/307894"&gt;http://zhaocz.blog.51cto.com/542576/307894&lt;/a&gt;&lt;/p&gt;     &lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1897714.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/12/06/1897714.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/12/05/1897117.html</id><title type="text">自动内存管理</title><summary type="text">自动内存管理是公共语言运行库在托管执行过程过程中提供的服务之一。公共语言运行库的垃圾回收器为应用程序管理内存的分配和释放。对开发人员而言，这就意味着在开发托管应用程序时不必编写执行内存管理任务的代码。自动内存管理可解决常见问题，例如，忘记释放对象并导致内存泄漏，或尝试访问已释放对象的内存。本节描述垃圾回收器如何分配和释放内存。分配内存初始化新进程时，运行时会为进程保留一个连续的地址空间区域。这个保留的地址空间被称为托管堆。托管堆维护着一个指针，用它指向将在堆中分配的下一个对象的地址。最初，该指针设置为指向托管堆的基址。托管堆上部署了所有引用类型。应用程序创建第一个引用类型时，将为托管堆的基址中</summary><published>2010-12-05T12:31:00Z</published><updated>2010-12-05T12:31:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/12/05/1897117.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/12/05/1897117.html"/><content type="html">&lt;p&gt;自动内存管理是公共语言运行库在&lt;a href="http://msdn.microsoft.com/zh-cn/library/k5532s8a(v=VS.80).aspx"&gt;&lt;font color="#1364c4"&gt;托管执行过程&lt;/font&gt;&lt;/a&gt;过程中提供的服务之一。公共语言运行库的垃圾回收器为应用程序管理内存的分配和释放。对开发人员而言，这就意味着在开发托管应用程序时不必编写执行内存管理任务的代码。自动内存管理可解决常见问题，例如，忘记释放对象并导致内存泄漏，或尝试访问已释放对象的内存。本节描述垃圾回收器如何分配和释放内存。&lt;/p&gt;&lt;h1 class="heading"&gt;分配内存&lt;/strong&gt;&lt;/p&gt;&lt;div class="seeAlsoNoToggleSection" id="sectionSection0"&gt;&lt;p&gt;初始化新进程时，运行时会为进程保留一个连续的地址空间区域。这个保留的地址空间被称为托管堆。托管堆维护着一个指针，用它指向将在堆中分配的下一个对象的地址。最初，该指针设置为指向托管堆的基址。托管堆上部署了所有&lt;a href="http://msdn.microsoft.com/zh-cn/library/zcx1eb1e(v=VS.80).aspx"&gt;&lt;font color="#1364c4"&gt;引用类型&lt;/font&gt;&lt;/a&gt;。应用程序创建第一个引用类型时，将为托管堆的基址中的类型分配内存。应用程序创建下一个对象时，垃圾回收器在紧接第一个对象后面的地址空间内为它分配内存。只要地址空间可用，垃圾回收器就会继续以这种方式为新对象分配空间。&lt;/p&gt;&lt;p&gt;从托管堆中分配内存要比非托管内存分配速度快。由于运行时通过为指针添加值来为对象分配内存，所以这几乎和从堆栈中分配内存一样快。另外，由于连续分配的新对象在托管堆中是连续存储，所以应用程序可以快速访问这些对象。&lt;/p&gt;&lt;/div&gt;&lt;a name="cpconautomaticmemorymanagementreleasingmemoryanchor1"&gt;&lt;/a&gt;&lt;h1 class="heading"&gt;释放内存&lt;/strong&gt;&lt;/p&gt;&lt;div class="seeAlsoNoToggleSection" id="sectionSection1"&gt;&lt;p&gt;垃圾回收器的优化引擎根据所执行的分配决定执行回收的最佳时间。垃圾回收器在执行回收时，会释放应用程序不再使用的对象的内存。它通过检查应用程序的根来确定不再使用的对象。每个应用程序都有一组根。每个根或者引用托管堆中的对象，或者设置为空。应用程序的根包含全局对象指针、静态对象指针、线程堆栈中的局部变量和引用对象参数以及 CPU 寄存器。垃圾回收器可以访问由&lt;a href="http://msdn.microsoft.com/zh-cn/library/ht8ecch6(v=VS.80).aspx"&gt;&lt;font color="#1364c4"&gt;实时 (JIT) 编译器&lt;/font&gt;&lt;/a&gt;和运行时维护的活动根的列表。垃圾回收器对照此列表检查应用程序的根，并在此过程中创建一个图表，在其中包含所有可从这些根中访问的对象。&lt;/p&gt;&lt;p&gt;不在该图表中的对象将无法从应用程序的根中访问。垃圾回收器会考虑无法访问的对象垃圾，并释放为它们分配的内存。在回收中，垃圾回收器检查托管堆，查找无法访问对象所占据的地址空间块。发现无法访问的对象时，它就使用内存复制功能来压缩内存中可以访问的对象，释放分配给不可访问对象的地址空间块。在压缩了可访问对象的内存后，垃圾回收器就会做出必要的指针更正，以便应用程序的根指向新地址中的对象。它还将托管堆指针定位至最后一个可访问对象之后。请注意，只有在回收发现大量的无法访问的对象时，才会压缩内存。如果托管堆中的所有对象均未被回收，则不需要压缩内存。&lt;/p&gt;&lt;p&gt;为了改进性能，运行时为单独堆中的大型对象分配内存。垃圾回收器会自动释放大型对象的内存。但是，为了避免移动内存中的大型对象，不会压缩此内存。&lt;/p&gt;&lt;/div&gt;&lt;h1 class="heading"&gt;级别和性能&lt;/strong&gt;&lt;/p&gt;&lt;div class="seeAlsoNoToggleSection" id="sectionSection2"&gt;&lt;p&gt;为了优化垃圾回收器的性能，托管堆分为三个生成级别：0、1 和 2。运行时的垃圾回收算法基于以下几个普遍原理，这些垃圾回收方案的原理已在计算机软件业通过实验得到了证实。首先，压缩托管堆的一部分内存要比压缩整个托管堆速度快。其次，较新的对象生存期较短，而较旧的对象生存期则较长。最后，较新的对象趋向于相互关联，并且大致同时由应用程序访问。&lt;/p&gt;&lt;p&gt;运行时的垃圾回收器将新对象存储在第 0 级托管堆中。在应用程序生存期的早期创建的对象如果未被回收，则被升级并存储在第 1 级和第 2 级托管堆中。对象升级的过程将在本主题的后面介绍。因为压缩托管堆的一部分要比压缩整个托管堆速度快，所以此方案允许垃圾回收器在每次执行回收时释放特定级别的内存，而不是整个托管堆的内存。&lt;/p&gt;&lt;p&gt;实际上，垃圾回收器在第 0 级托管堆已满时执行回收。如果应用程序在第 0 级托管堆已满时尝试新建对象，垃圾回收器将会发现第 0 级托管堆中没有可分配给该对象的剩余地址空间。垃圾回收器执行回收，尝试为对象释放第 0 级托管堆中的地址空间。垃圾回收器从检查第 0 级托管堆中的对象（而不是托管堆中的所有对象）开始执行回收。这是最有效的途径，因为新对象的生存期往往较短，并且期望在执行回收时，应用程序不再使用第 0 级托管堆中的许多对象。另外，单独回收第 0 级托管堆通常可以回收足够的内存，这样，应用程序便可以继续创建新对象。&lt;/p&gt;&lt;p&gt;垃圾回收器执行第 0 级托管堆的回收后，会压缩可访问对象的内存，如本主题前面的&lt;a href="http://msdn.microsoft.com/zh-cn/library/f144e03t(v=VS.80).aspx#cpconautomaticmemorymanagementreleasingmemoryanchor1"&gt;&lt;font color="#1364c4"&gt;释放内存&lt;/font&gt;&lt;/a&gt;中所述。然后，垃圾回收器升级这些对象，并考虑第 1 级托管堆的这一部分。因为未被回收的对象往往具有较长的生存期，所以将它��升级至更高的级别很有意义。因此，垃圾回收器在每次执行第 0 级托管堆的回收时，不必重新检查第 1 级和第 2 级托管堆中的对象。&lt;/p&gt;&lt;p&gt;在执行第 0 级托管堆的首次回收并把可访问的对象升级至第 1 级托管堆后，垃圾回收器将考虑第 0 级托管堆的其余部分。它将继续为第 0 级托管堆中的新对象分配内存，直至第 0 级托管堆已满并需执行另一回收为止。这时，垃圾回收器的优化引擎会决定是否需要检查较旧的级别中的对象。例如，如果第 0 级托管堆的回收没有回收足够的内存，不能使应用程序成功完成创建新对象的尝试，垃圾回收器就会先执行第 1 级托管堆的回收，然后再执行第 0 级托管堆的回收。如果这样仍不能回收足够的内存，垃圾回收器将执行第 2、1 和 0 级托管堆的回收。每次回收后，垃圾回收器都会压缩第 0 级托管堆中的可访问对象并将它们升级至第 1 级托管堆。第 1 级托管堆中未被回收的对象将会升级至第 2 级托管堆。由于垃圾回收器只支持三个级别，因此第 2 级托管堆中未被回收的对象会继续保留在第 2 级托管堆中，直到在将来的回收中确定它们为无法访问为止。&lt;/p&gt;&lt;/div&gt;&lt;h1 class="heading"&gt;为非托管资源释放内存&lt;/strong&gt;&lt;/p&gt;&lt;div class="seeAlsoNoToggleSection" id="sectionSection3"&gt;&lt;p&gt;对于应用程序创建的大多数对象，可以依赖垃圾回收器自动执行必要的内存管理任务。但是，非托管资源需要显式清除。最常用的非托管资源类型是包装操作系统资源的对象，例如，文件句柄、窗口句柄或网络连接。虽然垃圾回收器可以跟踪封装非托管资源的托管对象的生存期，但却无法具体了解如何清理资源。创建封装非托管资源的对象时，建议在公共 &lt;strong&gt;Dispose&lt;/strong&gt; 方法中提供必要的代码以清理非托管资源。通过提供 &lt;strong&gt;Dispose&lt;/strong&gt; 方法，对象的用户可以在使用完对象后显式释放其内存。使用封装非托管资源的对象时，应该了解 &lt;strong&gt;Dispose&lt;/strong&gt; 并在必要时调用它。有关清理非托管资源的更多信息和实现 &lt;strong&gt;Dispose&lt;/strong&gt; 的设计模式示例，请参见&lt;a href="http://msdn.microsoft.com/zh-cn/library/0xy59wtx(v=VS.80).aspx"&gt;&lt;font color="#1364c4"&gt;垃圾回收&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1897117.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/12/05/1897117.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/10/21/1857717.html</id><title type="text">服务端合并和压缩JS和CSS文件</title><summary type="text">Web性能优化最佳实践中最重要的一条是减少HTTP请求，它也是YSlow中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、CSS Sprites、图像映射（Image Map）和使用Data URI来编码图片。CSS Sprites和图像映射现在已经随处可见了，但由于IE6和IE7不支持Data URI以及性能问题，这项技术尚未大量使用。目前大部分网页中...</summary><published>2010-10-21T09:48:00Z</published><updated>2010-10-21T09:48:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/10/21/1857717.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/10/21/1857717.html"/><content type="html">&lt;p&gt;Web性能优化最佳实践中最重要的一条是减少HTTP请求，它也是YSlow中比重最大的一条规则。减少HTTP请求的方案主要有合并JavaScript和CSS文件、CSS  Sprites、图像映射（Image Map）和使用Data URI来编码图片。&lt;a href="http://www.blueidea.com/tech/web/2010/7683.asp" target="_blank"&gt;CSS  Sprites&lt;/a&gt;和图像映射现在已经随处可见了，但由于IE6和IE7不支持Data  URI以及性能问题，这项技术尚未大量使用。目前大部分网页中的JavaScript和CSS文件数量和开发时一致，少量的网页会根据实际情况采取本地合并，这些合并中相当多的是有选择地手动完成，每次新的合并都需要重新在本地完成并上传到服务器，比较的随意和繁琐，同样文件的压缩也有类似的情况。而利用服务端的合并和压缩，我们就可以按照开发的逻辑尽可能让文件的颗粒度变小，利用网页中URL的规则来自动实现文件的合并和压缩，这会相当的灵活和高效。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;YUI Combo Handler&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;2008年7月YUI Team宣布在YAHOO！ CDN上对YUI JavaScript组件提供Combo Handler服务。Combo  Handler是Yahoo！开发的一个Apache模块，它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件，从而大大减少文件请求数。比如在页面上使用YUI2的Rich  Text Editor组件需要引入多个JavaScript文件，常用方式如下：&lt;/p&gt;  &lt;p align="left"&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/container/container_core-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/menu/menu-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/element/element-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/button/button-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script  src="http://yui.yahooapis.com/2.8.0r4/build/editor/editor-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;  &lt;p&gt;而使用Combo Handler服务之后，则上述的代码可以写为：&lt;/p&gt;  &lt;p&gt;&amp;lt;script  src="http://yui.yahooapis.com/combo?&lt;br /&gt;2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js&amp;amp;&lt;br /&gt;2.8.0r4/build/container/container_core-min.js&amp;amp;&lt;br /&gt;2.8.0r4/build/menu/menu-min.js&amp;amp;&lt;br /&gt;2.8.0r4/build/element/element-min.js&amp;amp;&lt;br /&gt;2.8.0r4/build/button/button-min.js&amp;amp;&lt;br /&gt;2.8.0r4/build/editor/editor-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;  &lt;p&gt;除了代码的可读性稍稍有一点点降低外，使用Combo  Handler服务大大的降低了HTTP请求数，同时也减少了URL代码量，这对于Web性能优化来讲至关重要。所以，随后YUI从2.6.0开始，其核心组件YUI  Loader内置了Combo Handling功能，即使用YUI  Loader时，通过配置combine属性就可以把要加载的多个JavaScript或CSS文件按照使用Combo  Handler服务的形式合并起来，这时只要静态文件的服务器支持Combo  Handler就行了。在YUI中当combine配置为true时，CDN默认是使用Yahoo！  CDN（http://yui.yahooapis.com），所以没有任何问题。这正是YUI最迷人的地方之一。&lt;/p&gt; &lt;p&gt;遗憾的是http://yui.yahooapis.com在中国的速度并不佳，本来中国雅虎提供http://cn.yui.yahooapis.com/  ，但尚未提供Combo Handler服务，同时因种种原因，其更新在YUI 2.7.0之后就停滞了。更糟糕的是Yahoo！开发的支持Combo  Handler的Apache模块虽然据传有计划开源，但至少现在依旧是私有技术，要使用就需要自己实现类似功能，所以国内类似技术的应用并不太多。&lt;/p&gt;    &lt;p&gt;Minify&lt;/p&gt; &lt;p&gt;在Google  Code上有一个PHP的开源项目叫Minify，它可以合并、精简、Gzip压缩和缓存JavaScript和CSS文件。其文件合并功能就非常类似Combo  Handler，只不过URL的语法稍微有点不同。如果Yahoo！ CDN安装了Minify，那么上面Rich Text  Editor的代码用Minify的默认格式来写就是：&lt;/p&gt;  &lt;p&gt;&amp;lt;script  src="http://yui.yahooapis.com/min/f=&lt;br /&gt;2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js,&lt;br /&gt;2.8.0r4/build/container/container_core-min.js,&lt;br /&gt;2.8.0r4/build/menu/menu-min.js,&lt;br /&gt;2.8.0r4/build/element/element-min.js,&lt;br /&gt;2.8.0r4/build/button/button-min.js,&lt;br /&gt;2.8.0r4/build/editor/editor-min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;  &lt;p&gt;本地使用Minify很简单，只需要Apache + PHP环境就OK了：&lt;/p&gt; &lt;p&gt;安装好Apache + PHP （Windows、Mac）。&lt;/p&gt; &lt;p&gt;下载Minify源码，解压，然后把min文件夹复制到指定的根目录下，比如localhost。这时URL的写法大概是http://localhost/min/f=。..&lt;/p&gt; &lt;p&gt;启用Apache的Mod Rewrite模块，然后在min文件夹下新建.htaccess文件，并添加如下Rewrite规则：&lt;/p&gt;  &lt;p&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;# You may need  RewriteBase on some servers&lt;br /&gt;# 如果做了所有的开启Mod  Rewrite的设置依旧无效，请城市尝试启用下面这句&lt;br /&gt;#RewriteBase /min&lt;br /&gt;# rewrite URLs like  "/min/f=..." to "/min/?f=..."&lt;br /&gt;RewriteRule ^([bfg]=.*)&amp;nbsp; index.php?$1  [L,NE]&lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;/p&gt;  &lt;p&gt;如果不启用Mod  Rewrite功能，则Minify的URL会类似http://localhost/min/index.php?f=&amp;#8230;，这对客户端和中间服务器的缓存不利，而启用了Mod  Rewrite之后的URL类似http://localhost/min/f=&amp;#8230;，不仅解决前面问题且更短。&lt;/p&gt; &lt;p&gt;4. 配置Minify，即编辑min/config.php文件&lt;/p&gt;  &lt;p&gt;$min_enableBuilder =  true;&lt;br /&gt;//本地使用时可以通过http://dwn/min/builder/来进行配置，外部使用时请设置为false&lt;br /&gt;//$min_cachePath  = 'c:\\WINDOWS\\Temp';&lt;br /&gt;//$min_cachePath = '/tmp';&lt;br /&gt;//$min_cachePath =  preg_replace('/^\\d+;/', '',  session_save_path());&lt;br /&gt;//选择其一，去掉注释设置临时缓存目录，这样可以减少程序运算提高性能&lt;br /&gt;$min_serveOptions['maxAge']  =  1800;&lt;br /&gt;//设置浏览器缓存的时间，为了提升性能建议这个时间设置尽可能的长，比如315360000&lt;br /&gt;//如果需要在不改变URL的情况下更新静态文件，可以采用类似时间戳的方式，&lt;br /&gt;//如http://localhost/min/f=example/example.css&amp;amp;20100601.css&lt;br /&gt;//建议静态文件采用版本号管理，每次修改都需要升级版本号，这样就无需时间戳了&lt;br /&gt;//如http://localhost/min/f=example/example_1_0_1.css&lt;br /&gt;$min_serveOptions['minApp']['maxFiles']  =  10;&lt;br /&gt;//参数f获取参数的个数，即合并的文件个数，这个数量完全可以增大，比如50，&lt;br /&gt;//当然可能会遇到URL最大值问题，后会有解释&lt;br /&gt;$min_documentRoot  = '';&lt;br /&gt;//$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) -  15);&lt;br /&gt;//$min_documentRoot =  $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'];&lt;br /&gt;//当$min_documentRoot为空时，其值就是$_SERVER['DOCUMENT_ROOT']，&lt;br /&gt;//但合并的文件不在$_SERVER['DOCUMENT_ROOT']下，会导致400错误，&lt;br /&gt;//这个时候可以启用第2行或第3行&lt;/p&gt;  &lt;p&gt;4. 配置Minify，即编辑min/config.php文件&lt;/p&gt;  &lt;p&gt;$min_enableBuilder =  true;&lt;br /&gt;//本地使用时可以通过http://dwn/min/builder/来进行配置，外部使用时请设置为false&lt;br /&gt;//$min_cachePath  = 'c:\\WINDOWS\\Temp';&lt;br /&gt;//$min_cachePath = '/tmp';&lt;br /&gt;//$min_cachePath =  preg_replace('/^\\d+;/', '',  session_save_path());&lt;br /&gt;//选择其一，去掉注释设置临时缓存目录，这样可以减少程序运算提高性能&lt;br /&gt;$min_serveOptions['maxAge']  =  1800;&lt;br /&gt;//设置浏览器缓存的时间，为了提升性能建议这个时间设置尽可能的长，比如315360000&lt;br /&gt;//如果需要在不改变URL的情况下更新静态文件，可以采用类似时间戳的方式，&lt;br /&gt;//如http://localhost/min/f=example/example.css&amp;amp;20100601.css&lt;br /&gt;//建议静态文件采用版本号管理，每次修改都需要升级版本号，这样就无需时间戳了&lt;br /&gt;//如http://localhost/min/f=example/example_1_0_1.css&lt;br /&gt;$min_serveOptions['minApp']['maxFiles']  =  10;&lt;br /&gt;//参数f获取参数的个数，即合并的文件个数，这个数量完全可以增大，比如50，&lt;br /&gt;//当然可能会遇到URL最大值问题，后会有解释&lt;br /&gt;$min_documentRoot  = '';&lt;br /&gt;//$min_documentRoot = substr(__FILE__, 0, strlen(__FILE__) -  15);&lt;br /&gt;//$min_documentRoot =  $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'];&lt;br /&gt;//当$min_documentRoot为空时，其值就是$_SERVER['DOCUMENT_ROOT']，&lt;br /&gt;//但合并的文件不在$_SERVER['DOCUMENT_ROOT']下，会导致400错误，&lt;br /&gt;//这个时候可以启用第2行或第3行&lt;/p&gt;     &lt;p&gt;5. 使用Minify&lt;/p&gt; &lt;p&gt;比如，有两个JavaScript文件，http://localhost/example/a.js，http://localhost/example/b.js，那么使用Minify合并的URL是http://localhost/min/f=/example/a.js，/example/b.js，直接把这个URL放到页面中就可以使用了。&lt;/p&gt; &lt;p&gt;实际上Minify不仅仅实现了合并功能，同时默认在合并的同时还会对文件进行精简压缩，如果你在本地本身就对文件进行压缩了，比如使用YUI  Compressor，那么可以在config.php中进行如下设置取消Minify的压缩以提升性能：&lt;/p&gt;  &lt;p&gt;$min_serveOptions['minifiers']['application/x-javascript'] =  '';&lt;br /&gt;$min_serveOptions['minifiers']['text/css'] = '';&lt;/p&gt;  &lt;p&gt;如果服务端支持Java，那么也可以对Minify进行简单配置而实现利用YUI Compressor压缩JavaScript和CSS文件。&lt;/p&gt; &lt;p&gt;直接在服务端进行合并和压缩，这非常的灵活，也极大的减轻了前端开发成果的部署过程，真使事半功倍。更多配置请看Minify CookBook和Wiki&lt;/p&gt; &lt;p&gt;在YUI3中使用Minify&lt;/p&gt; &lt;p&gt;在YUI2中，合并机制只支持库本身的文件，自定义的文件会单独一一加载。从YUI3开始，模块变得更小，这样就导致使用合并时URL会变长，但在IE下URL的最大值是2083，Apache默认的URL最大值是8192，所以当URL在对应浏览器下超出最大值时，YUI3会自动根据浏览器判断进行拆分成多个合并的URL，并且还提供maxURLLength来设置最大值。而从YUI3.1.0开始，不仅仅支持自定义文件的合并，还支持可以使用多个提供合并服务的CDN，即可以对YUI组件使用http://yui.yahooapis.com这个CDN，其余文件使用其他支持合并的CDN，这样非常的实用、方便和灵活。示例在YUI3中使用Minify就说明了这点。&lt;/p&gt; &lt;p&gt;由于YUI默认URL的合并形式和Minify的不相同，所以在YUI实例化时需要利用正则替换来实现YUI3支持Minify的URL合并形式，但这种方式既不灵活，且有风险，不友好又效率低。比较简单的方式是直接修改YUI  3的源码，如示例在修改后的YUI3中使用Minify。同时，YUI  3.1.*的版本有一个bug，即同时合并JavaScript和CSS时，较短的那个URL结尾处多一个&amp;amp;符号，如示例在YUI3中使用Minify中：&lt;/p&gt;  &lt;p&gt;http://yui.yahooapis.com/combo?3.1.1/build/widget/assets/skins/sam/widget.css&amp;amp;&lt;br /&gt;3.1.1/build/console/assets/skins/sam/console.css&amp;amp;&lt;/p&gt; &lt;p&gt;http://dancewithnet.com/min/b=yui&amp;amp;f=3.1.1/tabview/assets/&lt;br /&gt;skins/sam/tabview.css&amp;amp;&lt;/p&gt;  &lt;p&gt;这两种都可以使用，虽然在早期的IE浏览器版本（如IE6）中会有无法解析的风险，且影响某些特定情况下的缓存，但当使用修改后的YUI时，合并的URL变成类似/min/b=yui&amp;amp;f=3.1.1/tabview/assets/skins/sam/tabview.css，的样子，就会出现bug了。对于YUI的Combo  Handler来说这是一个小bug，所以YUI3把这个bug设置为P5。但当我们改造YUI3来更好的支持Minify时，还要解决这个问题，具体方案请看示例在修改后的YUI3中使用Minify。&lt;/p&gt; &lt;p&gt;在CDN上使用Minify&lt;/p&gt; &lt;p&gt;CDN的全称是Content Delivery  Network，即内容分发网络。其最常应用就是通过位于不同地理位置的服务器把静态资源部署到用户最近的边缘，这样能有效解决Web服务中大量静态资源的速度和性能问题。由于实施成本比较高，所以在实际的应用中，大型公司一般会组建自己的CDN，而小型公司只能租借第三方的CDN，但不管怎样这两种方式都不会影响在服务端实施合并和压缩程序。一般情况下，静态资源也并不是直接上传到CDN，而是先传到一台后台服务器，然后各地CDN的前端Cache服务器按需索取。YUI  CDN的Combo Handler就是部署在其后台服务器上的，Minify也应如此。简单图示如下：&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://upload.k666.com/6/f0/1276841585523.jpg" border="0" height="151" width="509" /&gt;&lt;/p&gt; &lt;p&gt;当一个资源请求到CDN时，CDN会先检查本地是否存在这个资源，如果有则会直接返回该资源，如果没有则会请求其后台服务器，后台服务器会依据资源URL的信息进行相应的处理，然后返回给CDN，CDN就会存储这个资源，再次出现这个资源请求时就无需请求后台服务器了。所以，虽然合并特别是压缩JavaScript和CSS文件是消耗时间的，但是由于只需要第一次，并且第一次基本上由我们自己访问掉（我们可以创建程序自动进行一次访问来保证，实际上图片优化也可以采用这种方式），所以基本上很安全。这正是目前在口碑网实施的JavaScript和CSS合并方案，在第4届D2的《前端性能优化和自动化》中也介绍了它。&lt;/p&gt; &lt;p&gt;原文：&lt;a href="http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/" target="_blank"&gt;http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1857717.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/10/21/1857717.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/09/17/1829489.html</id><title type="text">C#Excel操作的用法</title><summary type="text">这里是一些整理的Excel的一些简单的操作 ApplicationClass ExcelApp = New ApplicationClass();2) 更改 Excel 标题栏：  ExcelApp.Caption := '应用程序调用 Microsoft Excel'; 3) 添加新工作簿：  ExcelApp.WorkBooks.Add; 4) 打开已存在的工作簿：...</summary><published>2010-09-17T09:11:00Z</published><updated>2010-09-17T09:11:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/09/17/1829489.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/09/17/1829489.html"/><content type="html">&lt;p&gt;&lt;code&gt;这里是一些整理的Excel的一些简单的操作&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt; &lt;u&gt;ApplicationClass ExcelApp = New ApplicationClass();&lt;br /&gt;&lt;br /&gt;2) 更改 Excel 标题栏： &lt;br /&gt; ExcelApp.Caption := '应用程序调用 Microsoft Excel'; &lt;br /&gt;3) 添加新工作簿： &lt;br /&gt; ExcelApp.WorkBooks.Add; &lt;br /&gt;4) 打开已存在的工作簿： &lt;br /&gt; ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' ); &lt;br /&gt;5) 设置第2个工作表为活动工作表： &lt;br /&gt; ExcelApp.WorkSheets[2].Activate; 或 &lt;br /&gt; ExcelApp.WorksSheets[ 'Sheet2' ].Activate; &lt;br /&gt;6) 给单元格赋值： &lt;br /&gt; ExcelApp.Cells[1,4].Value := '第一行第四列'; &lt;br /&gt;7) 设置指定列的宽度（单位：字符个数），以第一列为例： &lt;br /&gt; ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5; &lt;br /&gt;8) 设置指定行的高度（单位：磅）（1磅＝0.035厘米），以第二行为例： &lt;br /&gt; ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米 &lt;br /&gt;9) 在第8行之前插入分页符： &lt;br /&gt; ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1; &lt;br /&gt;10) 在第8列之前删除分页符： &lt;br /&gt; ExcelApp.ActiveSheet.Columns[4].PageBreak := 0; &lt;br /&gt;11) 指定边框线宽度： &lt;br /&gt; ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3; &lt;br /&gt; 1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / ) &lt;br /&gt;12) 清除第一行第四列单元格公式： &lt;br /&gt; ExcelApp.ActiveSheet.Cells[1,4].ClearContents; &lt;br /&gt;13) 设置第一行字体属性： &lt;br /&gt; ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书'; &lt;br /&gt; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; &lt;br /&gt; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True; &lt;br /&gt; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True; &lt;br /&gt;14) 进行页面设置： &lt;br /&gt; a.页眉： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示'; &lt;br /&gt; b.页脚： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&amp;amp;P页'; &lt;br /&gt; c.页眉到顶端边距2cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035; &lt;br /&gt; d.页脚到底端边距3cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035; &lt;br /&gt; e.顶边距2cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035; &lt;br /&gt; f.底边距2cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035; &lt;br /&gt; g.左边距2cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035; &lt;br /&gt; h.右边距2cm： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035; &lt;br /&gt; i.页面水平居中： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; &lt;br /&gt; j.页面垂直居中： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035; &lt;br /&gt; k.打印单元格网线： &lt;br /&gt; ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True; &lt;br /&gt;15) 拷贝操作： &lt;br /&gt; a.拷贝整个工作表： &lt;br /&gt; ExcelApp.ActiveSheet.Used.Range.Copy; &lt;br /&gt; b.拷贝指定区域： &lt;br /&gt; ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy; &lt;br /&gt; c.从A1位置开始粘贴： &lt;br /&gt; ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial; &lt;br /&gt; d.从文件尾部开始粘贴： &lt;br /&gt; ExcelApp.ActiveSheet.Range.PasteSpecial; &lt;br /&gt;16) 插入一行或一列： &lt;br /&gt; a. ExcelApp.ActiveSheet.Rows[2].Insert; &lt;br /&gt; b. ExcelApp.ActiveSheet.Columns[1].Insert; &lt;br /&gt;17) 删除一行或一列： &lt;br /&gt; a. ExcelApp.ActiveSheet.Rows[2].Delete; &lt;br /&gt; b. ExcelApp.ActiveSheet.Columns[1].Delete; &lt;br /&gt;18) 打印预览工作表： &lt;br /&gt; ExcelApp.ActiveSheet.PrintPreview; &lt;br /&gt;19) 打印输出工作表： &lt;br /&gt; ExcelApp.ActiveSheet.PrintOut; &lt;br /&gt;20) 工作表保存： &lt;br /&gt; if not ExcelApp.ActiveWorkBook.Saved then &lt;br /&gt; ExcelApp.ActiveSheet.PrintPreview; &lt;br /&gt;21) 工作表另存为： &lt;br /&gt; ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' ); &lt;br /&gt;22) 放弃存盘： &lt;br /&gt; ExcelApp.ActiveWorkBook.Saved := True; &lt;br /&gt;23) 关闭工作簿： &lt;br /&gt; ExcelApp.WorkBooks.Close; &lt;br /&gt;24) 退出 Excel： &lt;br /&gt; ExcelApp.Quit; &lt;/u&gt;&lt;br /&gt;&lt;/p&gt; &lt;div&gt;&lt;div&gt;&lt;a style="width: 16px; height: 16px;" title="view source" href="http://www.cnblogs.com/xiaoshuai/archive/2010/06/08/1753870.html#viewSource"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;001&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;002&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// ExcelEdit 的摘要说明&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;003&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// &amp;lt;/summary&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;004&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;class&lt;/code&gt; &lt;code&gt;ExcelEdit&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;005&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;006&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;mFilename;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;007&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Application app;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;008&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Workbooks wbs;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;009&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Workbook wb;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;010&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheets wss;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;011&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet ws;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;012&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;ExcelEdit()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;013&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;014&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;015&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;// TODO: 在此处添加构造函数逻辑&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;016&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;017&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;018&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Create()&lt;/code&gt;&lt;code&gt;//创建一个Excel对象&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;019&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;020&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;021&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;022&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;app = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Application();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;023&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wbs = app.Workbooks;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;024&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb = wbs.Add(&lt;/code&gt;&lt;code&gt;true&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;025&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;026&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;catch&lt;/code&gt; &lt;code&gt;(Exception ex)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;027&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;028&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;029&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;Exception(ex.Message);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;030&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;031&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;032&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;033&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;034&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// 读取Excel文档 &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;035&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// &amp;lt;/summary&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;036&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// &amp;lt;param name="Path"&amp;gt;文件名称&amp;lt;/param&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;037&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;/// &amp;lt;returns&amp;gt;返回一个数据集&amp;lt;/returns&amp;gt; &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;038&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;DataTable ExcelToTable(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;tablename)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;039&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;040&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;strConn = &lt;/code&gt;&lt;code&gt;"Provider=Microsoft.Jet.OLEDB.4.0;"&lt;/code&gt; &lt;code&gt;+ &lt;/code&gt;&lt;code&gt;"Data Source="&lt;/code&gt; &lt;code&gt;+ mFilename+ &lt;/code&gt;&lt;code&gt;";"&lt;/code&gt; &lt;code&gt;+ &lt;/code&gt;&lt;code&gt;"Extended Properties=Excel 8.0;"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;041&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;OleDbConnection conn = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;OleDbConnection(strConn);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;042&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;conn.Open();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;043&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;strExcel = &lt;/code&gt;&lt;code&gt;""&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;044&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;OleDbDataAdapter myCommand = &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;045&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;DataTable dt = &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;046&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;strExcel = &lt;/code&gt;&lt;code&gt;"select * from ["&lt;/code&gt; &lt;code&gt;+ tablename + &lt;/code&gt;&lt;code&gt;"$]"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;047&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;myCommand = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;OleDbDataAdapter(strExcel, strConn);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;048&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;dt = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;DataTable();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;049&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;myCommand.Fill(dt);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;050&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;dt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;051&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;052&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Open(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;FileName)&lt;/code&gt;&lt;code&gt;//打开一个Excel文件&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;053&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;054&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;055&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;056&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;app = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Application();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;057&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wbs = app.Workbooks;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;058&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb = wbs.Add(FileName);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;059&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//wb  = wbs.Open(FileName,&amp;nbsp; 0, true, 5,"", "", true,  Excel.XlPlatform.xlWindows, "\t", false, false, 0,  true,Type.Missing,Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;060&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//wb  =  wbs.Open(FileName,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Excel.XlPlatform.xlWindows,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;061&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;mFilename = FileName;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;062&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;063&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;catch&lt;/code&gt; &lt;code&gt;(Exception ex)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;064&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;065&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;066&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;Exception(ex.Message);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;067&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;068&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;069&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;070&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet GetSheet(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;SheetName)&lt;/code&gt;&lt;code&gt;//获取一个工作表&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;071&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;072&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;073&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;s;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;074&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;075&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;076&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet GetSheet(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;index)&lt;/code&gt;&lt;code&gt;//获取一个工作表&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;077&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;078&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[index];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;079&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;s;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;080&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;081&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet AddSheet(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;SheetName)&lt;/code&gt;&lt;code&gt;//添加一个工作表&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;082&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;083&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet  s =  (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(Type.Missing,  Type.Missing, Type.Missing, Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;084&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;s.Name = SheetName;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;085&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;s;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;086&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;087&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;088&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;DelSheet(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;SheetName)&lt;/code&gt;&lt;code&gt;//删除一个工作表&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;089&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;090&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName]).Delete();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;091&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;092&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;OldSheetName, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;NewSheetName)&lt;/code&gt;&lt;code&gt;//重命名一个工作表一&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;093&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;094&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;095&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;s.Name = NewSheetName;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;096&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;s;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;097&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;098&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;099&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(Microsoft.Office.Interop.Excel.Worksheet Sheet, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;NewSheetName)&lt;/code&gt;&lt;code&gt;//重命名一个工作表二&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;101&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;102&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Sheet.Name = NewSheetName;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;103&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;104&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;Sheet;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;105&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;106&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;107&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;SetCellValue(Microsoft.Office.Interop.Excel.Worksheet ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y, &lt;/code&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;value)&lt;/code&gt;&lt;code&gt;//ws：要设值的工作表&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X行Y列&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value&amp;nbsp;&amp;nbsp; 值 &lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;108&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;109&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.Cells[x, y] = value;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;110&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;111&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;SetCellValue(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y, &lt;/code&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;value)&lt;/code&gt;&lt;code&gt;//ws：要设值的工作表的名称 X行Y列 value 值&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;112&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;113&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;114&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;GetSheet(ws).Cells[x, y] = value;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;115&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;116&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;117&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;118&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;SetCellProperty(Microsoft.Office.Interop.Excel.Worksheet ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Startx, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Starty, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Endx, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Endy, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;size, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)&lt;/code&gt;&lt;code&gt;//设置一个单元格的属性&amp;nbsp;&amp;nbsp; 字体，&amp;nbsp;&amp;nbsp; 大小，颜色&amp;nbsp;&amp;nbsp; ，对齐方式&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;119&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;120&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;name = &lt;/code&gt;&lt;code&gt;"宋体"&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;121&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;size = 12;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;122&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;color = Microsoft.Office.Interop.Excel.Constants.xlAutomatic;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;123&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlRight;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;124&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;125&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;126&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;127&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;128&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;129&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;130&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;SetCellProperty(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;wsn, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Startx, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Starty, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Endx, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;Endy, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;size, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;131&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;132&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//name = "宋体";&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;133&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//size = 12;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;134&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//color = Excel.Constants.xlAutomatic;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;135&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//HorizontalAlignment = Excel.Constants.xlRight;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;136&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;137&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;Microsoft.Office.Interop.Excel.Worksheet ws = GetSheet(wsn);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;138&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;139&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;140&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;141&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;142&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;143&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;144&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;145&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;146&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;UniteCells(Microsoft.Office.Interop.Excel.Worksheet ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x2, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y2)&lt;/code&gt;&lt;code&gt;//合并单元格&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;147&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;148&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;149&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;150&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;151&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;UniteCells(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;x2, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;y2)&lt;/code&gt;&lt;code&gt;//合并单元格&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;152&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;153&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;GetSheet(ws).get_Range(GetSheet(ws).Cells[x1, y1], GetSheet(ws).Cells[x2, y2]).Merge(Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;154&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;155&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;156&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;157&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;158&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;InsertTable(System.Data.DataTable dt, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startX, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startY)&lt;/code&gt;&lt;code&gt;//将内存中数据表格插入到Excel指定工作表的指定位置 为在使用模板时控制格式时使用一&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;159&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;160&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;161&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;i = 0; i &amp;lt;= dt.Rows.Count - 1; i++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;162&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;163&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;j = 0; j &amp;lt;= dt.Columns.Count - 1; j++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;164&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;165&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;GetSheet(ws).Cells[startX + i, j + startY] = dt.Rows[i][j].ToString();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;166&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;167&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;168&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;169&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;170&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;171&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;172&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;InsertTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startX, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startY)&lt;/code&gt;&lt;code&gt;//将内存中数据表格插入到Excel指定工作表的指定位置二&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;173&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;174&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;175&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;i = 0; i &amp;lt;= dt.Rows.Count - 1; i++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;176&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;177&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;j = 0; j &amp;lt;= dt.Columns.Count - 1; j++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;178&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;179&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;180&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.Cells[startX + i, j + startY] = dt.Rows[i][j];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;181&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;182&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;183&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;184&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;185&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;186&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;187&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;188&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;189&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;AddTable(System.Data.DataTable dt, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startX, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startY)&lt;/code&gt;&lt;code&gt;//将内存中数据表格添加到Excel指定工作表的指定位置一&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;190&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;191&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;192&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;i = 0; i &amp;lt;= dt.Rows.Count - 1; i++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;193&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;194&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;j = 0; j &amp;lt;= dt.Columns.Count - 1; j++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;195&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;196&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;197&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;GetSheet(ws).Cells[i + startX, j + startY] = dt.Rows[i][j];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;198&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;199&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;201&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;202&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;203&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;204&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;AddTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startX, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;startY)&lt;/code&gt;&lt;code&gt;//将内存中数据表格添加到Excel指定工作表的指定位置二&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;205&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;206&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;207&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;208&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;i = 0; i &amp;lt;= dt.Rows.Count - 1; i++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;209&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;210&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;for&lt;/code&gt; &lt;code&gt;(&lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;j = 0; j &amp;lt;= dt.Columns.Count - 1; j++)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;211&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;212&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;213&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ws.Cells[i + startX, j + startY] = dt.Rows[i][j];&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;214&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;215&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;216&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;217&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;218&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;219&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;220&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;InsertActiveChart(Microsoft.Office.Interop.Excel.XlChartType ChartType, &lt;/code&gt;&lt;code&gt;string&lt;/code&gt; &lt;code&gt;ws, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;DataSourcesX1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;DataSourcesY1, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;DataSourcesX2, &lt;/code&gt;&lt;code&gt;int&lt;/code&gt; &lt;code&gt;DataSourcesY2, Microsoft.Office.Interop.Excel.XlRowCol ChartDataType)&lt;/code&gt;&lt;code&gt;//插入图表操作&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;221&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;222&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;ChartDataType = Microsoft.Office.Interop.Excel.XlRowCol.xlColumns;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;223&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;224&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;225&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.ActiveChart.ChartType = ChartType;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;226&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.ActiveChart.SetSourceData(GetSheet(ws).get_Range(GetSheet(ws).Cells[DataSourcesX1,  DataSourcesY1], GetSheet(ws).Cells[DataSourcesX2, DataSourcesY2]),  ChartDataType);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;227&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, ws);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;228&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;229&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;230&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;Save()&lt;/code&gt;&lt;code&gt;//保存文档&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;231&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;232&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(mFilename == &lt;/code&gt;&lt;code&gt;""&lt;/code&gt;&lt;code&gt;)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;233&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;234&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;false&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;235&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;236&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;else&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;237&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;238&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;239&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;240&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.Save();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;241&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;true&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;242&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;243&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;244&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;catch&lt;/code&gt; &lt;code&gt;(Exception ex)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;245&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;246&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;false&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;247&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;248&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;249&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;250&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;bool&lt;/code&gt; &lt;code&gt;SaveAs(&lt;/code&gt;&lt;code&gt;object&lt;/code&gt; &lt;code&gt;FileName)&lt;/code&gt;&lt;code&gt;//文档另存为&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;251&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;252&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;253&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;254&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.SaveAs(FileName,  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,  Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;255&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;true&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;256&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;257&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;258&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;259&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;catch&lt;/code&gt; &lt;code&gt;(Exception ex)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;260&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;261&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;return&lt;/code&gt; &lt;code&gt;false&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;262&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;263&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;264&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;265&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;public&lt;/code&gt; &lt;code&gt;void&lt;/code&gt; &lt;code&gt;Close()&lt;/code&gt;&lt;code&gt;//关闭一个Excel对象，销毁对象&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;266&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;267&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;//wb.Save();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;268&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb.Close(Type.Missing, Type.Missing, Type.Missing);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;269&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wbs.Close();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;270&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;app.Quit();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;271&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wb = &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;272&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;wbs = &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;273&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;app = &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;274&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;GC.Collect();&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;275&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;276&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1829489.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/09/17/1829489.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/09/11/1823771.html</id><title type="text">SQL Server数据库的数据汇总完全解析(WITH ROLLUP)</title><summary type="text">现有表A，内容如下： 现在想按编码查询出这种格式: 问：该如何实现？ 乍一看，好像很容易，用group by好像能实现？但仔细研究下去，你又会觉得group by也是无能为力，总欠缺点什么，无从下手。那么，到底该如何做呢？别急，SQL Server早就帮我们做好了，下面，跟我来。 首先，让我们来看一段话： 在生成包含小计和合计的报表时，ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类...</summary><published>2010-09-11T00:57:00Z</published><updated>2010-09-11T00:57:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/09/11/1823771.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/09/11/1823771.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blog_content"&gt;&lt;p&gt;现有表A，内容如下： &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;编码   仓库    数量&lt;br/&gt;            01      A       6&lt;br/&gt;            01      B       7&lt;br/&gt;            02      A       8&lt;br/&gt;            02      B       9&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;现在想按编码查询出这种格式: &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;01      A       6&lt;br/&gt;            01      B       7&lt;br/&gt;            汇总小计：     13&lt;br/&gt;            02      A       8&lt;br/&gt;            02      B       9&lt;br/&gt;            汇总小计：     17&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;问：该如何实现？ &lt;/p&gt;&lt;p&gt;乍一看，好像很容易，用group by好像能实现？但仔细研究下去，你又会觉得group by也是无能为力，总欠缺点什么，无从下手。那么，到底该如何做呢？别急，SQL Server早就帮我们做好了，下面，跟我来。 &lt;/p&gt;&lt;p&gt;首先，让我们来看一段话： &lt;/p&gt;&lt;p&gt;在生成包含小计和合计的报表时，ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 &lt;/p&gt;&lt;p&gt;CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展，事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集，其中包含了各维度的所有可能组合的交叉表格。 &lt;/p&gt;&lt;p&gt;CUBE 运算符在 SELE&lt;a class="qs_highlight1" id="hl_1" style="font-size: 1em" href="http://clk.qunsee.com/click/click.php?cpid=12&amp;amp;amp;ads_id=183&amp;amp;amp;pid=99003011&amp;amp;amp;cid=3022&amp;amp;amp;url=http%3A//www.filying.com/ViewArticle.aspx%3Fid%3D11&amp;amp;amp;k=CT&amp;amp;amp;s=http%3A//www.zhujiangroad.com/html/soft/s7879.html&amp;amp;amp;rn=170234&amp;amp;amp;v=1&amp;amp;amp;ref=http%3A//www.zhujiangroad.com/program/SQL.html&amp;amp;amp;province=%u6E56%u5317&amp;amp;amp;city=%u6B66%u6C49" target="_blank"&gt;&lt;font color="#108ac6"&gt;CT&lt;/font&gt;&lt;/a&gt; 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合，以及与这些维度值组合相匹配的基础行中的聚合值。 &lt;/p&gt;&lt;p&gt;CUBE 和 ROLLUP 之间的区别在于： &lt;/p&gt;&lt;p&gt;CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 &lt;/p&gt;&lt;p&gt;ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 &lt;/p&gt;&lt;p&gt;看完以上的这段话，悟出了什么没有？如果没有，那么&amp;#8230;&amp;#8230;嘿嘿，你的悟性还不够哟，离&amp;#8220;三花棸顶&amp;#8221;还早着呢：）。接下来我们再看一段（注意哟，答案马上就揭晓了）： &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;SELECT 编码, 仓库, Sum(数量) as 数量&lt;br/&gt;            FROM A&lt;br/&gt;            GROUP BY 编码, 仓库 WITH ROLLUP&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;--关键就是后面的WITH ROLLUP &lt;/p&gt;&lt;p&gt;--当然，你也可以用WITH CUBE，但是结果会有点不大一样 &lt;/p&gt;&lt;p&gt;可能看完上面这段你还是觉得&amp;#8220;云里雾里&amp;#8221;，摸不着头脑。实在不明白也没关系，自己动手做。 &lt;/p&gt;&lt;p&gt;首先：建一个上面所说的A表，输入几行数据； &lt;/p&gt;&lt;p&gt;接着：打开你的SQL Server查询分析器，连上包含你上面所建A表的服务器，选择包含该表的数据库； &lt;/p&gt;&lt;p&gt;然后：Copy上面这段SQL 语句，Paste到查询分析器中，按F5，怎么样？看到下面出来了什么？是不是和我下面的一样？ &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;编码        仓库       数量&lt;br/&gt;            01            A         　6&lt;br/&gt;            01            B        　 7&lt;br/&gt;            01      NULL　       13&lt;br/&gt;            02            A           8&lt;br/&gt;            02            B           9&lt;br/&gt;            02      NULL　     　17&lt;br/&gt;            NULL        NULL　     　30&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;--如果你用的是WITH CUBE，结果集的后面还会多出两条（如果你也只是输入示例中的几行数据的话）： &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;NULL          A          14&lt;br/&gt;            NULL          B          16&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;咦！奇怪，结果中怎么有那么多&amp;#8220;NULL&amp;#8221;值？哈，别急，这几行正是我们所要的汇总数据行，不难看出： &lt;/p&gt;&lt;p&gt;01　NULL　13正是对编码为01的所有仓库中的数量的汇总；02　NULL　17是对编码为02的所有仓库的数量的汇总； &lt;/p&gt;&lt;p&gt;NULL　NULL　30是对所有资料行数量的汇总。 &lt;/p&gt;&lt;p&gt;如何？答案出来了吧？是不是很简单呢？当然，上面还有点美中不足，那就是有好多&amp;#8220;NULL&amp;#8221;的存在。如何去掉这些无意义的NULL呢？下面我们再进行优化。 &lt;/p&gt;&lt;p&gt;1、用Grouping替换NULL值 &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;SELECT CASE WHEN (GROUPING(编码) = 1) THEN 'ALL'&lt;br/&gt;            ELSE ISNULL(编码, 'UNKNOWN')&lt;br/&gt;            END AS 编码,&lt;br/&gt;            CASE WHEN (GROUPING(仓库) = 1) THEN 'ALL'&lt;br/&gt;            ELSE ISNULL(仓库, 'UNKNOWN')&lt;br/&gt;            END AS 仓库,&lt;br/&gt;            SUM(数量) AS 数量&lt;br/&gt;            FROM A&lt;br/&gt;            GROUP BY 编码, 仓库 WITH ROLLUP&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;--适当的运用Case函数 &lt;/p&gt;&lt;p&gt;结果我这里就不写了，就是把上面的&amp;#8220;NULL&amp;#8221;值全部换成&amp;#8220;ALL&amp;#8221;字符串 &lt;/p&gt;&lt;p&gt;2、利用程序做进一步的优化 &lt;/p&gt;&lt;p&gt;//通常为了显示上的需要，我们必须对以上SQL语句生成的结果做一些优化，下面给出自然语言描述： &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" align="center" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="font-size: 9pt"&gt;WHILE（未到达最后一条记录）｛&lt;br/&gt;            IF 编码值不为ALL而仓库值为ALL&lt;br/&gt;            ｛&lt;br/&gt;            　将编码值用&amp;#8220;小计：&amp;#8221;替换，将仓库值用""替换;&lt;br/&gt;            　将这一行的颜色标示为灰色;&lt;br/&gt;            ｝&lt;br/&gt;            ELSE 编码值为ALL仓库值也为ALL&lt;br/&gt;            ｛&lt;br/&gt;            　将编码值用&amp;#8220;总计：&amp;#8221;替换，将仓库值用""替换;&lt;br/&gt;            　将这一行的着色标示为淡绿色;&lt;br/&gt;            ｝&lt;br/&gt;            指针移到下一条;&lt;br/&gt;            }&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-1076724771190722";/* JE个人博客468x60 */google_ad_slot = "5506163105";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"&gt;&lt;/script&gt;&lt;script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"&gt;&lt;/script&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"&gt;&lt;/script&gt;&lt;script&gt;google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);&lt;/script&gt;&lt;a href="http://kingsui.javaeye.com/blog/177001"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1823771.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/09/11/1823771.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/08/19/1803173.html</id><title type="text">net托管资源和非托管资源</title><summary type="text">对于托管的资源的回收工作，是不需要人工干预回收的，而且你也无法干预他们的回收，所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象，可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。 对于非托管资源，您在应用程序中使用完这些非托管资源之后，必须显示的释放他们，例如System.IO.StreamReader的一个文件对象...</summary><published>2010-08-19T02:09:00Z</published><updated>2010-08-19T02:09:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/08/19/1803173.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/08/19/1803173.html"/><content type="html">对于托管的资源的回收工作，是不需要人工干预回收的，而且你也无法干预他们的回收，所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象，可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。 &lt;p&gt;对于非托管资源，您在应用程序中使用完这些非托管资源之后，必须显示的释放他们，例如System.IO.StreamReader的一个文件对象，必须显示的调用对象的Close()方法关闭它，否则会占用系统的内存和资源，而且可能会出现意想不到的错误。&lt;/p&gt; &lt;p&gt;我想说到这里，一定要清楚什么是托管资源，什么是非托管资源了？&lt;/p&gt; &lt;p&gt;最常见的一类非托管资源就是包装操作系统资源的对象，例如文件，窗口或网络连接，对于这类资源虽然垃圾回收器可以跟踪封装非托管资源的对象的生 存期，但它不了解具体如何清理这些资源。还好.net  Framework提供了Finalize()方法，它允许在垃圾回收器回收该类资源时，适当的清理非托管资源。如果在MSDN Library  中搜索Finalize将会发现很多类似的主题，这里列举几种常见的非托管资 源：ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,Timer,Tooltip  等等资源。可能在使用的时候很多都没有注意到！&lt;/p&gt; &lt;p&gt;关于托管资源，就不用说了撒，像简单的int,string,float,DateTime等等，.net中超过80%的资源都是托管资源。&lt;/p&gt; &lt;p&gt;非托管资源如何释放，.NET Framework 提供 Object.Finalize  方法，它允许对象在垃圾回收器回收该对象使用的内存时适当清理其非托管资源。默认情况下，Finalize  方法不执行任何操作。默认情况下，Finalize  方法不执行任何操作。如果您要让垃圾回收器在回收对象的内存之前对对象执行清理操作，您必须在类中重写 Finalize  方法。然而大家都可以发现在实际的编程中根本无法override方法Finalize(),在C#中，可以通过析构函数自动生成 Finalize  方法和对基类的 Finalize 方法的调用。&lt;/p&gt; &lt;p&gt;例如： &lt;br /&gt;~MyClass()&lt;br /&gt;{ &lt;br /&gt;// Perform some cleanup operations here. &lt;br /&gt;} &lt;br /&gt;该代码隐式翻译为下面的代码。&lt;br /&gt;protected override void Finalize() &lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// Perform some cleanup operations here.&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;base.Finalize();&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;但是，在编程中，并不建议进行override方法Finalize()，因为，实现  Finalize 方法或析构函数对性能可能会有负面影响。一个简单的理由如下：用 Finalize  方法回收对象使用的内存需要至少两次垃圾回收，当垃圾回收器回收时，它只回收没有终结器(Finalize方法)的不可访问的内存，这时他不能回收具有终 结器(Finalize方法)的不可以访问的内存。它改为将这些对象的项从终止队列中移除并将他们放置在标记为&amp;#8220;准备终止&amp;#8221;的对象列表中，该列表中的项指 向托管堆中准备被调用其终止代码的对象，下次垃圾回收器进行回收时，就回收并释放了这些内存。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C#托管及未托管对象管理&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;　c#中的对象分为值类型和引用类型,二者最大的区别在于数据的存储方式和存储位 置.WINDOWS操作系统使用虚拟寻址系统来管理程序运行时产生的数据存放.简单的说,该系统管理着一个内存区域,在该区域中划拨出一部分出来专门存放 值类型变量,称为堆栈,堆栈采用先进后出的原则,将值类型变量从区域的最高地址位开始向低位地址存储,先进后出,后进先出的管理方式保证了值类型变量在出 了作用域后能即使的清除占用的内存区域,由于堆栈速度快,所保存的数据一般不太大，这部分一般不需要用户专门操作. 值类型保存在堆栈汇总，  堆栈有非常高的性能，但对于所有的变量来说还是不太灵活。通常我们希望使用一个方法分配内存，来存储一些数据，并在方法退出后的很长一段时间内数据仍是可 以使用的。只要是用new运算符来请求存储空间，就存在这种可能性&amp;#8212;&amp;#8212;例如所有的引用类型。此时就要使用托管堆。它在垃圾收集器的控制下工作，托管堆(或 简称为堆)是系统管理的大内存区域中的另一个内存区域。要了解堆的工作原理和如何为引用数据类型分配内存，看看下面的代码： &lt;br /&gt;Customer arabel = new Customer();&lt;br /&gt;这 行代码完成了以下操作：首先，分配堆上的内存，以存储Customer实例(一个真正的实例，不只是一个地址)。然后把变量arabel的值设置为分配给 新Customer对象的内存地址(它还调用合适的Customer()构造函数初始化类实例中的字段，但我们不必担心这部分)。&lt;br /&gt;Customer实例没有放在堆栈中，而是放在内存的堆中。如果我们这样操作:&lt;br /&gt;Customer newaddress = arabel ;&lt;br /&gt;这时候,newaddress也会保存在堆栈中，其值和arabel 相同,都是存储Customer实例的堆地址.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  　知道了这些,我们会发现这样一个问题，如果堆栈中arabel  和newaddress两个变量过期销毁，那堆中保存的Customer对象会怎样？实际上它仍保留在堆中，一直到程序停止，或垃圾收集器删除它为止．　 Ｃ＃的垃圾收集器如果没有显示调用，会定时运行并检查内存，删除没有任何变量引用的数据．看起来似乎不错，但是想想，垃圾回收器并不是时时检查，它是定时 运行，而在这段时间内如果产生大量的过期数据驻留在内存中.....　那么或许我们可以通过调用System.GC.Collect()，强迫垃圾收集器 在代码的某个地方运行，System.GC是一个表示垃圾收集器的.NET基类，  Collect()方法则调用垃圾收集器。但是，这种方式适用的场合很少，（难道销毁一个对象就让垃圾回收检查一便内存吗？）例如，代码中有大量的对象刚 刚停止引用，就适合调用垃圾收集器。况且垃圾收集器的逻辑不能保证在一次垃圾收集过程中，从堆中删除所有过期数据，对于不受垃圾回收器管理的未托管对象 （例如文件句柄、网络连接和数据库连接），它是无能为力的。那该怎么做呢？&lt;br /&gt;这时需要制定专门的规则，确保未托管的资源在回收类的一个实例时释放。&lt;br /&gt;在定义一个类时，可以使用两种机制来自动释放未托管的资源。这些机制常常放在一起实现，因为每个机制都为问题提供了略为不同的解决方法。这两个机制是：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 声明一个析构函数，作为类的一个成员&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在类中实现System.IDisposable接口&lt;br /&gt;下面依次讨论这两个机制，然后介绍如何同时实现它们，以获得最佳的效果。&lt;br /&gt;&lt;u&gt;析构函数&lt;/u&gt;&lt;br /&gt;前 面介绍了构造函数可以指定必须在创建类的实例时进行的某些操作，在垃圾收集器删除对象时，也可以调用析构函数。由于执行这个操作，所以析构函数初看起来似 乎是放置释放未托管资源、执行一般清理操作的代码的最佳地方。但是，事情并不是如此简单。由于垃圾回首器的运行规则决定了，不能在析构函数中放置需要在某 一时刻运行的代码，如果对象占用了宝贵而重要的资源，应尽可能快地释放这些资源，此时就不能等待垃圾收集器来释放了．&lt;br /&gt;&lt;u&gt;IDisposable接口&lt;br /&gt;&lt;/u&gt;一 个推荐替代析构函数的方式是使用System.IDisposable接口。IDisposable接口定义了一个模式(具有语言级的支持)，为释放未托 管的资源提供了确定的机制，并避免产生析构函数固有的与垃圾函数器相关的问题。IDisposable接口声明了一个方法Dispose()，它不带参 数，返回void，Myclass的方法Dispose()的执行代码如下：&lt;br /&gt;class Myclass : IDisposable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // implementation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;Dispose()的执行代码显式释放由对象直接使用的所有未托管资源，并在所有实现IDisposable接口的封装对象上调用Dispose()。这样，Dispose()方法在释放未托管资源时提供了精确的控制。&lt;br /&gt;假定有一个类ResourceGobbler，它使用某些外部资源，且执行IDisposable接口。如果要实例化这个类的实例，使用它，然后释放它，就可以使用下面的代码： &lt;br /&gt;ResourceGobbler theInstance = new ResourceGobbler();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里是theInstance 对象的使用过程&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;theInstance.Dispose();&lt;br /&gt;如果在处理过程中出现异常，这段代码就没有释放theInstance使用的资源，所以应使用try块，编写下面的代码：&lt;br /&gt;ResourceGobbler theInstance = null;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; theInstance = new ResourceGobbler();&lt;br /&gt;//&amp;nbsp;&amp;nbsp; 这里是theInstance 对象的使用过程&lt;br /&gt;}&lt;br /&gt;finally&amp;nbsp;&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (theInstance != null) theInstance.Dispose();&lt;br /&gt;}&lt;br /&gt;即 使在处理过程中出现了异常，这个版本也可以确保总是在theInstance上调用Dispose()，总是释放由theInstance使用的资源。但 是，如果总是要重复这样的结构，代码就很容易被混淆。C#提供了一种语法，可以确保在引用超出作用域时，在对象上自动调用Dispose()(但不是 Close())。该语法使用了using关键字来完成这一工作&amp;#8212;&amp;#8212;  但目前，在完全不同的环境下，它与命名空间没有关系。下面的代码生成与try块相对应的IL代码：&lt;br /&gt;using (ResourceGobbler theInstance = new ResourceGobbler())&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; 这里是theInstance 对象的使用过程&lt;br /&gt;}&lt;br /&gt;using 语句的后面是一对圆括号，其中是引用变量的声明和实例化，该语句使变量放在随附的复合语句中。另外，在变量超出作用域时，即使出现异常，也会自动调用其 Dispose()方法。如果已经使用try块来捕获其他异常，就会比较清晰，如果避免使用using语句，仅在已有的try块的finally子句中调 用Dispose()，还可以避免进行额外的缩进。&lt;br /&gt;注意：&lt;br /&gt;对于某些类来说，使用Close()要比Dispose()更富有逻辑性，例 如，在处理文件或数据库连接时，就是这样。在这些情况下，常常实现IDisposable接口，再执行一个独立的Close()方法，来调用 Dispose()。这种方法在类的使用上比较清晰，还支持C#提供的using语句。&lt;br /&gt;&lt;br /&gt;前面的章节讨论了类所使用的释放未托管资源的两种方式：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 利用运行库强制执行的析构函数，但析构函数的执行是不确定的，而且，由于垃圾收集器的工作方式，它会给运行库增加不可接受的系统开销。&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDisposable接口提供了一种机制，允许类的用户控制释放资源的时间，但需要确保执行Dispose()。&lt;br /&gt;一般情况下，最好的方法是执行这两种机制，获得这两种机制的优点，克服其缺点。假定大多数程序员都能正确调用Dispose()，实现IDisposable接口，同时把析构函数作为一种安全的机制，以防没有调用Dispose()。下面是一个双重实现的例子：&lt;br /&gt;public class ResourceHolder : IDisposable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool isDispose ＝ false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 显示调用的Dispose方法&lt;br /&gt;　 public void Dispose() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC.SuppressFinalize(this); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 实际的清除方法&lt;br /&gt;　 protected virtual void Dispose(bool disposing) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!isDisposed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (disposing) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里执行清除托管对象的操作.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里执行清除非托管对象的操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isDisposed=true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 析构函数 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~ResourceHolder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose (false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;可以看出，Dispose()有第二个protected重载方法，它带一个bool参数，这是真正完成清理工作的方法。Dispose(bool)由析构函数和IDisposable.Dispose()调用。这个方式的重点是确保所有的清理代码都放在一个地方。&lt;br /&gt;传递给Dispose(bool)的参数表示Dispose(bool)是由析构函数调用，还是由IDisposable.Dispose()调用&amp;#8212;&amp;#8212;Dispose(bool)不应从代码的其他地方调用，其原因是：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果客户调用IDisposable.Dispose()，该客户就指定应清理所有与该对象相关的资源，包括托管和非托管的资源。&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   如果调用了析构函数，在原则上，所有的资源仍需要清理。但是在这种情况下，析构函数必须由垃圾收集器调用，而且不应访问其他托管的对象，因为我们不再能确 定它们的状态了。在这种情况下，最好清理已知的未托管资源，希望引用的托管对象还有析构函数，执行自己的清理过程。&lt;br /&gt;isDispose成员变量表 示对象是否已被删除，并允许确保不多次删除成员变量。这个简单的方法不是线程安全的，需要调用者确保在同一时刻只有一个线程调用方法。要求客户进行同步是 一个合理的假定，在整个.NET类库中反复使用了这个假定(例如在集合类中)。最后，IDisposable.Dispose()包含一个对 System.GC.  SuppressFinalize()方法的调用。SuppressFinalize()方法则告诉垃圾收集器有一个类不再需要调用其析构函数了。因为 Dispose()已经完成了所有需要的清理工作，所以析构函数不需要做任何工作。调用SuppressFinalize()就意味着垃圾收集器认为这个 对象根本没有析构函数．&lt;br /&gt;&lt;br /&gt;正确理解以上内容，可以大大优化系统性能，及时释放不需要的数据，不能仅靠Ｃ＃提供的自动回收机制，也需要程序员使用更灵活的办法！二者合一既能让程序运行飞快，也让系统更加稳定！&lt;/p&gt; &lt;p&gt;&lt;strong&gt;托管程序中资源的释放问题&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;.Net所指的托管只是针对内存这一个方面，并不是对于所有的资源；因此对于Stream，数据库的连接，GDI+的相关对象，还有Com对象等等，这些资源并不是受到.Net管理而统称为非托管资源。而对于内存的释放和回收，系统提供了GC-Garbage Collector，而至于其他资源则需要手动进行释放。 &lt;/p&gt; &lt;p align="left"&gt;那么第二个概念就是什么是垃圾，通过我以前的文章，会了解到&lt;span&gt;.Net类型分为两大类，一个就是值类型，另一个就是引用类型。前者是分配在栈上，并不需要GC回收；后者是分配在堆上，因此它的内存释放和回收需要通过GC来完成。GC的全称为&amp;#8220;Garbage Collector&amp;#8221;,顾名思义就是垃圾回收器，那么只有被称为垃圾的对象才能被GC回收。也就是说，一个引用类型对象所占用的内存需要被GC回收，需要先成为垃圾。那么.Net如何判定一个引用类型对象是垃圾呢，.Net的判断很简单，只要判定此对象或者其包含的子对象没有任何引用是有效的，那么系统就认为它是垃圾。&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;明确了这两个基本概念，接下来说说&lt;span&gt;GC的运作方式以及其的功能。内存的释放和回收需要伴随着程序的运行，因此系统为GC安排了独立的线程。那么GC的工作大致是，查询内存中对象是否成为垃圾，然后对垃圾进行释放和回收。那么对于GC对于内存回收采取了一定的优先算法进行轮循回收内存资源。其次，对于内存中的垃圾分为两种，一种是需要调用对象的析构函数，另一种是不需要调用的。GC对于前者的回收需要通过两步完成，第一步是调用对象的析构函数，第二步是回收内存，但是要注意这两步不是在GC一次轮循完成，即需要两次轮循；相对于后者，则只是回收内存而已。&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;很明显得知，对于某个具体的资源，无法确切知道，对象析构函数什么时候被调用，以及GC什么时候会去释放和回收它所占用的内存。那么对于从C、C++之类语言转换过来的程序员来说，这里需要转变观念。 那么对于程序资源来说，我们应该做些什么，以及如何去做，才能使程序效率最高，同时占用资源能尽快的释放。前面也说了，资源分为两种，托管的内存资源，这是不需要我们操心的，系统已经为我们进行管理了；那么对于非托管的资源，这里再重申一下，就是Stream，数据库的连接，GDI+的相关对象，还有Com对象等等这些资源，需要我们手动去释放。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;如何去释放，应该把这些操作放到哪里比较好呢。.Net提供了三种方法，也是最常见的三种，大致如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;1&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;析构函数；&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;2&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;继承IDisposable接口，实现Dispose方法；&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;3&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;提供Close方法。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;经过前面的介绍，可以知道析构函数只能被&lt;span&gt;GC来调用的，那么无法确定它什么时候被调用，因此用它作为资源的释放并不是很合理，因为资源释放不及时；但是为了防止资源泄漏，毕竟它会被GC调用，因此析构函数可以作为一个补救方法。而Close与Dispose这两种方法的区别在于，调用完了对象的Close方法后，此对象有可能被重新进行使用；而Dispose方法来说，此对象所占有的资源需要被标记为无用了，也就是此对象被销毁了，不能再被使用。例如，常见SqlConnection这个类，当调用完Close方法后，可以通过Open重新打开数据库连接，当彻底不用这个对象了就可以调用Dispose方法来标记此对象无用，等待GC回收。明白了这两种方法的意思后，大家在往自己的类中添加的接口时候，不要歪曲了这两者意思。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;接下来说说这三个函数的调用时机，我用几个试验结果来进行说明，可能会使大家的印象更深。&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;首先是这三种方法的实现，大致如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; DisposeClass:IDisposable&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Close()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Close called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~DisposeClass()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Destructor called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt; IDisposable Members &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// TODO: Add DisposeClass.Dispose implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Dispose called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;对于Close来说不属于真正意义上的释放，除了注意它需要显示被调用外，我在此对它不多说了。&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;而对于析构函数而言，不是在对象离开作用域后立刻被执行，只有在关闭进程或者调用方法的时候才被调用，参看如下的代码运行结果。 &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void Create()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisposeClass myClass = &lt;span style="color: blue;"&gt;new&lt;/span&gt; DisposeClass();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; CallGC()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC.Collect();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Show destructor&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "After created!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallGC();&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;运行的结果为：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: navy;"&gt;After created!&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;Destructor called! &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;显然在出了&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;Create&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;函数外，&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;myClass&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;对象的析构函数没有被立刻调用，而是等显示调用GC.Collect才被调用。 &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;对于Dispose来说，也需要显示的调用，但是对于继承了IDisposable的类型对象可以使用using这个关键字，这样对象的Dispose方法在出了using范围后会被自动调用。例如：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt;( DisposeClass myClass = &lt;span style="color: blue;"&gt;new&lt;/span&gt; DisposeClass() )&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//other operation here&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;如上运行的结果如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 12pt; color: navy;"&gt;Dispose called!&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;对于托管的资源的回收工作，是不需要人工干预回收的，而且你也无法干预他们的回收，所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象，可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。 &lt;p&gt;对于非托管资源，您在应用程序中使用完这些非托管资源之后，必须显示的释放他们，例如System.IO.StreamReader的一个文件对象，必须显示的调用对象的Close()方法关闭它，否则会占用系统的内存和资源，而且可能会出现意想不到的错误。&lt;/p&gt; &lt;p&gt;我想说到这里，一定要清楚什么是托管资源，什么是非托管资源了？&lt;/p&gt; &lt;p&gt;最常见的一类非托管资源就是包装操作系统资源的对象，例如文件，窗口或网络连接，对于这类资源虽然垃圾回收器可以跟踪封装非托管资源的对象的生 存期，但它不了解具体如何清理这些资源。还好.net  Framework提供了Finalize()方法，它允许在垃圾回收器回收该类资源时，适当的清理非托管资源。如果在MSDN Library  中搜索Finalize将会发现很多类似的主题，这里列举几种常见的非托管资 源：ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,Timer,Tooltip  等等资源。可能在使用的时候很多都没有注意到！&lt;/p&gt; &lt;p&gt;关于托管资源，就不用说了撒，像简单的int,string,float,DateTime等等，.net中超过80%的资源都是托管资源。&lt;/p&gt; &lt;p&gt;非托管资源如何释放，.NET Framework 提供 Object.Finalize  方法，它允许对象在垃圾回收器回收该对象使用的内存时适当清理其非托管资源。默认情况下，Finalize  方法不执行任何操作。默认情况下，Finalize  方法不执行任何操作。如果您要让垃圾回收器在回收对象的内存之前对对象执行清理操作，您必须在类中重写 Finalize  方法。然而大家都可以发现在实际的编程中根本无法override方法Finalize(),在C#中，可以通过析构函数自动生成 Finalize  方法和对基类的 Finalize 方法的调用。&lt;/p&gt; &lt;p&gt;例如： &lt;br /&gt;~MyClass()&lt;br /&gt;{ &lt;br /&gt;// Perform some cleanup operations here. &lt;br /&gt;} &lt;br /&gt;该代码隐式翻译为下面的代码。&lt;br /&gt;protected override void Finalize() &lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// Perform some cleanup operations here.&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;base.Finalize();&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;但是，在编程中，并不建议进行override方法Finalize()，因为，实现  Finalize 方法或析构函数对性能可能会有负面影响。一个简单的理由如下：用 Finalize  方法回收对象使用的内存需要至少两次垃圾回收，当垃圾回收器回收时，它只回收没有终结器(Finalize方法)的不可访问的内存，这时他不能回收具有终 结器(Finalize方法)的不可以访问的内存。它改为将这些对象的项从终止队列中移除并将他们放置在标记为&amp;#8220;准备终止&amp;#8221;的对象列表中，该列表中的项指 向托管堆中准备被调用其终止代码的对象，下次垃圾回收器进行回收时，就回收并释放了这些内存。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C#托管及未托管对象管理&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;　c#中的对象分为值类型和引用类型,二者最大的区别在于数据的存储方式和存储位 置.WINDOWS操作系统使用虚拟寻址系统来管理程序运行时产生的数据存放.简单的说,该系统管理着一个内存区域,在该区域中划拨出一部分出来专门存放 值类型变量,称为堆栈,堆栈采用先进后出的原则,将值类型变量从区域的最高地址位开始向低位地址存储,先进后出,后进先出的管理方式保证了值类型变量在出 了作用域后能即使的清除占用的内存区域,由于堆栈速度快,所保存的数据一般不太大，这部分一般不需要用户专门操作. 值类型保存在堆栈汇总，  堆栈有非常高的性能，但对于所有的变量来说还是不太灵活。通常我们希望使用一个方法分配内存，来存储一些数据，并在方法退出后的很长一段时间内数据仍是可 以使用的。只要是用new运算符来请求存储空间，就存在这种可能性&amp;#8212;&amp;#8212;例如所有的引用类型。此时就要使用托管堆。它在垃圾收集器的控制下工作，托管堆(或 简称为堆)是系统管理的大内存区域中的另一个内存区域。要了解堆的工作原理和如何为引用数据类型分配内存，看看下面的代码： &lt;br /&gt;Customer arabel = new Customer();&lt;br /&gt;这 行代码完成了以下操作：首先，分配堆上的内存，以存储Customer实例(一个真正的实例，不只是一个地址)。然后把变量arabel的值设置为分配给 新Customer对象的内存地址(它还调用合适的Customer()构造函数初始化类实例中的字段，但我们不必担心这部分)。&lt;br /&gt;Customer实例没有放在堆栈中，而是放在内存的堆中。如果我们这样操作:&lt;br /&gt;Customer newaddress = arabel ;&lt;br /&gt;这时候,newaddress也会保存在堆栈中，其值和arabel 相同,都是存储Customer实例的堆地址.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  　知道了这些,我们会发现这样一个问题，如果堆栈中arabel  和newaddress两个变量过期销毁，那堆中保存的Customer对象会怎样？实际上它仍保留在堆中，一直到程序停止，或垃圾收集器删除它为止．　 Ｃ＃的垃圾收集器如果没有显示调用，会定时运行并检查内存，删除没有任何变量引用的数据．看起来似乎不错，但是想想，垃圾回收器并不是时时检查，它是定时 运行，而在这段时间内如果产生大量的过期数据驻留在内存中.....　那么或许我们可以通过调用System.GC.Collect()，强迫垃圾收集器 在代码的某个地方运行，System.GC是一个表示垃圾收集器的.NET基类，  Collect()方法则调用垃圾收集器。但是，这种方式适用的场合很少，（难道销毁一个对象就让垃圾回收检查一便内存吗？）例如，代码中有大量的对象刚 刚停止引用，就适合调用垃圾收集器。况且垃圾收集器的逻辑不能保证在一次垃圾收集过程中，从堆中删除所有过期数据，对于不受垃圾回收器管理的未托管对象 （例如文件句柄、网络连接和数据库连接），它是无能为力的。那该怎么做呢？&lt;br /&gt;这时需要制定专门的规则，确保未托管的资源在回收类的一个实例时释放。&lt;br /&gt;在定义一个类时，可以使用两种机制来自动释放未托管的资源。这些机制常常放在一起实现，因为每个机制都为问题提供了略为不同的解决方法。这两个机制是：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 声明一个析构函数，作为类的一个成员&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在类中实现System.IDisposable接口&lt;br /&gt;下面依次讨论这两个机制，然后介绍如何同时实现它们，以获得最佳的效果。&lt;br /&gt;&lt;u&gt;析构函数&lt;/u&gt;&lt;br /&gt;前 面介绍了构造函数可以指定必须在创建类的实例时进行的某些操作，在垃圾收集器删除对象时，也可以调用析构函数。由于执行这个操作，所以析构函数初看起来似 乎是放置释放未托管资源、执行一般清理操作的代码的最佳地方。但是，事情并不是如此简单。由于垃圾回首器的运行规则决定了，不能在析构函数中放置需要在某 一时刻运行的代码，如果对象占用了宝贵而重要的资源，应尽可能快地释放这些资源，此时就不能等待垃圾收集器来释放了．&lt;br /&gt;&lt;u&gt;IDisposable接口&lt;br /&gt;&lt;/u&gt;一 个推荐替代析构函数的方式是使用System.IDisposable接口。IDisposable接口定义了一个模式(具有语言级的支持)，为释放未托 管的资源提供了确定的机制，并避免产生析构函数固有的与垃圾函数器相关的问题。IDisposable接口声明了一个方法Dispose()，它不带参 数，返回void，Myclass的方法Dispose()的执行代码如下：&lt;br /&gt;class Myclass : IDisposable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // implementation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;Dispose()的执行代码显式释放由对象直接使用的所有未托管资源，并在所有实现IDisposable接口的封装对象上调用Dispose()。这样，Dispose()方法在释放未托管资源时提供了精确的控制。&lt;br /&gt;假定有一个类ResourceGobbler，它使用某些外部资源，且执行IDisposable接口。如果要实例化这个类的实例，使用它，然后释放它，就可以使用下面的代码： &lt;br /&gt;ResourceGobbler theInstance = new ResourceGobbler();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里是theInstance 对象的使用过程&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;theInstance.Dispose();&lt;br /&gt;如果在处理过程中出现异常，这段代码就没有释放theInstance使用的资源，所以应使用try块，编写下面的代码：&lt;br /&gt;ResourceGobbler theInstance = null;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; theInstance = new ResourceGobbler();&lt;br /&gt;//&amp;nbsp;&amp;nbsp; 这里是theInstance 对象的使用过程&lt;br /&gt;}&lt;br /&gt;finally&amp;nbsp;&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (theInstance != null) theInstance.Dispose();&lt;br /&gt;}&lt;br /&gt;即 使在处理过程中出现了异常，这个版本也可以确保总是在theInstance上调用Dispose()，总是释放由theInstance使用的资源。但 是，如果总是要重复这样的结构，代码就很容易被混淆。C#提供了一种语法，可以确保在引用超出作用域时，在对象上自动调用Dispose()(但不是 Close())。该语法使用了using关键字来完成这一工作&amp;#8212;&amp;#8212;  但目前，在完全不同的环境下，它与命名空间没有关系。下面的代码生成与try块相对应的IL代码：&lt;br /&gt;using (ResourceGobbler theInstance = new ResourceGobbler())&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; 这里是theInstance 对象的使用过程&lt;br /&gt;}&lt;br /&gt;using 语句的后面是一对圆括号，其中是引用变量的声明和实例化，该语句使变量放在随附的复合语句中。另外，在变量超出作用域时，即使出现异常，也会自动调用其 Dispose()方法。如果已经使用try块来捕获其他异常，就会比较清晰，如果避免使用using语句，仅在已有的try块的finally子句中调 用Dispose()，还可以避免进行额外的缩进。&lt;br /&gt;注意：&lt;br /&gt;对于某些类来说，使用Close()要比Dispose()更富有逻辑性，例 如，在处理文件或数据库连接时，就是这样。在这些情况下，常常实现IDisposable接口，再执行一个独立的Close()方法，来调用 Dispose()。这种方法在类的使用上比较清晰，还支持C#提供的using语句。&lt;br /&gt;&lt;br /&gt;前面的章节讨论了类所使用的释放未托管资源的两种方式：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 利用运行库强制执行的析构函数，但析构函数的执行是不确定的，而且，由于垃圾收集器的工作方式，它会给运行库增加不可接受的系统开销。&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDisposable接口提供了一种机制，允许类的用户控制释放资源的时间，但需要确保执行Dispose()。&lt;br /&gt;一般情况下，最好的方法是执行这两种机制，获得这两种机制的优点，克服其缺点。假定大多数程序员都能正确调用Dispose()，实现IDisposable接口，同时把析构函数作为一种安全的机制，以防没有调用Dispose()。下面是一个双重实现的例子：&lt;br /&gt;public class ResourceHolder : IDisposable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool isDispose ＝ false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 显示调用的Dispose方法&lt;br /&gt;　 public void Dispose() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC.SuppressFinalize(this); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 实际的清除方法&lt;br /&gt;　 protected virtual void Dispose(bool disposing) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!isDisposed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (disposing) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里执行清除托管对象的操作.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这里执行清除非托管对象的操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isDisposed=true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 析构函数 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~ResourceHolder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose (false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;可以看出，Dispose()有第二个protected重载方法，它带一个bool参数，这是真正完成清理工作的方法。Dispose(bool)由析构函数和IDisposable.Dispose()调用。这个方式的重点是确保所有的清理代码都放在一个地方。&lt;br /&gt;传递给Dispose(bool)的参数表示Dispose(bool)是由析构函数调用，还是由IDisposable.Dispose()调用&amp;#8212;&amp;#8212;Dispose(bool)不应从代码的其他地方调用，其原因是：&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果客户调用IDisposable.Dispose()，该客户就指定应清理所有与该对象相关的资源，包括托管和非托管的资源。&lt;br /&gt;&amp;#9679;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   如果调用了析构函数，在原则上，所有的资源仍需要清理。但是在这种情况下，析构函数必须由垃圾收集器调用，而且不应访问其他托管的对象，因为我们不再能确 定它们的状态了。在这种情况下，最好清理已知的未托管资源，希望引用的托管对象还有析构函数，执行自己的清理过程。&lt;br /&gt;isDispose成员变量表 示对象是否已被删除，并允许确保不多次删除成员变量。这个简单的方法不是线程安全的，需要调用者确保在同一时刻只有一个线程调用方法。要求客户进行同步是 一个合理的假定，在整个.NET类库中反复使用了这个假定(例如在集合类中)。最后，IDisposable.Dispose()包含一个对 System.GC.  SuppressFinalize()方法的调用。SuppressFinalize()方法则告诉垃圾收集器有一个类不再需要调用其析构函数了。因为 Dispose()已经完成了所有需要的清理工作，所以析构函数不需要做任何工作。调用SuppressFinalize()就意味着垃圾收集器认为这个 对象根本没有析构函数．&lt;br /&gt;&lt;br /&gt;正确理解以上内容，可以大大优化系统性能，及时释放不需要的数据，不能仅靠Ｃ＃提供的自动回收机制，也需要程序员使用更灵活的办法！二者合一既能让程序运行飞快，也让系统更加稳定！&lt;/p&gt; &lt;p&gt;&lt;strong&gt;托管程序中资源的释放问题&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;.Net所指的托管只是针对内存这一个方面，并不是对于所有的资源；因此对于Stream，数据库的连接，GDI+的相关对象，还有Com对象等等，这些资源并不是受到.Net管理而统称为非托管资源。而对于内存的释放和回收，系统提供了GC-Garbage Collector，而至于其他资源则需要手动进行释放。 &lt;/p&gt; &lt;p align="left"&gt;那么第二个概念就是什么是垃圾，通过我以前的文章，会了解到&lt;span&gt;.Net类型分为两大类，一个就是值类型，另一个就是引用类型。前者是分配在栈上，并不需要GC回收；后者是分配在堆上，因此它的内存释放和回收需要通过GC来完成。GC的全称为&amp;#8220;Garbage Collector&amp;#8221;,顾名思义就是垃圾回收器，那么只有被称为垃圾的对象才能被GC回收。也就是说，一个引用类型对象所占用的内存需要被GC回收，需要先成为垃圾。那么.Net如何判定一个引用类型对象是垃圾呢，.Net的判断很简单，只要判定此对象或者其包含的子对象没有任何引用是有效的，那么系统就认为它是垃圾。&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;明确了这两个基本概念，接下来说说&lt;span&gt;GC的运作方式以及其的功能。内存的释放和回收需要伴随着程序的运行，因此系统为GC安排了独立的线程。那么GC的工作大致是，查询内存中对象是否成为垃圾，然后对垃圾进行释放和回收。那么对于GC对于内存回收采取了一定的优先算法进行轮循回收内存资源。其次，对于内存中的垃圾分为两种，一种是需要调用对象的析构函数，另一种是不需要调用的。GC对于前者的回收需要通过两步完成，第一步是调用对象的析构函数，第二步是回收内存，但是要注意这两步不是在GC一次轮循完成，即需要两次轮循；相对于后者，则只是回收内存而已。&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;很明显得知，对于某个具体的资源，无法确切知道，对象析构函数什么时候被调用，以及GC什么时候会去释放和回收它所占用的内存。那么对于从C、C++之类语言转换过来的程序员来说，这里需要转变观念。 那么对于程序资源来说，我们应该做些什么，以及如何去做，才能使程序效率最高，同时占用资源能尽快的释放。前面也说了，资源分为两种，托管的内存资源，这是不需要我们操心的，系统已经为我们进行管理了；那么对于非托管的资源，这里再重申一下，就是Stream，数据库的连接，GDI+的相关对象，还有Com对象等等这些资源，需要我们手动去释放。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;如何去释放，应该把这些操作放到哪里比较好呢。.Net提供了三种方法，也是最常见的三种，大致如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;1&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;析构函数；&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;2&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;继承IDisposable接口，实现Dispose方法；&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;3&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;．&lt;/span&gt; &lt;span style="font-size: 10pt;"&gt;&amp;lt;!--[endif]--&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;提供Close方法。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;经过前面的介绍，可以知道析构函数只能被&lt;span&gt;GC来调用的，那么无法确定它什么时候被调用，因此用它作为资源的释放并不是很合理，因为资源释放不及时；但是为了防止资源泄漏，毕竟它会被GC调用，因此析构函数可以作为一个补救方法。而Close与Dispose这两种方法的区别在于，调用完了对象的Close方法后，此对象有可能被重新进行使用；而Dispose方法来说，此对象所占有的资源需要被标记为无用了，也就是此对象被销毁了，不能再被使用。例如，常见SqlConnection这个类，当调用完Close方法后，可以通过Open重新打开数据库连接，当彻底不用这个对象了就可以调用Dispose方法来标记此对象无用，等待GC回收。明白了这两种方法的意思后，大家在往自己的类中添加的接口时候，不要歪曲了这两者意思。 &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;接下来说说这三个函数的调用时机，我用几个试验结果来进行说明，可能会使大家的印象更深。&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;首先是这三种方法的实现，大致如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; DisposeClass:IDisposable&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Close()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Close called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~DisposeClass()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Destructor called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt; IDisposable Members &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// TODO: Add DisposeClass.Dispose implementation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "Dispose called!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;对于Close来说不属于真正意义上的释放，除了注意它需要显示被调用外，我在此对它不多说了。&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;而对于析构函数而言，不是在对象离开作用域后立刻被执行，只有在关闭进程或者调用方法的时候才被调用，参看如下的代码运行结果。 &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void Create()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisposeClass myClass = &lt;span style="color: blue;"&gt;new&lt;/span&gt; DisposeClass();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; CallGC()&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC.Collect();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Show destructor&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine( "After created!" );&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallGC();&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;运行的结果为：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt; color: navy;"&gt;After created!&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;Destructor called! &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;显然在出了&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;Create&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;函数外，&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;myClass&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;对象的析构函数没有被立刻调用，而是等显示调用GC.Collect才被调用。 &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;对于Dispose来说，也需要显示的调用，但是对于继承了IDisposable的类型对象可以使用using这个关键字，这样对象的Dispose方法在出了using范围后会被自动调用。例如：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt;( DisposeClass myClass = &lt;span style="color: blue;"&gt;new&lt;/span&gt; DisposeClass() )&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//other operation here&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 10pt;"&gt;如上运行的结果如下：&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size: 12pt; color: navy;"&gt;Dispose called!&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1803173.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/08/19/1803173.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/08/18/1802343.html</id><title type="text">web性能测试分析-工具篇</title><summary type="text">用于Web性能分析的工具还有很多，以下只不过是我所略知的几种，如各位有使用未列出性能工具，请跟帖共享。以下软件都可容易下载到.我建议全部下载，根据自已的需求，选择最适合自己的一款，呵呵，这个工作比较累呀。 微软官方免费软件： CLRProfiler 是一个可以用于分析.NET程序行为的工具。可用其分析垃圾回收器堆正在发生的事情，例如什么方法分配了什么类型的对象？另外，还提供了调用图（call gr...</summary><published>2010-08-18T06:28:00Z</published><updated>2010-08-18T06:28:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/08/18/1802343.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/08/18/1802343.html"/><content type="html">&lt;p&gt;&lt;span style="background-color: #ccffcc;"&gt;用于Web性能分析的工具还有很多，以下只不过是我所略知的几种，如各位有使用未列出性能工具，请跟帖共享。以下软件都可容易下载到.我建议全部下载，根据自已的需求，选择最适合自己的一款，呵呵，这个工作比较累呀。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color: #008080;"&gt;微软官方免费软件：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;CLRProfiler&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;是一个可以用于分析.NET程序行为的工具。可用其分析垃圾回收器堆正在发生的事情，例如什么方法分配了什么类型的对象？另外，还提供了调用图（call graph）功能用于显示哪个方法调用了哪个方法&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Microsoft Web Application Stress Tool&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Microsoft Web Application Stress Tool  是由微软的网站测试人员所开发，专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具，您可以使用少量的Client端计算机仿真大 量用户上线对网站服务所可能造成的影响，在网站实际上线之前先对您所设计的网站进行如同真实环境下的测试，以找出系统潜在的问题，对系统进行进一步的调 整、设置工作。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Microsoft Application Center Test &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Microsoft Application Center  Test是vs.net2003企业版自带的一个测试工具.使用它可以收集性能信息.确定WEB应用程序的容量.也可以创建测试,模拟同时从WEB应用程 序请求网页的多个用户.这些模拟测试有助于确定应用程序的稳定性.速度和响应能力.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color: #008000;"&gt;&lt;span style="color: #008080;"&gt;商业软件(其实试用30天已经足够用了)：&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;dotTrace &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;是个很不错的分析工具（Profiling Tool），可以分析windows form和asp.net ，它能够快速分析、过滤、函数查找（快速定位function，并且导航）和查看源码.&lt;/p&gt; &lt;p&gt;试用版下载(&lt;a href="http://www.red-gate.com/products/ants_profiler/index.htm" target="_new"&gt;http://www.red-gate.com/products/ants_profiler/index.htm&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ANTS Profiler &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;一个检测基于&lt;/span&gt;.&lt;span style="color: blue;"&gt;Net Framework&lt;/span&gt;&lt;span style="color: blue; font-family: 宋体;"&gt;的任何语言&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;开发出的应用程序的代码性能&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的工具。她可以&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;通过&lt;span style="color: red;"&gt;记录每行代码花费的时间&lt;/span&gt;，来帮助你优化程序的执行，而且可以用很多种格式来探测应&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;用程序中效率不好的区域。&lt;/span&gt;ANTS Profiler&lt;span style="font-family: 宋体;"&gt;还可以分析应用程序的内存使用状况，她就是通&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;过&lt;span style="color: red;"&gt;记录每个对象分配的内存空间大小&lt;/span&gt;，来提供很多种报告样式给开着这察看哪个对象或者类&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;占用了最多的内存，从而可以帮助你优化内存的使用。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;试用版下载(&lt;a href="http://www.red-gate.com/products/ants_profiler/index.htm" target="_new"&gt;http://www.red-gate.com/products/ants_profiler/index.htm&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AQTime&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一款功能强大的Code Profiler工具,有很多种代码分析方式，一般主要是用它来做性能分析，目的是定位程序性能瓶颈，然后再有针对性地进行优化。函数追踪功能，能看清函数的调用，而且能定位到行级,确定系统性能的瓶颈。&lt;/p&gt; &lt;p&gt;试用版下载(&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://www.automatedqa.com/" target="_blank"&gt;http://www.automatedqa.com&lt;/a&gt;&lt;/span&gt;)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;.NET Memory Profiler&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;是NET Memory Profiler是一款强大的.net 内存跟踪和优化工具。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;DevPartner Studio Professional Edition&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;是一套功能非常强大全面性的软件开发除错工具，协助程序开发人员使用微软Visual Studio .NET与Visual Studio  6.0开发应用程序与WebService。  其功能包括扫描程序找出程序码潜在的问题，侦测执行阶段的错误，程序执行效能分析，分散式应用系统问题分析，与程序码测试涵盖度分析等。支持微软的 Visual Studio .NET、Native  Windows或是两者混合使用的应用程序，加速应用程序的开发，提高应用系统的稳定性与执行效能。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;LoadRunner&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;是否目前国内最多人用的压力测试工具，感觉与.net搭配不是很好。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bccu/aggbug/1802343.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bccu/archive/2010/08/18/1802343.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2010/04/09/1708193.html</id><title type="text">操作iis应用程序池</title><summary type="text">using System; using System.DirectoryServices; using System.Reflection;namespace ADSIX { /// /// Small class containing methods to configure IIS. /// class ConfigIIS { /// /// The main entry p...</summary><published>2010-04-09T04:32:00Z</published><updated>2010-04-09T04:32:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2010/04/09/1708193.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2010/04/09/1708193.html"/><content type="text">using System; using System.DirectoryServices; using System.Reflection;namespace ADSIX { /// /// Small class containing methods to configure IIS. /// class ConfigIIS { /// /// The main entry p...</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2009/09/02/1558587.html</id><title type="text">深入理解.NET内存回收机制</title><summary type="text">Net平台提供了许多新功能，这些功能能够帮助程序员生产出更高效和稳定的代码。其中之一就是垃圾回收器（GC）。这篇文章将深入探讨这一功能，了解它是如何工作的以及如何编写代码来更好地使用这一.Net平台提供的功能。 .Net中的内存回收机制垃圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前，程序员在使用内存时需要向系统申请内存空间。有些语言，例如Visual Basic，可以自动完成...</summary><published>2009-09-02T03:03:00Z</published><updated>2009-09-02T03:03:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2009/09/02/1558587.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2009/09/02/1558587.html"/><content type="text">Net平台提供了许多新功能，这些功能能够帮助程序员生产出更高效和稳定的代码。其中之一就是垃圾回收器（GC）。这篇文章将深入探讨这一功能，了解它是如何工作的以及如何编写代码来更好地使用这一.Net平台提供的功能。 .Net中的内存回收机制垃圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前，程序员在使用内存时需要向系统申请内存空间。有些语言，例如Visual Basic，可以自动完成...</content></entry><entry><id>http://www.cnblogs.com/bccu/archive/2009/07/01/1514556.html</id><title type="text">磁盘空间使用关乎SQL Server性能</title><summary type="text">当谈到影响SQL Server性能的组分时，你很可能会想到CPU的使用率、内存和查询过程所占用的I/O资源。不过，还有另外一个值得注意的影响因素，那就是磁盘空间的使用。在以前，磁盘空间的成本非常高，所以大部分人都会竭尽所能地节约磁盘空间的使用。相信大家对千年虫问题还记忆犹新，问题的产生正是源于日期是以八位字符(例如2000年11月7日的格式为11/07/00)形式存储的。老牌的计算机程序员在存储每...</summary><published>2009-07-01T03:19:00Z</published><updated>2009-07-01T03:19:00Z</updated><author><name>狂风</name><uri>http://www.cnblogs.com/bccu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bccu/archive/2009/07/01/1514556.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bccu/archive/2009/07/01/1514556.html"/><content type="text">当谈到影响SQL Server性能的组分时，你很可能会想到CPU的使用率、内存和查询过程所占用的I/O资源。不过，还有另外一个值得注意的影响因素，那就是磁盘空间的使用。在以前，磁盘空间的成本非常高，所以大部分人都会竭尽所能地节约磁盘空间的使用。相信大家对千年虫问题还记忆犹新，问题的产生正是源于日期是以八位字符(例如2000年11月7日的格式为11/07/00)形式存储的。老牌的计算机程序员在存储每...</content></entry></feed>
