﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-网摘</title><link>http://www.blogjava.net/jvict/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 19:37:11 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 19:37:11 GMT</pubDate><ttl>60</ttl><item><title>CentOS 5.5 安装 Oracle 11g2 执行sqlplus提示信息乱码解决</title><link>http://www.blogjava.net/jvict/articles/332875.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 25 Sep 2010 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/332875.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/332875.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/332875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/332875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/332875.html</trackback:ping><description><![CDATA[接着上一篇的内容<br />
<br />
遗留一个乱码的问题。初步原定定位在选择字符集的时候，我当时选的是UTF8。<br />
<br />
我把数据库删除了，重新建立，到那一步选择了系统默认，结果还是出现乱码<br />
<br />
我再来一次 直接选择了ZHS16GBK，结果还是一样。<br />
<br />
其实一直搞错了，刚开始我选择了utf-8，由于系统默认应该是GBK，所以显示的问号。<br />
<br />
现在只需要一个方法<br />
<br />
编辑并运行.bash_profile<br />
<br />
export NLS_LANG=AMERICAN_AMERICA.UTF8<br />
（如果是GBK&nbsp;&nbsp;&nbsp;&nbsp; export NLS_LANG=american_america.ZHS16GBK）<br />
<br />
注销后生效<br />
<br />
这样再重新进入sqlplus<br />
<br />
已经不会是乱码。<br />
<img src ="http://www.blogjava.net/jvict/aggbug/332875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-09-25 23:46 <a href="http://www.blogjava.net/jvict/articles/332875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CentOS 5.2 LVM 新增加一块硬盘的方法</title><link>http://www.blogjava.net/jvict/articles/332829.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 25 Sep 2010 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/332829.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/332829.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/332829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/332829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/332829.html</trackback:ping><description><![CDATA[有用LVM2，现在.空间不足，需.再加一块硬盘。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 鲜花<br />
先加上硬盘，用fdisk .-l.，可以看到新硬盘。.<br />
给新加的硬.盘分区: fdisk /dev/s.db.<br />
&gt;n<br />
&gt;t<br />
&gt;8e(linux LVM)<br />
分.成一.个分区，格式为linux LVM. .<br />
下面开始把分区加到LVM内去： ..<br />
1.建立物理卷 <br />
pv.cre.ate /dev/sdb1 服务器<br />
2.把新物理卷加入到卷组中去<br />
vgextend. VolG.roup00 /dev/sdb1 投资<br />
3.把新的空间加到逻辑卷中去<br />
lvextend -L+10G /dev/Vol.Group00/LogV.ol00 &lt;性病&gt; <br />
4.加上去之后，目..前用df -h还看不到新的空间，需要激活--------------彩票 <br />
RHEL 4:<br />
ext2onlin.e /dev/VolGroup00/L.ogVol00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建材 <br />
RHEL 5:<br />
res.ize2fs -p /dev/VolGr.oup01/LogVol00 健康 <br />
全部搞掂，再用.df -h，就可以看.到新的空间了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建材 <br />
几个命令：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;扩展vg: vgextend vg0(卷组名) /dev/sdc1(pv名..)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;乙肝 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;扩展lv: .lvextend -L +200m /dev./vg0/home(lv名)电影 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看信息：vgdisplay. ./dev/vg0. ,lvdisplay /dev/vg0/logVol00电脑 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据迁移.：pvmove /dev/sda.1 /dev/sdc1电脑 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除逻辑卷步骤：<br />
.&nbsp;&nbsp;&nbsp;&nbsp; A.u.mout所有lv电影 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B.lvremove /dev/vgo/logVol0.0(有.快照要先删除快照).<br />
.&nbsp;&nbsp;&nbsp;&nbsp; C.vgchange -an /dev/vg0 (.休眠vg0,-ay是激活vg0)--- 印刷 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D..vgremove. vg0 (移除).<br />
&nbsp;&nbsp;&nbsp;&nbsp; 注意：<br />
&nbsp;&nbsp;.&nbsp;&nbsp; 迁移时注.意PE、LE是一一对应的，大小要一致，迁移时不能改变大小。.<br />
记录：<br />
检查当前分区大小<br />
[root@jxxdb.2 ~]# d.f -h CSUBOY<br />
Filesyst.em&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . .&nbsp;&nbsp;Size Used Avail Use% Mounted on&nbsp;&nbsp;&nbsp;&nbsp;健康<br />
/dev/mapper/VolG.roup00-.LogVol00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 汽车<br />
.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15G 3.7G .9.9G 27% /.u01/oracle/oradata.<br />
[root@jxxd.b2 ~]# c.at /etc/fstab(广告)<br />
检查vg还有多少空间没有分..配以及当前lv的大小投资<br />
[root@jxxdb2 ~]# v.gdisplay | egrep "Vo.lume group|VG. Name|Alloc PE|Free PE"域名<br />
--- ..Volume group ---电脑 <br />
VG Name&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V.olGroup00 CSUBOY<br />
Alloc PE / Size .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;610 / 19.06 .GB学习<br />
Free PE / Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11107 / 3..47.09 GB教育<br />
[r.oot@jxxdb2 ~]#. lvdisplay | egrep " Logical volume|LV Name|VG Name|LV Size."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 汽车<br />
--- Log.ical vol.ume ---.<br />
LV Name&nbsp;&nbsp;&nbsp;&nbsp;..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/dev/VolGroup00/LogVol00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;婚庆<br />
VG. Name.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VolGroup00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;杀毒 <br />
LV S.ize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;14.50 GB电脑 <br />
--- Logica.l volum.e ---&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 电子<br />
LV Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/de.v/Vo.lGroup00/LogVol01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;杀毒 <br />
V.G Name&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VolGroup00电脑 <br />
LV .Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.56 G.B--- 印刷 <br />
=========================.=.===================================.==(广告)<br />
CentOS 新加硬盘分区<br />
#fidsk&nbsp;&nbsp;/dev/hd.b&nbsp;&nbsp;&nbsp;&nbsp;健康<br />
#mkfs.[e.xt3,reiserf.s]&nbsp;&nbsp; /dev/hdb(广告)<br />
#mkdir&nbsp;&nbsp;/ftp/ne.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;乙肝 <br />
#mount&nbsp;&nbsp; /dev/.h.db&nbsp;&nbsp;/ftp/new--------------彩票 <br />
#echo .&#8221; /dev/sdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . /ftp/new&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp; au.to&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noauto,user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&#8243;&nbsp;&nbsp;&gt;&gt; /etc/fstab(广告)<br />
原文地址 <br />
<a href="http://hi.baidu.com/77941/blog/item/2a763ca80f9055b7cb130c08.html" target="_blank">http://hi.baidu.com/77941/blog/item/2a763ca80f9055b7cb130c08.html</a>&nbsp;&nbsp;&nbsp;
<img src ="http://www.blogjava.net/jvict/aggbug/332829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-09-25 15:09 <a href="http://www.blogjava.net/jvict/articles/332829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OWC做电子表格和图表的试验 [转]</title><link>http://www.blogjava.net/jvict/articles/320211.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 06 May 2010 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/320211.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/320211.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/320211.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/320211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/320211.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文：http://www.cnblogs.com/salonliudong/archive/2008/05/23/1206180.html&nbsp;连续这么多天持续写SQL，晚上找资料研究一下Microsoft Office Web Components（续上一篇Excel的文章）调节一下自己，和上一篇文章的主题一样，这篇主要研究OWC做报表的方法。先看一下示例的效果：...&nbsp;&nbsp;<a href='http://www.blogjava.net/jvict/articles/320211.html'>阅读全文</a><img src ="http://www.blogjava.net/jvict/aggbug/320211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-05-06 15:36 <a href="http://www.blogjava.net/jvict/articles/320211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OWC-Excel电子表格应用收藏</title><link>http://www.blogjava.net/jvict/articles/320206.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 06 May 2010 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/320206.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/320206.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/320206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/320206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/320206.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/RainyLin/archive/2008/09/08/2899754.aspx">原文：http://blog.csdn.net/RainyLin/archive/2008/09/08/2899754.aspx</a><br />
<br />
1、引入OWC组件。（右键单击工程名在下拉菜单中选择&#8220;add Reference...&#8221;，在弹出界面选择"COM"，选择"Microsoft Office web components11.0",点击&#8220;ok&#8221;, 即可。），完成以上后就可以在工程的Reference下看到&#8220;OWC11&#8221;了。<br />
2、在页面中添加&#8220;using Microsoft.Office.Interop.Owc11；&#8221;；<br />
3、现在就可以在页面中添加一个相应的对象了。例如Spreadsheet: &lt;object id="Spreadsheet1" classid=""&gt;&lt;/Object&gt;" 就可以了。当然也可以在code部份new一个对象：&#8220; Microsoft.Office.Interop.Owc11.Spreadsheet dd = new Microsoft.Office.Interop.Owc11.Spreadsheet();（在code中还没研究会怎么个用法。）&#8221;;<br />
4、这一步是用js写的。只是初步形成一个有数据的表格。在js code中添加一个load()，load中添加:<br />
Spreadsheet1.Activesheet.Cells(1,1).Value="第一格";<br />
Spreadsheet1.Activesheet.Cells(2,1).Value="第二格";&nbsp; <br />
Spreadsheet1.Activesheet.Cells(3,1).Value="第三格"; <br />
然后在body中加入 onload="return load()" 即：&lt;body onload="return load()"&gt; ;<br />
生成即可。<br />
上面写的是最简单的一个sample。<br />
整体代码如下：<br />
&nbsp;</p>
<p>&lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %&gt;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
<p>&nbsp;&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;</p>
<p>&lt;head id="Head1" runat="server"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;title&gt;Untitled Page&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;script language="javascript"&gt;&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;function&nbsp;&nbsp; onload()&nbsp;&nbsp; {&nbsp; </p>
<p>&nbsp;alert("start");&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; var&nbsp;&nbsp; Spreadsheet1&nbsp;&nbsp; =&nbsp;&nbsp; document.all("Spreadsheet1");&nbsp; </p>
<p>&nbsp;&nbsp; alert(Spreadsheet1);</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(1,1).Value="0.13"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(1,2).Value="0.23"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(1,3).Value="0.33"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(1,4).Value="0.43"</p>
<p>&nbsp;&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(2,1).Value="2.13"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(2,2).Value="2.23"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(2,3).Value="2.33"</p>
<p>&nbsp;&nbsp; Spreadsheet1.ActiveSheet.Cells(3,4).Value="2.43"</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; alert(Spreadsheet1.XMLData);</p>
<p>&nbsp;alert("End");&nbsp; </p>
<p>&nbsp;}&nbsp; </p>
<p>&nbsp;&lt;/script&gt;&nbsp; </p>
<p>&lt;/head&gt;</p>
<p>&lt;body onload="return onload()"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;div&gt;</p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; &lt;/div&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;OBJECT&nbsp;&nbsp; id="Spreadsheet1"&nbsp;&nbsp; classid="clsid:0002E559-0000-0000-C000-000000000046"&nbsp;&nbsp; name="Spreadsheet1" style="width:100%;height:421px" &gt;&nbsp; </p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;&lt;/OBJECT&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技术要点<br />
1.1.&nbsp;&nbsp;&nbsp; Excel试验：<br />
A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel嵌入网页的方法。</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在后台用流的方式返回给前台页面展现；</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在后台讲Excel格式数据定好保存到本地，在前台页面用html标签加载展示；</p>
<p>B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel显示格式的控制。</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel单元格格式设置，默认为常规类型；</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上下标格式的控制；</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格水平垂直对齐方式；</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格边框设置；</p>
<p>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格合并；</p>
<p>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字体设置，包括字体的颜色、大小、粗体、斜体、字体、下划线等；</p>
<p>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 冻结行列；</p>
<p>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公式栏的显示与隐藏；</p>
<p>9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行标题和列表题的显示与隐藏；</p>
<p>10.&nbsp;&nbsp;&nbsp; 网格的显示与隐藏；</p>
<p>11.&nbsp;&nbsp;&nbsp; 水平滚动条和垂直滚动条的显示与隐藏；</p>
<p>12.&nbsp;&nbsp;&nbsp; Sheet页的显示与隐藏；</p>
<p>C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向Excel中填充数据，并导出为临时文件。</p>
<p>1.2.&nbsp;&nbsp;&nbsp; OWC试验：<br />
A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OWC组件在web页面展示的方法。</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将OWC中Sheet导出为本地Excel文件，再将导出的文件呈现到Web页面；</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后台把配置好的Sheet直接以流文件方式返回到Web页面展现；</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用html标签将OWC展现在Web页面，加载后台程序导出到本地的文件（xml、html、csv格式）来显示数据；</p>
<p>B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在OWC中的电子表格类中填充数据的方法。</p>
<p>C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OWC中显示数据格式的控制。</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 电子表格外观控制：工具栏的显示、Office图标的显示、列标题的显示、行标题的显示、水平滚动条的显示、垂直滚动条的显示、网格的显示、网格颜色设置；</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格水平对齐方式；</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格垂直对齐方式；</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格合并；</p>
<p>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格字体设置：字体、字形、字号、字体颜色、字体加粗、下划线（多种样式）；</p>
<p>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格边框设置；</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主要模块<br />
2.1.&nbsp;&nbsp;&nbsp; Excel<br />
1、Excel嵌入网页的方法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A、将后台定制好的Excel文件在后台用流的方式返回给前台页面展现，代码如下：</p>
<p>Response.ClearContent();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ClearHeaders();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentType = "application/vnd.ms-excel";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AddHeader("Content-Disposition", "inline;filename='我的文件'");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.WriteFile(FileName);//FileName为Excel文件所在地址</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Flush();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行效果：整个页面都充满了Excel。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B、在前台页面框架中直接加在，代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;iframe id="myExcelHtml" src ="Nomarl.xls" width = "600" height ="300" align ="middle"&gt; &lt;/iframe&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行效果：可随意控制Excel在页面的显示位置。</p>
<p>2、 Excel显示格式控制。</p>
<p>A、Excel单元格格式设置，默认为常规类型；</p>
<p>代码：</p>
<p>Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置单元格格式为文本类型，文本类型可设置上下标</p>
<p>r.NumberFormat = "@";</p>
<p>//设置单元格格式为数值类型，小数点后2位</p>
<p>r.NumberForma = "0.00_ "</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为货币类型，小数点后2位</p>
<p>&nbsp;r.NumberForma = "￥#,##0.00;￥-#,##0.00"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为会计专用类型，小数点后2位</p>
<p>&nbsp;r.NumberForma = _"_ ￥* #,##0.00_ ;_ ￥* -#,##0.00_ ;_ ￥* ""-""??_ ;_ @_ "</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为日期类型</p>
<p>&nbsp;r.NumberForma = "yyyy-m-d"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为时间类型</p>
<p>&nbsp;r.NumberForma = "[$-F400]h:mm:ss AM/PM"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为百分比类型，小数点后2位</p>
<p>&nbsp;r.NumberForma = "0.00%"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为分数类型，分母为一位数</p>
<p>&nbsp;r.NumberForma = "# ?/?"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为科学技术类型，小数位数为2</p>
<p>&nbsp;r.NumberForma = "0.00E+00"</p>
<p>&nbsp;&nbsp;&nbsp; //设置单元格格式为特殊类型</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; r.NumberForma = "000000"</p>
<p>B、上下标格式的控制；</p>
<p>代码：</p>
<p>//控制输出样式为下标</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + 1, b.Length).Font.Subscript = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //控制输出样式为上标</p>
<p>&nbsp;mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + b.Length + 1, c.Length).Font.Superscript = true;</p>
<p>C、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格水平垂直对齐方式；</p>
<p>代码：</p>
<p>//单元格水平，垂直居中</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 上面代码中，枚举XLHAlign的值还有：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 右对齐</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignRight,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 左对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignLeft,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 两端对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignJustify,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 分散对齐(缩进)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignDistributed,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 居中对齐</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignCenter,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 依照数据类型对齐,常规</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignGeneral,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 填充</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignFill,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 跨列对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignCenterAcrossSelection = 7,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 枚举XLVAlign的值还有：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 靠上对齐</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignTop,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //两端对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignJustify = -4130,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //分散对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignDistributed,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //居中对齐.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignCenter,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //靠下对齐.</p>
<p>&nbsp;xlVAlignBottom = -4107,</p>
<p>D、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单元格边框设置；</p>
<p>代码：</p>
<p>//设置边框</p>
<p>&nbsp;Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);</p>
<p>r.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 枚举XlLineStyle中还有下面线形：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //没边框线</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlLineStyleNone,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //双线.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDouble,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //点状线.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDot,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //虚线.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDash,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //连续线.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlContinuous,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //点线交互型</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDashDot,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //两点一线型</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDashDotDot,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //斜线.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlSlantDashDot,</p>
<p>E、单元格合并</p>
<p>用get_Range方法获取要合并的单元格，再设置MergeCells属性的值进行合并。</p>
<p>代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //合并单元格</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1,4]).MergeCells = true;</p>
<p>F、字体设置</p>
<p>先用get_Range方法选中要设置字体的某个单元格或者或者直接用get_Characters方法直接选中要设置的字符进行设置；</p>
<p>代码：</p>
<p>//加粗字体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Bold = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体大小</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1,1],myExcel.Cells[1,1]).Font.Size = 16;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体的颜色</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.ColorIndex = 3;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Name = "隶书";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置成斜体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Italic = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置下划线</p>
<p>myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 1]).Font.Underline = true;</p>
<p>G、冻结行列</p>
<p>用get_Range方法获取单元格，再设置其Freezepanes属性为true，就把该单元格右上方的行和列都冻结了，取消冻结将其值设为false即可。</p>
<p>//冻结行列</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.get_Range(myExcel.Cells[3,1],myExcel.Cells[3,1]).Activate();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.FreezePanes = true;</p>
<p>H、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公式输入栏的隐藏</p>
<p>//设置是否显示Excel公式输入栏，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.DisplayFormulaBar = false;</p>
<p>I、 列标题与行标题的隐藏</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置是否显示行和列的标题，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.DisplayHeadings = false;</p>
<p>J、网格的隐藏</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置是否显示网格，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.DisplayGridlines = false;</p>
<p>K、&nbsp; 水平、垂直滚动条的隐藏</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置是否显示水平滚动条</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.DisplayHorizontalScrollBar = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置是否显示垂直滚动条</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.DisplayVerticalScrollBar = false;</p>
<p>L、Sheet页的隐藏</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置是否显示Sheet页</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.ActiveWindow.DisplayWorkbookTabs = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过格式设置以后，展示在页面上的效果如下图：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
3、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向Excel中填充数据，并保存为临时文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Application myExcel = new Excel.Application();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开模板文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Application.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //选中有数据的Cells</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Workbook myBook = myExcel.Workbooks[1];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Worksheet mySheet = (Excel.Worksheet)myBook.Worksheets[1];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.Select();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不单独显示Excel，最后在IE中显示</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Visible = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第一行为报表的标题</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Cells[1, 1] = "用模板导出的报表";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //逐行写入数据，数组中第一行为报表的列标题</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; DT.Columns.Count - 3; i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Cells[2, 1 + i] = DT.Columns[i].Caption; ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//在当前目录下指定一个临时文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string FileName = Server.MapPath("~") + """Temp.xls";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (File.Exists(FileName))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.Delete(FileName);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Save(FileName);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells.Clear() ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置不出现保存提示框</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myBook.Saved = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myExcel.Application.Workbooks.Close();</p>
<p>2.2.&nbsp;&nbsp;&nbsp; OWC组件<br />
1、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OWC组建在Web页面的展现方法；</p>
<p>A、将OWC中Sheet导出为本地Excel文件，再将导出的文件呈现到Web页面；</p>
<p>代码如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.Export(FileName, OWC11.SheetExportActionEnum.ssExportActionNone, OWC11.SheetExportFormat.ssExportHTML);//Sheet为OWC11中SpreadsheetClass类的对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ClearContent();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ClearHeaders();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentType = "application/vnd.ms-excel";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AddHeader("Content-Disposition", "inline;filename='我的文件'");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.WriteFile(FileName);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Flush();</p>
<p>Response.Close();</p>
<p>B、后台把配置好的Sheet直接以文件方法返回到Web页面展现；</p>
<p>代码如下：</p>
<p>Response.Clear();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Buffer = true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentEncoding = System.Text.Encoding.Default;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Response.Charset = "utf-8";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentType = "application/vnd.ms-excel";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(Sheet.HTMLData);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.EnableViewState = false;</p>
<p>Response.End();</p>
<p>C、用html标签将OWC展现在Web页面，加载后台程序导出到本地的文件（xml、html、csv格式）来显示数据；</p>
<p>代码如下：</p>
<p>&lt;object classid="clsid:0002E559-0000-0000-C000-000000000046" width="600" id="Spreadsheet1"height="200"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="DataType" value="HTMLURL"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="HTMLURL" value="&lt;%=FileName%&gt;"/&gt;</p>
<p>&lt;/object&gt;</p>
<p>2、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为OWC中的SpreadSheet类中填充数据的方法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 获取Sheet的Cell或者ActiveCell，直接给里面填充数据，代码如下：</p>
<p>OWC11.SpreadsheetClass Sheet = new OWC11.SpreadsheetClass();</p>
<p>//第一行为报表的标题</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.ActiveCell[1, 1] = "用模板导出的报表";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //逐行写入数据，数组中第一行为报表的列标题</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; DT.Columns.Count - 3; i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.Cells[2, 1 + i] = DT.Columns[i].Caption; ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为报表填充数据并设置显示上下标格式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; DT.Rows.Count; i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; DT.Columns.Count - 4; j++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.ActiveCell[3 + i, 1 + j] = DT.Rows[i][j];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string a = DT.Rows[i][DT.Columns.Count - 4].ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string b = DT.Rows[i][DT.Columns.Count - 3].ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string c = DT.Rows[i][DT.Columns.Count - 2].ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.ActiveCell[3 + i,DT.Columns.Count - 3] = a + b + c;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.Columns.AutoFit();</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>3、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OWC中数据显示格式的控制：</p>
<p>A、 电子表格外观控制：</p>
<p>是否显示工具栏默认值为 true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayToolbar = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消显示Office图标</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayOfficeLogo = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否显示列标题，默认是true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayColumnHeadings = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否显示行标题，默认是true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayRowHeadings = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否显示水平滚动条，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayHorizontalScrollBar = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否显示垂直滚动条，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayVerticalScrollBar = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 电子表格是否显示网格，默认为true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.DisplayGridlines = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置行的颜色</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; DT.Columns.Count - 2; i += 2)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Rows.Cells[i, 1], Sheet.Rows.Cells[i, DT.Columns.Count - 3]).Interior.set_ColorIndex(2);</p>
<p>}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 做了上面的设置，效果如下图：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
B、 单元格水平对齐</p>
<p>用Get_Range方法获取要设置的单元格，用set_HorizontalAlignment方法设置对齐方式；</p>
<p>代码如下：</p>
<p>//单元格水平居中</p>
<p>Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_HorizontalAlignment(OWC11.XlHAlign.xlHAlignCenter);</p>
<p>枚举XLHAlign的值分别是：</p>
<p>&nbsp;&nbsp; //右对齐：</p>
<p>xlHAlignRight,</p>
<p>//左对齐：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignLeft,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //居中对齐：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignCenter,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //常规</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlHAlignGeneral1,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //填充对齐：</p>
<p>xlHAlignFill</p>
<p>C、 单元格垂直对齐</p>
<p>用Get_Range方法获取要设置的单元格，用set_VerticalAlignment方法设置对齐方式；</p>
<p>代码如下：</p>
<p>//单元格垂直居中</p>
<p>Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).set_VerticalAlignment(OWC11.XlVAlign.xlVAlignCenter);</p>
<p>枚举XLHAlign的值分别是：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; // 靠上对齐</p>
<p>xlVAlignTop,</p>
<p>// 居中对齐</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignCenter,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 靠下对齐</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlVAlignBottom</p>
<p>D、 单元格合并；</p>
<p>用get_Range方法先获取要合并的单元格，再用set_MergeCells方法进行合并。</p>
<p>代码如下：</p>
<p>//标题行合并单元格</p>
<p>Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, DT.Columns.Count - 3]).set_MergeCells(true);</p>
<p>E、 字体设置；</p>
<p>用get_Range方法先获取要合并的单元格，设置该单元格字体：字体、字形、字号、字体颜色、字体加粗、带下划线（下划线有多种样式）等。</p>
<p>代码如下：</p>
<p>//标题行加粗字体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Bold(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体大小&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Size(16);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体颜色</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_ColorIndex(3);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Name("隶书");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体为斜体</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Italic(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体下划线</p>
<p>&nbsp;Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[1, 1]).Font.set_Underline(OWC11.XlUnderlineStyle.xlUnderlineStyleDouble);</p>
<p>枚举XLUnderlineStyle的值分别为：</p>
<p>xlUnderlineStyleNone,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlUnderlineStyleDouble,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlUnderlineStyleSingle,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlUnderlineStyleSingleAccounting,</p>
<p>xlUnderlineStyleDoubleAccounting,</p>
<p>F、 添加边框</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用get_Range方法先获取要添加边框的单元格，用Borders.set_LineStyle方法设置边框的类型即可。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //画边线</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheet.get_Range(Sheet.Cells[1, 1], Sheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]).Borders.set_LineStyle(OWC11.XlLineStyle.xlContinuous);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 边框类型有一下几种：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlLineStyleNone,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDot,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDash,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlContinuous,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDashDot,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlDashDotDot,</p>
<p>运行效果如下：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 限制条件说明<br />
3.1.&nbsp;&nbsp;&nbsp; Excel<br />
服务端需要安装Microsoft Office Excel 2003，Microsoft Office Excel 2003 SP1和Visual Studio 2005 Tools for Office Runtime（vstor.exe），客户端需要安装Microsoft Office Excel 2003，Microsoft Internet Explorer 5.01 (Service Pack 2) 或更高版本。</p>
<p>3.2.&nbsp;&nbsp;&nbsp; OWC<br />
服务端和客户端都必须安装 Microsoft Office Web Components，它可随 Office 2003 一起安装，或者，如果用户的公司具有 Office 2003 站点许可证，则可以通过公司的 Intranet 下载 Office Web 组件，用户还必须使用 Microsoft Internet Explorer 5.01 (Service Pack 2) 或更高版本。</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结果分析<br />
4.1.&nbsp;&nbsp;&nbsp; Excel<br />
Excel是一款功能强大、操作方便的电子表格处理软件，使用Excel做报表可以满足我们报表的所有需求，包括：表格的样式、尺寸、颜色的设置；字体样式、颜色、大小、对齐方式、上下标的设置；表头设置、表头冻结、单元格合并；数据统计；打印等。另外在程序实现上还有一下优点：</p>
<p>1、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用VBA简化程序设计过程。VBA应用程序是&#8220;寄生于&#8221;Excel应用程序上的，因此，Excel的一些基本功能和函数等都可以在VBA中直接使用。</p>
<p>2、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以充分利用Excel中的宏。Excel中的宏录制器允许记录一系列的操作，并且将这些操作转换为VBA代码，因此，一方面可以利用宏录制器来建立应用程序的基础，另一方面，在不能确定如何编写一系列的步骤时，可以进行录制，再查看代码。</p>
<p>3、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与数据库交互。Excel能够使用多种类型的数据库，能够对数据库中的数据进行访问，同样也能够将Excel分析的结构导入到数据库中。</p>
<p>但同时，用Excel做报表也有一些不足，由于IE安全策略，当网站尝试下载除图片、音乐、纯文本文件以外其他格式文件时，IE将弹出一条&#8220;文件下载&#8221;的安全警告，因为要下载的文件上可能包含计算机代码(可能是程序或计算机病毒)，这样我们在IE上展现Excel报表时，会出现如下图提示，美中不足。<br />
&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决方案：</p>
<p>1、 将Excel封装在ActiveX里面，这样可以避免每次打开系统甚至每次刷新页面的时候弹出&#8220;文件下载&#8221;的对话框，但是在第一次打开的时候需要下载安装ActiveX。</p>
<p>2、 在客户端机器上进行设置：打开&#8220;我的电脑&#8221;&#224;&#8220;工具&#8221;（菜单）&#224;&#8220;文件类型&#8221;（属性页），在&#8220;已注册的文件类型&#8221;中选择&#8220;扩展名&#8221;为&#8220;XLS&#8221;，&#8220;文件类型&#8221;为&#8220;Microsoft Excel 工作表&#8221;，点击&#8220;高级&#8221;按钮后，如下图：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
在&#8220;编辑文件类型&#8221;对话框中，&#8220;下载后确认打开&#8221;复选框不被选中表示直接打开，被选中表示弹出对话框，去掉勾点击确定。这样设置会影响客户端机器电子邮件.XLS格式附件的下载。</p>
<p>4.2.&nbsp;&nbsp;&nbsp; OWC<br />
OWC是Office Web Compents的缩写，即Microsoft的Office Web组件，包含SpreadSheet组件、Chart组件、PioTable组件和Data Source组件。我们报表使用的是SpreadSheet组件，使用它可以友好、方便的将电子表格展现在web页面，它同样可以满足我们一下需求：表格的样式、尺寸、背景颜色的设置；字体样式、颜色、大小、对齐方式的设置；表头设置、表头冻结、单元格合并；数据的统计；打印等。</p>
<p>在程序实现上OWC和Excel是相通的，程序设计过程也简单，可以直接调用Excel的方法，在不确定代码如何实现时也可以录制宏，查看代码。</p>
<p>缺点是没法实现上下标数据的显示，既是将带有上下标格式数据的Excel导入OWC的电子表格，上下标格式也失效，此问题暂没找到解决方法。</p>
<p>5.&nbsp;&nbsp; 参考文档<br />
1、《Microsoft Office Excel 2003 Visual Basic参考》。</p>
<p>2、《Microsoft Office Excel 2003电子表格组件帮助》。</p>
<p><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/RainyLin/archive/2008/09/08/2899754.aspx</p>
<img src ="http://www.blogjava.net/jvict/aggbug/320206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-05-06 15:09 <a href="http://www.blogjava.net/jvict/articles/320206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用owc生成excel并且显示在页面 [转]</title><link>http://www.blogjava.net/jvict/articles/320204.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 06 May 2010 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/320204.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/320204.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/320204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/320204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/320204.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/lonely7345/archive/2007/12/08/1924063.aspx">原文：http://blog.csdn.net/lonely7345/archive/2007/12/08/1924063.aspx</a><br />
<br />
主要利用OWC生成Excel,画表头和显示从数据库读出来的数据,然后显示在前台页面上,无需客户端安装office,只需要安装owc.</p>
<p>后面利用OWC操作EXCEL,并且生成文件的操作</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SpreadsheetClass xlsheet = new SpreadsheetClass();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置标题#region&nbsp; 设置标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //写标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //合并单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1,30]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[1, 1] = "采购执行情况一览表";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //字体加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, 30]).Font.set_Bold(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //单元格文本水平居中对齐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, 30]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体大小<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1,30]).Font.set_Size(14);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置列#region&nbsp; 设置列<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2,1],xlsheet.Cells[3,1]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 1] = "序号";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 1], xlsheet.Cells[3,1]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 2], xlsheet.Cells[3, 2]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 2] = "项目号";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 2], xlsheet.Cells[3, 2]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 3], xlsheet.Cells[3, 3]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 3] = "包号";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 3], xlsheet.Cells[3, 3]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 4], xlsheet.Cells[3, 4]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 4] = "包预算";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 4], xlsheet.Cells[3, 4]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 5], xlsheet.Cells[3, 5]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 5] = "包计划请购日期";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 5], xlsheet.Cells[3, 5]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 6], xlsheet.Cells[3, 6]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 6] = "包计划签约日期";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 6], xlsheet.Cells[3,6]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 7], xlsheet.Cells[3, 7]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 7] = "包计划运输日期";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 7], xlsheet.Cells[3, 7]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 8], xlsheet.Cells[3, 8]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 8] = "包计划检验日期";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 8], xlsheet.Cells[3, 8]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 9], xlsheet.Cells[3, 9]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 9] = "项目经理";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 9], xlsheet.Cells[3, 9]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 10], xlsheet.Cells[3, 10]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2,10] = "采购经理";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 10], xlsheet.Cells[3, 10]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 11], xlsheet.Cells[3, 11]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 11] = "采购工程师";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 11], xlsheet.Cells[3, 11]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 12], xlsheet.Cells[3, 12]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 12] = "包状态";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 12], xlsheet.Cells[3, 12]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 13], xlsheet.Cells[3, 13]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 13] = "合同号";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 13], xlsheet.Cells[3, 13]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 14], xlsheet.Cells[3, 14]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 14] = "供应商";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 14], xlsheet.Cells[3, 14]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 15], xlsheet.Cells[3, 15]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 15] = "合同签定日";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 15], xlsheet.Cells[3, 15]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 16], xlsheet.Cells[3, 16]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 16] = "合同金额";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 16], xlsheet.Cells[3, 16]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 17], xlsheet.Cells[3, 17]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 17] = "合同控制价";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 17], xlsheet.Cells[3, 17]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 18], xlsheet.Cells[3, 18]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 18] = "出厂资料交付时间";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 18], xlsheet.Cells[3, 18]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 19], xlsheet.Cells[3, 19]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 19] = "出厂前检验时间";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 19], xlsheet.Cells[3, 19]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 20], xlsheet.Cells[3, 20]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 20] = "性能试验时间";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 20], xlsheet.Cells[3, 20]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 21], xlsheet.Cells[2, 24]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 21] = "交货时间";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 21], xlsheet.Cells[2, 24]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 21] = "1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 22] = "2";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 23] = "3";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 24] = "4";</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 25], xlsheet.Cells[2, 30]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[2, 25] = "付款条件";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[2, 25], xlsheet.Cells[2, 30]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 25] = "1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 26] = "2";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 27] = "3";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 28] = "4";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 29] = "5";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[3, 30] = "6";</p>
<p>#endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写入数据#region&nbsp; 写入数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int row = 4;//从第四行开始</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IList list = this.m_ProcurementPackageManager.GetAllObjectsList();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (ProcurementPackage package in list)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row,1] = i.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 2] = package.Project.ProjectCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 3] = package.PackageCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 4] = package.PriceBudget;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 5] = ConvertDateTimeToString(package.PlanRequestDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 6] = ConvertDateTimeToString(package.PlanSignDate); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 7] = ConvertDateTimeToString(package.PlanTransportDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 8] = ConvertDateTimeToString(package.PlanCheckDate);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 9] = this.m_ProcurementPackageManager.GetPackageGroupUser(package.UniqueID, PackageGroupEnum.ProjectManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 10] = this.m_ProcurementPackageManager.GetPackageGroupUser(package.UniqueID, PackageGroupEnum.PurchasingManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 11] = this.m_ProcurementPackageManager.GetPackageGroupUser(package.UniqueID, PackageGroupEnum.ProcurementEngineer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row, 12] = package.FlagDSC;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j&nbsp; = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (ContractMaster contract in package.ContractList)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 13] = contract.UniCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 14] = contract.ShortList.LongList.CompanyName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 15] = ConvertDateTimeToString(contract.SignDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 16] = contract.TotalAmount;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 17] = contract.ControlPrice;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 18] = ConvertDateTimeToString(contract.FactoryDataDeliveryTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 19] = ConvertDateTimeToString(contract.FactoryInspectionTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 20] = ConvertDateTimeToString(contract.PerformanceTestTime);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 21] = ConvertDateTimeToString(contract.DeliveryTime1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 22] = ConvertDateTimeToString(contract.DeliveryTime2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 23] = ConvertDateTimeToString(contract.DeliveryTime3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 24] = ConvertDateTimeToString(contract.DeliveryTime4);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 25] = contract.PaymentTerm1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 26] = contract.PaymentTerm2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 27] = contract.PaymentTerm3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 28] = contract.PaymentTerm4;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 29] = contract.PaymentTerm5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[row + j, 30] = contract.PaymentTerm6;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int m = 1; m &lt;= 12; m++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[row, m], xlsheet.Cells[row + j-1, m]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[row, m], xlsheet.Cells[row + j-1, m]).set_HorizontalAlignment(XlHAlign.xlHAlignCenter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[row, m], xlsheet.Cells[row + j-1, m]).set_VerticalAlignment(XlVAlign.xlVAlignCenter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 生成文件#region&nbsp; 生成文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sFileUrl = Convert.ToString(this.SessionInfo.GetIniKeyValue("UploadDir", "UpLoadDir"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string fileUrl = Server.MapPath(sFileUrl) + "\";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.Export(fileUrl + "_TestOWC.html", SheetExportActionEnum.ssExportActionNone, SheetExportFormat.ssExportHTML);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception&nbsp; ee)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(ee.Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />
这样其实有一个问题,要控制生成的报表在不同的文件夹下面,否则会不同的人调用相同的报表.由于在最后并没有采用这种方案,所以也没有时间考虑这些了</p>
<p>前台用Activex显示Excel</p>
<p>&nbsp; &lt;object classid="clsid:0002E559-0000-0000-C000-000000000046"&nbsp;&nbsp;&nbsp; width="1000"&nbsp;&nbsp; id="Spreadsheet1"&nbsp;&nbsp; height="300"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DataType" value="HTMLURL"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="HTMLURL" value="&lt;%=Agent.ServerURL %&gt;ebChainUpLoad/_TestOWC.html"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="AllowPropertyToolbox" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="AutoFit" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="Calculation" value="-4105"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="Caption" value="采购执行情况一览表"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayColumnHeadings" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayGridlines" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayHorizontalScrollBar" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayOfficeLogo" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayPropertyToolbox" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayRowHeadings" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayTitleBar" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayToolbar" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayVerticalScrollBar" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DisplayWorkbookTabs" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="EnableEvents" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="MaxHeight" value="80%"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="MaxWidth" value="100%"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="MoveAfterReturn" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="MoveAfterReturnDirection" value="-4121"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="RightToLeft" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="ScreenUpdating" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="LockedDown" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="ConnectedToChart" value="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="DefaultQueryOnLoad" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param name="EnableUndo" value="-1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;table width='100%' cellpadding='0' cellspacing='0' border='0' height='8'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td bgColor='#336699' height='25' width='10%'&gt;&amp;nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;td bgColor='#666666'width='85%'&gt;&lt;font face='宋体' color='white' size='4'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;b&gt;&amp;nbsp; 缺少 Microsoft Office Web Components&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;td bgColor='#cccccc' width='15'&gt;&amp;nbsp;&lt;/td&gt;&lt;td bgColor='#cccccc' width='500px'&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;font face='宋体' size='2'&gt;此网页要求 Microsoft Office Web Components。&lt;p align='center'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href='C:/IUware Online/Microsoft Office Professional Enterprise Edition 2003/files/owc11/setup.exe'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单击此处安装 Microsoft Office Web Components。&lt;/a&gt;.&lt;/p&gt;&lt;/font&gt;&lt;p&gt;&lt;font face='宋体' size='2'&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此网页同时要求 Microsoft Internet Explorer 5.01 或更高版本。&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p align='center'&gt;&lt;a href='http://www.microsoft.com/windows/ie/default.htm'&gt; 单击此处安装最新的 Internet Explorer&lt;/a&gt;.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/object&gt;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/lonely7345/archive/2007/12/08/1924063.aspx</p>
<img src ="http://www.blogjava.net/jvict/aggbug/320204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-05-06 14:47 <a href="http://www.blogjava.net/jvict/articles/320204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET中用OWC操作Excel</title><link>http://www.blogjava.net/jvict/articles/320183.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 06 May 2010 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/320183.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/320183.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/320183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/320183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/320183.html</trackback:ping><description><![CDATA[<p><a href="http://hi.baidu.com/xiaoheilong/blog/item/9fe0d800464eaf19738b6550.html">原文：http://hi.baidu.com/xiaoheilong/blog/item/9fe0d800464eaf19738b6550.html</a><br />
<br />
string connstr = System.Configuration.ConfigurationManager.ConnectionStrings["DqpiHrConnectionString"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlConnection conn = new SqlConnection(connstr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlDataAdapter sda = new SqlDataAdapter(sql1.Text, conn);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSet ds = new DataSet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sda.Fill(ds);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OWC10.SpreadsheetClass xlsheet;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet= new OWC10.SpreadsheetClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataRow dr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int ii=0;ii&lt;ds.Tables[0].Rows.Count;ii++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dr = ds.Tables[0].Rows[ii];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //合并单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i+1, 1], xlsheet.Cells[i+1, 8]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 5, 1], xlsheet.Cells[i + 5, 3]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 5, 4], xlsheet.Cells[i + 5, 6]).set_MergeCells(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 5, 7], xlsheet.Cells[i + 5, 8]).set_MergeCells(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 1, 1] = dr["姓名"].ToString() + "自然情况";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //字体加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 1, 1], xlsheet.Cells[i + 1, 14]).Font.set_Bold(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //单元格文本水平居中对齐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 1, 1], xlsheet.Cells[i + 1, 14]).set_HorizontalAlignment(OWC10.XlHAlign.xlHAlignCenter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置字体大小<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 1, 1], xlsheet.Cells[i + 1, 14]).Font.set_Size(14);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置列宽<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 1, 8], xlsheet.Cells[i + 1, 8]).set_ColumnWidth(20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //画边框线<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.get_Range(xlsheet.Cells[i + 1, 1], xlsheet.Cells[i+5, 8]).Borders.set_LineStyle(OWC10.XlLineStyle.xlContinuous);</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //写入数据&nbsp;&nbsp;&nbsp; (这里由DS生成)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 1] = "姓名";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 2] = dr["姓名"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 3] = "曾用名";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 4] = dr["曾用名"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 5] = "出生年月";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 6] = DateTime.Parse(dr["出生年月"].ToString()).Year.ToString() + "-" + DateTime.Parse(dr["出生年月"].ToString()).Month.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 7] = " 参加工作时间";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 2, 8] = DateTime.Parse(dr["参加工作时间"].ToString()).Year.ToString() + "-" + DateTime.Parse(dr["参加工作时间"].ToString()).Month.ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 1] = "性别";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 2] = dr["性别"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 3] = "民族";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 4] = dr["民族"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 5] = "政治面貌";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 6] = dr["政治面貌"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 7] = "职称";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 3, 8] = dr["职称"].ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 1] = "学历";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 2] = dr["学历"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 3] = "学位";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 4] = dr["学位"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 5] = "职务";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 6] = dr["职务"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 7] = "档案号码";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excel不支持0开头输入，加上姓氏首字母正好是编号全称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 4, 8] = dr["姓氏首字母"].ToString() + dr["档案号码"].ToString();</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 5, 1] = "现从事专业：" + dr["现从事专业"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 5, 4] = "工作单位：" + dr["工作单位"].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.ActiveSheet.Cells[i + 5, 7] = "身份证：" + dr["身份证号"].ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i += 6;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string D = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString()+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime.Now.Millisecond.ToString();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsheet.Export(Server.MapPath("./")+"<a href="file://%22+D+%22.xls/">\\"+D+".xls</a>", OWC10.SheetExportActionEnum.ssExportActionNone, OWC10.SheetExportFormat.ssExportXMLSpreadsheet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("&lt;script&gt;window.open('"+D+".xls')&lt;/script&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.blogjava.net/jvict/aggbug/320183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-05-06 11:55 <a href="http://www.blogjava.net/jvict/articles/320183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OWC操作excel</title><link>http://www.blogjava.net/jvict/articles/320180.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 06 May 2010 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/320180.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/320180.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/320180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/320180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/320180.html</trackback:ping><description><![CDATA[<p>一、用OWC <br />
什么是OWC？ <br />
　　OWC是Office Web Compent的缩写，即Microsoft的Office Web组件，它为在Web中绘制图形提供 </p>
<p>了灵活的同时也是最基本的机制。在一个intranet环境中，如果可以假设客户机上存在特定的浏览器和一 </p>
<p>些功能强大的软件（如IE5和Office 2000），那么就有能力利用Office Web组件提供一个交互式图形开 </p>
<p>发环境。这种模式下，客户端工作站将在整个任务中分担很大的比重。 <br />
有关的详细介绍也可在本站找到。 <br />
&lt;%Option Explicit <br />
Class ExcelGen <br />
Private objSpreadsheet </p>
<p>Private iColOffset </p>
<p>Private iRowOffset <br />
Sub Class_Initialize() <br />
Set objSpreadsheet = Server.CreateObject("OWC.Spreadsheet") <br />
iRowOffset = 2 <br />
iColOffset = 2 <br />
End Sub </p>
<p>Sub Class_Terminate() <br />
Set objSpreadsheet = Nothing &#8217;Clean up <br />
End Sub </p>
<p>Public Property Let ColumnOffset(iColOff) <br />
If iColOff &gt; 0 then <br />
iColOffset = iColOff <br />
Else <br />
iColOffset = 2 <br />
End If <br />
End Property </p>
<p>Public Property Let RowOffset(iRowOff) <br />
If iRowOff &gt; 0 then <br />
iRowOffset = iRowOff <br />
Else <br />
iRowOffset = 2 <br />
End If <br />
End Property Sub GenerateWorksheet(objRS) <br />
&#8217;Populates the Excel worksheet based on a Recordset&#8217;s contents <br />
&#8217;Start by displaying the titles <br />
If objRS.EOF then Exit Sub <br />
Dim objField, iCol, iRow <br />
iCol = iColOffset <br />
iRow = iRowOffset <br />
For Each objField in objRS.Fields <br />
objSpreadsheet.Cells(iRow, iCol).value = objField.Name <br />
objSpreadsheet.Columns(iCol).AutoFitColumns <br />
&#8217;设置Excel表里的字体 <br />
objSpreadsheet.Cells(iRow, iCol).Font.Bold = True <br />
objSpreadsheet.Cells(iRow, iCol).Font.Italic = False <br />
objSpreadsheet.Cells(iRow, iCol).Font.Size = 10 <br />
objSpreadsheet.Cells(iRow, iCol).Halignment = 2 &#8217;居中 <br />
iCol = iCol + 1 <br />
Next &#8217;objField <br />
&#8217;Display all of the data <br />
Do While Not objRS.EOF <br />
iRow = iRow + 1 <br />
iCol = iColOffset <br />
For Each objField in objRS.Fields <br />
If IsNull(objField.value) then <br />
objSpreadsheet.Cells(iRow, iCol).value = "" <br />
Else <br />
objSpreadsheet.Cells(iRow, iCol).value = objField.value <br />
objSpreadsheet.Columns(iCol).AutoFitColumns <br />
objSpreadsheet.Cells(iRow, iCol).Font.Bold = False <br />
objSpreadsheet.Cells(iRow, iCol).Font.Italic = False <br />
objSpreadsheet.Cells(iRow, iCol).Font.Size = 10 <br />
End If <br />
iCol = iCol + 1 <br />
Next &#8217;objField <br />
objRS.MoveNext <br />
Loop <br />
End Sub Function SaveWorksheet(strFileName) </p>
<p>&#8217;Save the worksheet to a specified filename <br />
On Error Resume Next <br />
Call objSpreadsheet.ActiveSheet.Export(strFileName, 0) <br />
SaveWorksheet = (Err.Number = 0) <br />
End Function <br />
End Class </p>
<p>Dim objRS <br />
Set objRS = Server.CreateObject("ADODB.Recordset") <br />
objRS.Open "SELECT * FROM xxxx", "Provider=SQLOLEDB.1;Persist Security </p>
<p>Info=True;User ID=xxxx;Password=xxxx;Initial Catalog=xxxx;Data source=xxxx;" <br />
Dim SaveName <br />
SaveName = Request.Cookies("savename")("name") <br />
Dim objExcel <br />
Dim ExcelPath <br />
ExcelPath = "Excel\" &amp; SaveName &amp; ".xls" <br />
Set objExcel = New ExcelGen <br />
objExcel.RowOffset = 1 <br />
objExcel.ColumnOffset = 1 <br />
objExcel.GenerateWorksheet(objRS) <br />
If objExcel.SaveWorksheet(Server.MapPath(ExcelPath)) then <br />
&#8217;Response.Write "&lt;html&gt;&lt;body bgcolor=&#8217;gainsboro&#8217; text=&#8217;#000000&#8217;&gt;已保存为Excel文件. </p>
<p>&lt;a href=&#8217;" &amp; server.URLEncode(ExcelPath) &amp; "&#8217;&gt;下载&lt;/a&gt;" <br />
Else <br />
Response.Write "在保存过程中有错误!" <br />
End If <br />
Set objExcel = Nothing <br />
objRS.Close <br />
Set objRS = Nothing <br />
%&gt; </p>
<p><br />
二、用Excel的Application组件在客户端导出到Excel或Word <br />
注意：两个函数中的&#8220;data&#8220;是网页中要导出的table的 id <br />
&lt;input type="hidden" name="out_word" onclick="vbscript:buildDoc" value="导出到word" class="notPrint"&gt; <br />
&lt;input type="hidden" name="out_excel" onclick="AutomateExcel();" value="导出到excel" class="notPrint"&gt; </p>
<p>导出到Excel代码 <br />
&lt;SCRIPT LANGUAGE="javascript"&gt; <br />
&lt;!-- <br />
function AutomateExcel() <br />
{ <br />
// Start Excel and get Application object. <br />
var oXL = new ActiveXObject("Excel.Application"); <br />
// Get a new workbook. <br />
var oWB = oXL.Workbooks.Add(); <br />
var oSheet = oWB.ActiveSheet; <br />
var table = document.all.data; <br />
var hang = table.rows.length; </p>
<p>var lie = table.rows(0).cells.length; </p>
<p>// Add table headers going cell by cell. <br />
for (i=0;i&lt;hang;i++) <br />
{ <br />
for (j=0;j&lt;lie;j++) <br />
{ <br />
oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText; <br />
} </p>
<p>} <br />
oXL.Visible = true; <br />
oXL.UserControl = true; <br />
} <br />
//--&gt; <br />
&lt;/SCRIPT&gt; <br />
导出到Word代码 <br />
&lt;script language="vbscript"&gt; <br />
Sub buildDoc <br />
set table = document.all.data <br />
row = table.rows.length <br />
column = table.rows(1).cells.length </p>
<p>Set objWordDoc = CreateObject("Word.Document") </p>
<p>objWordDoc.Application.Documents.Add theTemplate, False <br />
objWordDoc.Application.Visible=True </p>
<p>Dim theArray(20,10000) <br />
for i=0 to row-1 <br />
for j=0 to column-1 <br />
theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXT <br />
next <br />
next <br />
objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("综合查询结果集") //显示表格标题 </p>
<p>objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("") <br />
Set rngPara = objWordDoc.Application.ActiveDocument.Paragraphs(1).Range <br />
With rngPara <br />
.Bold = True //将标题设为粗体 <br />
.ParagraphFormat.Alignment = 1 //将标题居中 <br />
.Font.Name = "隶书" //设定标题字体 <br />
.Font.Size = 18 //设定标题字体大小 <br />
End With <br />
Set rngCurrent = objWordDoc.Application.ActiveDocument.Paragraphs(3).Range <br />
Set tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column) </p>
<p>for i = 1 to column </p>
<p>objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter theArray(i,1) <br />
objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.ParagraphFormat.alignment=1 <br />
next <br />
For i =1 to column <br />
For j = 2 to row <br />
objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter theArray(i,j) <br />
objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.ParagraphFormat.alignment=1 <br />
Next <br />
Next </p>
<p>End Sub <br />
&lt;/SCRIPT&gt; </p>
<p><br />
三、直接在IE中打开，再存为EXCEL文件。 <br />
把读出的数据用&lt;table&gt;格式，在网页中显示出来，同时，加上下一句即可把EXCEL表在客客户端显示。 <br />
&lt;%response.ContentType ="application/vnd.ms-excel"%&gt; <br />
注意：显示的页面中，只把&lt;table&gt;输出，最好不要输出其他表格以外的信息。 </p>
<p><br />
四、导出以半角逗号隔开的csv <br />
用fso方法生成文本文件的方法，生成一个扩展名为csv文件。此文件，一行即为数据表的一行。生成数据表字段用半角逗号隔开。 <br />
有关fso生成文本文件的方法，在此就不做介绍了。相关文档，可本站找到。 </p>
<p>CSV文件介绍 （逗号分隔文件） <br />
选择该项系统将创建一个可供下载的CSV 文件； CSV是最通用的一种文件格式，它可以非常容易地被导入各种PC表格及数据库中。 <br />
请注意即使选择表格作为输出格式，仍然可以将结果下载CSV文件。在表格输出屏幕的底部，显示有 "CSV 文件"选项，点击它即可下载该文件。 <br />
如果您把浏览器配置为将您的电子表格软件与文本（TXT）/逗号分隔文件（CSV） 相关联，当您下载该文件时，该文件将自动打开。下载下来后，如果本地已安装EXCEL，点击此文件，即可自动用EXCEL软件打开此文件。<br />
</p>
<img src ="http://www.blogjava.net/jvict/aggbug/320180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-05-06 11:11 <a href="http://www.blogjava.net/jvict/articles/320180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在CentOS下安装SVN</title><link>http://www.blogjava.net/jvict/articles/319293.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 24 Apr 2010 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/319293.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/319293.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/319293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/319293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/319293.html</trackback:ping><description><![CDATA[<div><strong><font size="4"><a href="http://www.xici.net/main.asp?url=/u691726/d79245542.htm">原文：http://www.xici.net/main.asp?url=/u691726/d79245542.htm</a><br />
<br />
1.SVN简介<br />
</font></strong>由于前些年在版本的管理上采用的都是CVS系统，总体上而言还是很优秀的，经过了多年<br />
的项目开发管理经历，在使用CVS系统在管理中大型的软件项目时还是遇到了很多不可克服的<br />
缺陷和局限性，主要表现在如下的几个方向：<br />
&nbsp;&nbsp;&nbsp; <strong>1. 无法进行文件名称的修改活动</strong>，这样一来就会导致必须先删除该文件再上传，丢失了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 历史信息，要不就必须到服务上将xxx,v文件进行改名（我采用这种方法，不过总是<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 找管理员太不方便了）；<br />
&nbsp;&nbsp;&nbsp; <strong>2. 目录名称没有被管理</strong>，这样就不能进行改名等动作，其实项目的目录结构对于项目的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功起了非常重要的作用，每次也只能到服务器上进行修改；<br />
&nbsp;&nbsp;&nbsp; <strong>3. 项目的分支代价太高</strong>，需要对每一个文件都进行标记，对于大的项目耗时太长，并且<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本上不能删除废弃了的分支和标记，因为那样很容易导致项目仓库的损坏，我就遇<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到了好多次这种让人发狂的情况；<br />
&nbsp;&nbsp;&nbsp; <strong>4. 对于文件二进制和文本的处理经常会出现混乱</strong>，结果就使将二进制文件当作文本上传<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后内容被扩展导致丢失，因为有些时候二进制文件的扩展名和某些文本文件的扩展名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相同了，所以导致CVS识别就会出错。
<p align="left"><br />
<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以安装并配置subversion（简称svn）系统，使用svn来替换CVS系统，以解决上述问题。</font>
<p align="left"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>Subversion有两种运行方式，<strong>一种是基于Apache Http Server</strong>，<strong>另外一种是Subversion Standalone Server</strong>。下面我讲解的是基于Apache Http Server的Subversion，这样做几个好处<br />
<strong>A.能使用WebDAV协议。<br />
</strong></span></font><font size="2"><span><strong>B.能使用浏览器作为客户端工具浏览源码仓库。<br />
C.可以很容易的支持到SSPI（Windows域认证）和LDAP（AD？），这些都是Apache本身就支持的。<br />
D.能得到比较完善的Apache安全认证系统，比如SSL加密连接。<br />
</strong></span></font>
<p>
<p><font size="2"><strong><font size="4">2.svn安装</font></strong><br />
<strong>安装系统</strong>：CentOS<br />
<strong>安装方式</strong>：yum install（这种方式比较简单，如果用源码安装容易产生版本兼容的问题）<br />
<strong>建议</strong>：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">最好将svn系统安装在Linux操作系统环境下，这样一来系统比较的稳定可靠，同时也可以减少很多的病毒和攻击的服务器日常维护工作量,我将svn安装在了CentOS的服务器版本下。</font>
<p><font size="2"><strong>安装：</strong></font>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql</font>
<p><font size="2"><strong>确定已经安装了svn模块：mod_dav_svn<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #cd /etc/httpd/modules<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ls | grep svn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod_authz_svn.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod_dav_svn.so</font>
<p><font size="2"><br />
<strong>如果要确认是否成功的安装了svn可以通过如下的命令进行验证：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svn --version</font>
<p><font size="2">显示如下，表示正常：</font>
<p><font size="2">svn, version 1.1.4 (r13838)<br />
&nbsp;&nbsp; compiled Aug 21 2005, 20:56:55</font>
<p><font size="2">Copyright (C) 2000-2004 CollabNet.<br />
Subversion is open source software, see </font><a href="http://subversion.tigris.org/"><font size="2">http://subversion.tigris.org/</font></a><br />
<font size="2">This product includes software developed by CollabNet (</font><a href="http://www.collab.net/"><font size="2">http://www.Collab.Net/</font></a><font size="2">).</font>
<p><font size="2">The following repository access (RA) modules are available:</font>
<p><font size="2">* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.<br />
- handles 'http' schema<br />
- handles 'https' schema<br />
* ra_local : Module for accessing a repository on local disk.<br />
- handles 'file' schema<br />
* ra_svn : Module for accessing a repository using the svn network protocol.<br />
- handles 'svn' schema</font>
<p>
<p><font size="2"><strong><font size="4">3.apache的配置</font><br />
配置/etc/httpd/conf/httpd.conf<br />
</strong>（httpd的安装目录,一般是/etc/httpd或/usr/local/appache2）<br />
</font><font size="2">进入到/etc/conf目录下用vim打开httpd.conf配置文件进行选项的修改：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. KeepAlive选项（可选）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该选项可以修改也可以不修改，主要是为了提高http协议访问的性能，可以<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使得svn仓库的访问更快，KeepAlive表示可以保持http的永久性TCP连接，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 省去了每次都需要进行重建TCP连接的巨大开销，找到如下几个选项并修改：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeepAlive On<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxKeepAliveRequests 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeepAliveTimeout 15<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. ServerAdmin/ServerName选项（可选）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于需要对系统进行管理的可以在ServerAdmin选项设置成为管理员的email<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 地址，这样在出现问题时apache会自动发送邮件到该地址中；而ServerName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须设置为本服务器的域名，如xxx.xxx.cn:80。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了使客户端能够通过Apache来访问SVN档案库，Apache需要加载一个特殊的模块mod_dav_svn。如果您的Apache是按照与预设目录安装的，mod_dav_svn 模块应该会安装在 Apache 安装位置 (默认路径是 /usr/local/apache2) 的 modules 子目录内。同时在Apache的配置文件httpd.conf（默认路径为/usr/local/apache2/conf）中已经使用LoadModule指令加载了该模块（如果没有，请手动添加）LoadModule 指令的语法很简单， 就是将一个具名模块对映到共享链接库在磁盘上的位置: <br />
LoadModule dav_svn_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_dav_svn.so<br />
注意这个指令必须出现在其它的 Subversion 相关指令之前。<br />
</font><font size="2">还要加载mod_authz_svn.so模块<br />
如图：</font>
<p><font size="2"><img height="352" src="http://p.blog.csdn.net/images/p_blog_csdn_net/liuyuan_jq/svn.JPG" width="560" h="352" w="560" init="1" p="100"  alt="" /></font>
<p><font size="2"><strong>测试Apache是否可以正常启动：</strong></font>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #vim /etc/httpd/conf/httpd.conf -- Edit what you need and save the file<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #service httpd start<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #chkconfig httpd on<br />
在浏览器中访问：<a href="http://localhost/">http://localhost</a>, 如果能看到Apache的页面，则说明Apache已经正常启动。</font>
<p><font size="2"><strong>Apache命令：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动：apachectl -k start<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭：apachectl -k stop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重启：apachectl -k restart<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看日志：tail -f /etc/httpd/logs/error-log<br />
</font>
<p>
<p align="left"><font size="2"><strong><font size="4">4.svn的配置</font></strong><br />
进入到/etc/httpd/conf.d目录下用vim打开subversion.conf配置文件进行选项的<br />
修改：<br />
<strong>a. module的配置</strong><br />
一定要保证下面的两句话存在于配置文件中，否则无法在如svn的模块，就<br />
无法访问svn的仓库了：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadModule dav_svn_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_dav_svn.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadModule authz_svn_module&nbsp;&nbsp; modules/mod_authz_svn.so</font>
<p align="left"><font size="2"><strong>b. 仓库目录配置<br />
</strong>项目仓库就是用于存放项目目录结构的服务器目录，一般情况下Linux的规则时间容易变化的内容存放在/var目录下，所以我们需要在/var目录下创建一个svn目录，这样所有的项目的根目录都作为/var/svn/目录下的一级子目录了，这样以来就可以在一个仓库目录下存放多个项目了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</font>下面将使用myapp这个仓库来配置Subversion
<p align="left"><font size="2"><span style="color: #808080; font-style: italic"># <span style="font-weight: bold; color: #c20cb9">mkdir</span> -p /var/svn</span><br />
<br />
<span style="color: #808080; font-style: italic"># <span style="font-weight: bold; color: #7a0874">cd</span> /var/svn</span><br />
<br />
<span style="color: #808080; font-style: italic"># svnadmin create myapp</span><br />
<br />
<span style="color: #808080; font-style: italic"># <span style="font-weight: bold; color: #c20cb9">chown</span> -R apache<strong>.</strong>apache myapp</span><br />
<br />
<span style="color: #808080; font-style: italic"># vi /etc/httpd/conf.d/subversion.conf</span></font>
<p align="left"><font size="2">加入以下配置</font>
<p align="justify"><font size="2"><span style="color: #00007f">LoadModule</span> dav_svn_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_dav_svn.so<br />
<span style="color: #00007f">LoadModule</span> authz_svn_module&nbsp;&nbsp; modules/mod_authz_svn.so<br />
<br />
&lt;Location /svn&gt;<br />
DAV svn<br />
SVNParentPath /var/svn<br />
<span style="color: #adadad; font-style: italic">#</span><br />
<span style="color: #adadad; font-style: italic">#&nbsp;&nbsp; # Limit write permission to list of valid users.</span><br />
<span style="color: #adadad; font-style: italic">#&nbsp;&nbsp; &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;</span><br />
<span style="color: #adadad; font-style: italic">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Require SSL connection for password protection.</span><br />
<span style="color: #adadad; font-style: italic">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # SSLRequireSSL</span><br />
<span style="color: #adadad; font-style: italic">#</span><br />
<span style="color: #00007f">AuthType</span> Basic<br />
<span style="color: #00007f">AuthName</span> <span style="color: #7f007f">"Authorization Realm"</span><br />
<span style="color: #00007f">AuthUserFile</span> /var/svn/passwd<br />
<span style="color: #00007f">Require</span> valid-<span style="color: #00007f">user</span><br />
<span style="color: #adadad; font-style: italic">#&nbsp;&nbsp; &lt;/LimitExcept&gt;</span><br />
&lt;/Location&gt;</font>
<p>下面建立可访问用户文件
<div style="padding-bottom: 0px">
<div>
<pre><span style="color: #808080; font-style: italic"># htpasswd -c /var/svn/<span style="font-weight: bold; color: #c20cb9">passwd</span> justin</span></pre>
</div>
</div>
<p>要增加用户,则使用下面命令
<div style="padding-bottom: 0px">
<div>
<pre><span style="color: #808080; font-style: italic"># htpasswd /var/svn/<span style="font-weight: bold; color: #c20cb9">passwd</span> other</span></pre>
</div>
</div>
<p>重起Apache
<div style="padding-bottom: 0px">
<div>
<pre><span style="color: #808080; font-style: italic"># service httpd restart</span></pre>
</div>
</div>
<p>Subversion部分安装完成，打开浏览器访问<a href="http://localhost/svn/myapp">http://localhost/svn/myapp</a>即可看到效果。</p>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/319293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-04-24 23:21 <a href="http://www.blogjava.net/jvict/articles/319293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET 安全认证(单点登录）【上集】 </title><link>http://www.blogjava.net/jvict/articles/319231.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 23 Apr 2010 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/319231.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/319231.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/319231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/319231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/319231.html</trackback:ping><description><![CDATA[<div class="ns_content">原文：http://apps.hi.baidu.com/share/detail/793253
<p style="text-indent: 2em"><br />
代码写 N 久了，总想写得别的。这不，上头说在整合两个项目，做成单一登录（Single Sign On），也有人称之为&#8220;单点登录&#8221;。查阅相关文档后，终于实现了，现在把它拿出来与大家一起分享。或许大家会问：&#8220;这与标题不符呀？&#8221;别急，在下笔之前，我脑子里想到了我刚使用 Form 认证时遇到的一些问题，以及使用过程用到的一些技巧（实乃投机取巧是也 ^_^ ）。此文供大家学习交流之用，欢迎广大劳苦群众拎着鸡蛋、捧着鲜花前来评论。转载请注明原创作者乃寒羽枫是也，不甚感激！</p>
<p style="text-indent: 2em">废话也说的差不多了，言归正传， ASP.NET 的安全认证，共有&#8220;Windows&#8221;&#8220;Form&#8221;&#8220;Passport&#8221;&#8220;None&#8221;四种验证模式。&#8220;Windows&#8221;与&#8220;None&#8221;没有起到保护的作用，不推荐使用；&#8220;Passport&#8221;我又没用过，唉&#8230;&#8230;所以我只好讲讲&#8220;Form&#8221;认证了。我打算分三部分：</p>
<p style="text-indent: 2em">第一部分——怎样实现From 认证；</p>
<p style="text-indent: 2em">第二部分—— Form 认证的实战运用；</p>
<p style="text-indent: 2em">第三部分——实现单点登录（Single Sign On）</p>
<p style="text-indent: 2em">第一部分如何运用 Form 表单认证</p>
<p style="text-indent: 2em">一、新建一个测试项目</p>
<p style="text-indent: 2em">为了更好说明，有必要新建一个测试项目（暂且为&#8220;FormTest&#8221;吧），包含三张页面足矣（Default.aspx、Login.aspx、UserInfo.aspx）。啥？有人不会新建项目，不会新增页面？你问我咋办？我看这么办好了：拖出去，打回原藉，从幼儿园学起&#8230;&#8230;</p>
<p style="text-indent: 2em">二、修改 Web.config</p>
<p style="text-indent: 2em">1、 双击项目中的Web.config（不会的、找不到的打 PP）</p>
<p style="text-indent: 2em">2、 找到下列文字&lt;authenticationmode="Windows"/&gt; 把它改成：</p>
<p style="text-indent: 2em">&lt;authenticationmode="Forms"&gt;</p>
<p style="text-indent: 2em">&lt;formslogi nUrl="Login.aspx"name=".ASPXAUTH"&gt;&lt;/forms&gt;</p>
<p style="text-indent: 2em">&lt;/authentication&gt;</p>
<p style="text-indent: 2em">3、 找到&lt;authorization&gt;&lt;allowusers="*"/&gt;&lt;/authorization&gt;换成</p>
<p style="text-indent: 2em">&lt;authorization&gt;&lt;denyusers="?"&gt;&lt;/deny&gt;&lt;/authorization&gt; </p>
<p style="text-indent: 2em">这里没什么好说的，只要拷贝过去就行。虽说如此，但还是有人会弄错，如下：</p>
<p style="text-indent: 2em">&lt;authenticationmode="Forms"&gt;</p>
<p style="text-indent: 2em">&nbsp;&nbsp; &lt;formslogin Url="Login.aspx"name=".APSX"&gt;&lt;/forms&gt;</p>
<p style="text-indent: 2em">&lt;denyusers="?"&gt;&lt;/deny&gt;</p>
<p style="text-indent: 2em">&lt;/authentication&gt;</p>
<p style="text-indent: 2em">若要问是谁把&lt;denyusers="?"&gt;&lt;/deny&gt;放入&lt;authentication&gt;中的，我会很荣幸地告诉你，那是 N 年前的我：&lt;authentication&gt;与&lt;authorization&gt;都是以auth字母开头又都是以ation结尾，何其相似；英文单词背不下来的我以为他们是一伙的&#8230;&#8230;</p>
<p style="text-indent: 2em">三、编写 .cs 代码——登录与退出</p>
<p style="text-indent: 2em">1、 登录代码：</p>
<p style="text-indent: 2em">a、 书本上介绍的</p>
<p style="text-indent: 2em">&nbsp;&nbsp; private void Btn_Login_Click(object sender, System.EventArgs e)</p>
<p style="text-indent: 2em">&nbsp;&nbsp; {</p>
<p style="text-indent: 2em">if(this.Txt_UserName.Text=="Admin" &amp;&amp; this.Txt_Password.Text=="123456")</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">&nbsp;&nbsp; System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false);</p>
<p style="text-indent: 2em">&nbsp;&nbsp; }</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">b、 偶找了 N 久才找到的</p>
<p style="text-indent: 2em">private void Btn_Login_Click(object sender, System.EventArgs e)</p>
<p style="text-indent: 2em">&nbsp;&nbsp; {</p>
<p style="text-indent: 2em">if(this.Txt_UserName.Text=="Admin" &amp;&amp; this.Txt_Password.Text=="123456")</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);</p>
<p style="text-indent: 2em">&nbsp;&nbsp; Response.Redirect("Default.aspx");</p>
<p style="text-indent: 2em">&nbsp;&nbsp; }</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">以上两种都可发放验证后的Cookie，即通过验证，区别：</p>
<p style="text-indent: 2em">方法 a) 指验证后返回请求页面，俗称&#8220;从哪来就打哪去&#8221;。比如：用户没登录前直接在 IE 地址栏输入http://localhost/FormTest/UserInfo.aspx，那么该用户将看到的是Login.aspx?ReturnUrl=UserInfo.aspx，输入用户名与密码登录成功后，系统将根据&#8220;ReturnUrl&#8221;的值，返回相应的页面</p>
<p style="text-indent: 2em">方法 b) 则是分两步走：通过验证后就直接发放Cookie，跳转页面将由程序员自行指定，此方法多用于Default.aspx 使用框架结构的系统。 </p>
<p style="text-indent: 2em">2、 退出代码：</p>
<p style="text-indent: 2em">private void Btn_LogOut_Click(object sender, System.EventArgs e)</p>
<p style="text-indent: 2em">&nbsp;&nbsp; {</p>
<p style="text-indent: 2em">System.Web.Security.FormsAuthentication.SignOut();</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">四、如何判断验证与否及获取验证后的用户信息</p>
<p style="text-indent: 2em">有的时候，在同一张页面需要判断用户是否已经登录，然后再呈现不同的布局。有人喜欢用Session来判断，我不反对此类做法，在此我只是想告诉大家还有一种方法，且看下面代码：</p>
<p style="text-indent: 2em">if(User.Identity.IsAuthenticated)</p>
<p style="text-indent: 2em">&nbsp;&nbsp; {</p>
<p style="text-indent: 2em">//你已通过验证，知道该怎么做了吧？</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">User.Identity还有两个属性AuthenticationType（验证类型）与Name（用户名称），大家要注意的是Name属性，此处的User.Identity.Name将得到，验证通过（RedirectFromLoginPage或SetAuthCookie）时，我们带入的第一个参数this.Txt_UserName.Text 。这个参数很重要，关系到种种&#8230;&#8230;种种的情况，何出此言，且听下回分解&#8230;&#8230;</p>
<p style="text-indent: 2em">第二部分 Form 认证的实战运用 </p>
<p style="text-indent: 2em">话说上回，简单地说了一下 Form 表单认证的用法。或许大家觉得太简单，对那些大内高手来说应该是&#8220;洒洒水啦&#8221;&#8220;小 Kiss 啦（小意思）&#8221;。今天咱们来点的花样吧：古有六扇门，拒收叶孤城；东门不刮风，吹雪姓西门；缎带作凭证，决战紫禁城。</p>
<p style="text-indent: 2em">五、Web.config 的作用范围</p>
<p style="text-indent: 2em">新建项目时， VS.Net 会在项目根目录建立一个内容固定的 Web.config。除了在项目根目录，你还可以在任一目录下建立 Web.config ，条件就是应用程序级别的节点只能在根目录的 Web.config 中出现。至于哪些是应用程序级别节点呢，这个问题嘛，其实我也不太清楚，呵呵。电脑不是我发明的，微软不是我创建的，C# 更不是我说了算的，神仙也有不知道的，所以我不晓得是正常的。话虽如此，只要它不报错，那就是对的。</p>
<p style="text-indent: 2em">关于 Web.config 设置的作用范围，记住以下两点：</p>
<p style="text-indent: 2em">1、 Web.config 的设置将作用于所在目录的所有文件及其子目录下的所有东东（继承：子随父姓）</p>
<p style="text-indent: 2em">2、 子目录下的 Web.config 设置将覆盖由父目录继承下来的设置（覆盖：县官不如现管）</p>
<p style="text-indent: 2em">给大家提个问题：有没有比根目录Web.config 的作用范围还大的配置文件呢？看完第三部分便知分晓。</p>
<p style="text-indent: 2em">六、学会拒绝与巧用允许</p>
<p style="text-indent: 2em">回到我们在第一回合新建的测试项目&#8220;FormTest&#8221;， 既然要进行验证，按国际惯例，就得有用户名与密码。那，这些用户是管理员自己在数据库建好呢，还是用户注册、管理员审核好呢。只要不是一般的笨蛋，都知道选择后者。你们还别说，我公司还真有个别项目是管理员连到数据库去建帐号的，属于比较特殊的笨蛋，咱们不学他也罢，还是老老实实添加两个页面吧——注册页面（Register.aspx）与审核页面（Auditing.aspx）。</p>
<p style="text-indent: 2em">问题终于就要浮出水面啦，当你做好Register.aspx时，想访问它的时候突然觉得不对劲，怎么又回到了登录页面？你仔细瞧瞧网址，是不是成了：Login.aspx?ReturnUrl=Register.aspx。怎么办，用户就是因为没有帐号才去访问注册页面的呀？（这句纯属废话，有帐号谁还跑去注册。）我时常对我的同事说：&#8220;办法是人想出来滴！！&#8221;</p>
<p style="text-indent: 2em">1、新建一个目录Public，用于存放一些公用的文件，如万年历、脚本呀&#8230;&#8230;</p>
<p style="text-indent: 2em">2、在&#8220;解决方案资源管理器&#8221;中右击点击目录Public，新增一个Web.config</p>
<p style="text-indent: 2em">3、把上述Web.config的内容统统删除，仅留以下即可：</p>
<p style="text-indent: 2em">&lt;?xmlversion="1.0"encoding="utf-8"?&gt;</p>
<p style="text-indent: 2em">&lt;configuration&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;&lt;allow users="*"/&gt;&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/configuration&gt;</p>
<p style="text-indent: 2em">终于切入正题了，不容易呀。根据&#8220;覆盖&#8221;原则，我们知道上述Web.config将替代根目录Web.config中的&lt;authorization&gt;节点设置，即：</p>
<p style="text-indent: 2em">&lt;allowusers="*"/&gt;替换&lt;denyusers="?"&gt;&lt;/deny&gt;</p>
<p style="text-indent: 2em">注解：&#8220;allow&#8221;允许的意思；&#8220;*&#8221;表示所有用户；</p>
<p style="text-indent: 2em">&#8220;deny&#8221;拒绝的意思；&#8220;?&#8221;表示匿名用户；</p>
<p style="text-indent: 2em">因此，处于Public目录下的文件，允许所有人浏览，包括未验证的用户。把Register.aspx拖进来吧，再也不会有人阻止你浏览啦。</p>
<p style="text-indent: 2em">除了注册页面，我们还提到一个审核页面（Auditing.aspx），审核权限一般都在管理员或主管手里，并不想让其他人浏览此页面（真理往往掌握在少数人的手里，这也是没法子的事），怎么办？&#8220;办法是人想出来滴&#8221;呵呵&#8230;&#8230;新建一个管理员的目录ManageSys，在此目录下再新增一个Web.config。内容如下：</p>
<p style="text-indent: 2em">&lt;?xmlversion="1.0"encoding="utf-8"?&gt;</p>
<p style="text-indent: 2em">&lt;configuration&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;</p>
<p style="text-indent: 2em">&lt;allow users="Admin"/&gt;</p>
<p style="text-indent: 2em">&lt;deny users="*"/&gt;</p>
<p style="text-indent: 2em">&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/configuration&gt;</p>
<p style="text-indent: 2em">现在的问题就是怎么才能知道谁是&#8220;Admin&#8221;呢，这个问题就有点象&#8220;我的鞋底有个洞&#8221;——天不知地知，你不知我知。闲话少说（要是有稿费多好，我就有多写几个字的动力，唉&#8230;&#8230;），大家还记得我在第一部分的结尾吗？什么，忘啦！罚你回去看一百遍，记住了再回来。站住，回来！一想到你的记性，我就不放心，第一部分的浏览网址是<a href="http://blog.csdn.net/cityhunter172/archive/2005/11/06/524043.aspx"><font color="#3354ae">http://blog.csdn.net/cityhunter172/archive/2005/11/06/524043.aspx</font></a>，回到此处的网址是<a href="http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx"><font color="#3354ae">http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx</font></a></p>
<p style="text-indent: 2em">好了，不管那些记不好的家伙了，大伙继续往下看。</p>
<p style="text-indent: 2em">System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);//通过验证，发放Cookie</p>
<p style="text-indent: 2em">之前我曾强调，要注意，第一个参数很重要，重要到什么程度？说到这，恐怕地球人都知道了——它就是allow与deny的依据。假如此处用户填写的是&#8220;Admin&#8221;即this.Txt_UserName.Text="Admin";那么进入系统后，他就能访问ManageSys目录下的网页了，其它闲杂人等一律拒之门外。</p>
<p style="text-indent: 2em">为巩固上述内容，给大伙留个课外作业：此项目有两部门使用，其中每个部门分别都有些特定的页面仅供本部门用户浏览使用，请问该如何使用Web.config达到效果？同样，答案在第三部分揭晓</p>
<p style="text-indent: 2em">七、分散与集中</p>
<p style="text-indent: 2em">乍看之下，就象是马克思列宁主义、***思想、***理论中的辩证关系，大伙放心，偶是学理科的，只明白&#8220;高举程序员的伟大旗帜，以编写代码为中心&#8221;。停&#8230;&#8230;</p>
<p style="text-indent: 2em">到目前为此，我们的测试项目&#8220;FormTest&#8221;已经拥有两个目录三个Web.config，伴随用户需求的多样化，Web.config也会越来越多，比如常用的文件上传功能等等。众多的Web.config分布在不同的目录里面，维护起来肯定比较烦人。能不能集中起来管理呢，应该咋办哩？&#8220;办法是&#8230;&#8230;&#8221;哟，有人先说出来啦。不错，&#8220;办法的确是人想出来滴&#8221;，我不说，你是不是只有在一边凉伴？开玩笑的，为了让更多的人记住这句话，我打算告诉你集中管理的办法。</p>
<p style="text-indent: 2em">要想集中管理，不得不用到&lt;location&gt;节点与path属性。在本项目中，我们将目录Public与ManageSys下的设置放在根目录下的Web.config里面，如下：</p>
<p style="text-indent: 2em">&lt;?xml version="1.0" encoding="utf-8"?&gt;</p>
<p style="text-indent: 2em">&lt;configuration&gt;</p>
<p style="text-indent: 2em">&lt;location path="Public"&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;</p>
<p style="text-indent: 2em">&lt;allow users="*"/&gt;</p>
<p style="text-indent: 2em">&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/location&gt;</p>
<p style="text-indent: 2em">&lt;location path="ManageSys"&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;</p>
<p style="text-indent: 2em">&lt;allow users="Admin"/&gt;</p>
<p style="text-indent: 2em">&lt;deny users="*"/&gt;</p>
<p style="text-indent: 2em">&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/location&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;!--这里放置原来根目录Web.config的内容，就不列出来了--&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/configuration&gt;</p>
<p style="text-indent: 2em">需要提醒的是</p>
<p style="text-indent: 2em">1、&lt;location&gt;节点的位置是在&lt;configuration&gt;的一个子节点，它与原有的&lt;system.web&gt;属于并列关系</p>
<p style="text-indent: 2em">2、&lt;location&gt;节点只需要放入对应子目录Web.config中的&lt;system.web&gt;的节点内容</p>
<p style="text-indent: 2em">八、额外的保护</p>
<p style="text-indent: 2em">第二部分就要结束了，现在时间已是凌晨4点50分，我容易嘛我。认证的目的就是为了防止他人非法浏览页面，或未经许可使用某些功能。当然，世上没有绝对的安全，如今MD5加密都被我们国人给破解了，就是最好的例证。</p>
<p style="text-indent: 2em">细心的人可能早就发现ASP.NET的安全认证只针对.aspx、.ascx&#8230;&#8230;等ASP.NET文件起作用，而对普通页面与文件却&#8220;视而不见&#8221;，如.htm、.js、.jpg等。通过以下步骤你就可以保护你想保护的文件类型。</p>
<p style="text-indent: 2em">1、打开Internet信息服务(IIS)管理器&#8594;右击本项目虚拟&#8594;属性，如下图</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm01.JPG"><font color="#3354ae">http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm01.JPG</font></a>)</p>
<p style="text-indent: 2em">2、点击按钮&#8220;配置&#8221;，出现如下对话框：</p>
<p style="text-indent: 2em">(<a href="http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm02.JPG"><font color="#3354ae">http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm02.JPG</font></a>)</p>
<p style="text-indent: 2em">3、双击.aspx的应用程序扩展&#8594;查看对话框内容，如下图：</p>
<p style="text-indent: 2em">(<a href="http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm03.JPG"><font color="#3354ae">http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm03.JPG</font></a>)</p>
<p style="text-indent: 2em">4、复制&#8220;可执行文件&#8221;的全路径名称后&#8594;点击&#8220;取消&#8221;返回上一层对话框&#8594;点击按钮&#8220;添加&#8221;</p>
<p style="text-indent: 2em">5、粘贴刚才复制的内容（我的系统装在D盘，所以内容为D:"WINDOWS"Microsoft.NET"Framework"v1.1.4322"aspnet_isapi.dll）&#8594;填写后缀名为.htm&#8594;填写动作限制为&#8220;GET,HEAD,POST,DEBUG&#8221;（为方便省事你可选全部）</p>
<p style="text-indent: 2em">6、最后点击&#8220;确定&#8221;&#8594;往项目中添加HtmlPage1.htm&#8594;在IE浏览器的地址栏直接输入http://localhost/FormTest/HtmlPage1.htm&#8594;观看测试效果</p>
<p style="text-indent: 2em">最后送大家一段Web.config设置，发完睡觉，实在是困的不行了。</p>
<p style="text-indent: 2em">&lt;location path="决战紫禁城"&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;</p>
<p style="text-indent: 2em">&lt;allow users="叶孤城"/&gt;</p>
<p style="text-indent: 2em">&lt;allow users="西门吹雪"/&gt;</p>
<p style="text-indent: 2em">&lt;deny users="*"/&gt;</p>
<p style="text-indent: 2em">&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/location&gt;</p>
<p style="text-indent: 2em">&lt;location path="金銮殿屋脊"&gt;</p>
<p style="text-indent: 2em">&lt;system.web&gt;</p>
<p style="text-indent: 2em">&lt;authorization&gt;</p>
<p style="text-indent: 2em">&lt;allow users="腰系缎带之人"/&gt;</p>
<p style="text-indent: 2em">&lt;deny users="*"/&gt;</p>
<p style="text-indent: 2em">&lt;/authorization&gt;</p>
<p style="text-indent: 2em">&lt;/system.web&gt;</p>
<p style="text-indent: 2em">&lt;/location&gt;</p>
<p style="text-indent: 2em">第三部分实现单点登录（SingleSignOn）</p>
<p style="text-indent: 2em">&#8220;等了好久终于等到今天，写了好久终于就快完结，但是网友的反应却让我有一些的伤心。盼了好久终于盼到今天，忍了好久终于把此文撰写，那些受冷落的无奈早就无所谓，累也不说累&#8221;（歌词《今天》新演绎）。看着人家的Blog文章的评论是一条接一条，再瞧瞧自己：&#8220;无人问津呐，真&#8230;无&#8230;奈&#8230;&#8230;唉，没人理我，还是回家吧。&#8221;&#8220;哎，还没开始写，怎么就走了？回去干什么呢？&#8221;回去写作业去啊，上回交待的课外作业你做了没？（注：<a href="http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx"><font color="#3354ae">http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx</font></a>在第二部分第六节布置的课外作业：此项目有两部门使用，其中每个部门分别都有些特定的页面仅供本部门用户浏览使用，请问该如何使用Web.config达到效果？）</p>
<p style="text-indent: 2em">不知有多少人做了作业，其实答案并不难。只需要在验证用户名与密码后，取得该用户的部门名称或部门代码，把它作为判断的依据就行了。最好不要用部门的数字ID，那样不利于以后的维护。</p>
<p style="text-indent: 2em">有一个秘密，一般人我不告诉他。Web.config中的&lt;location&gt;节点的path属性可以是一张具体页面的相对URL路径，如下：&lt;location path="ManageSys/Auditing.aspx"&gt;</p>
<p style="text-indent: 2em">好了，接下来就要揭开&#8220;比根目录Web.config的作用范围还大的配置文件&#8221;之谜啦，它就是藏匿在Windows系统目录下，支配整个.NetFramework配置的传说中的Machine.config！！下面请大家以热烈的掌声，欢迎我们这位神秘侠客的闪亮登场&#8230;&#8230;</p>
<p style="text-indent: 2em">九、Machine.config</p>
<p style="text-indent: 2em">Machine.config，性别不详，年龄未知，家庭出身：XML。深藏于&#8220;云深不知处&#8221;的操作系统目录下的某某地方（注：C:"WINDOWS【或WINNT】"Microsoft.NET"Framework"v1.1.4322【或v1.0.3705】"CONFIG），控制着&#8220;更上一层楼&#8221;的.NETFramework的本机配置。接下来简要的讲解一下它的内容，以及它与Web.config的关系。</p>
<p style="text-indent: 2em">经过&#8220;松下问童子&#8221;，我们好不容易找到这位隐者，打开一看，乖乖，足有3700多行！！&#8220;叫我怎么能不难过，偶只想看看是啥结构，可内容实在是太多太繁琐&#8230;&#8230;&#8221;还记得偶经常对同事说的一句话么：&#8220;办法是人想出来的！&#8221;它不是有三千七百多行吗，那我们就不管三七能否得出二十一啦，把它拷出来先。它不是XML出身吗，那咱们就还其正身，重新命名为&#8220;machine.xml&#8221;。接着用IE浏览器将这位改头换面的隐者打开，把节点与注释一一合拢。这回你看到了吧，是不是很有成就感？你要是想谢谢我，就让我看到你在此文下面的评论吧。多多益善，呵呵。</p>
<p style="text-indent: 2em">Machine.config与Web.config是啥关系？四个字——父子关系。记得我在第二部分第五节讲解Web.config作用范围的时提到两点——继承与覆盖（详见<a href="http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx"><font color="#3354ae">http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx</font></a>），在此也同样适用。</p>
<p style="text-indent: 2em">1、Machine.config中的设置将作用于运行在本机的所有站点及其虚拟目录，遇到子目录将一直继承下去。</p>
<p style="text-indent: 2em">2、Web.config中的设置将覆盖由Machine.config中继承下来的对应的节点设置</p>
<p style="text-indent: 2em">说到这，再告诉大家一个秘密——&#8220;世上本无秘密，知道的人多了，便成了不是秘密的秘密！&#8221;</p>
<p style="text-indent: 2em">a、Machine.config中的&lt;system.web&gt;节点所有内容都能出现在项目根目录下的Web.config中，也就是说能在Web.config中的内容已经在Machine.config中一一列出；</p>
<p style="text-indent: 2em">b、其中&lt;system.web&gt;节点下的&lt;pages&gt;还能出现在页面上，如：HTML视图下，在WebForm1.aspx的第一行加上&lt;pages&gt;的节点内容validateRequest="false"（此句意思是不对WebForm1.aspx页面文本框输入的值，是否包含&#8220;&lt;&#8221;&#8220;&gt;&#8221;等等具有危险性的代码进行检查，下一节将具体运用到）</p>
<p style="text-indent: 2em">&lt;%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="FromTest.WebForm1" validateRequest="false"%&gt;</p>
<p style="text-indent: 2em">十、单点登录（SingleSignOn）的前提条件</p>
<p style="text-indent: 2em">之前说了这么多关于Machine.config的事，都是为了实现单点登录作铺垫，那何为单点登录（SingleSignOn）？从字面理解就是在一个地方登录，通常运用于ASP.NET分布式环境中（跨单个服务器上的多个应用程序或在网络场中）的Forms身份验证。打个比方，就好比现在Sohu（搜狐）与Chinren（中国校友录）的做法，我在Sohu登录以后就不需要在Chinaren登录了。台湾与香港又把SingleSignOn称之为&#8220;单一登入&#8221;。</p>
<p style="text-indent: 2em">要想实现此功能，首要条件是需要一组用于加密与验证加密的密钥。它们位于Machine.config中，修改&lt;system.web&gt;节点下的&lt;machineKey&gt;节点属性，如下：</p>
<p style="text-indent: 2em">&lt;machineKey</p>
<p style="text-indent: 2em">firstKey="172"</p>
<p style="text-indent: 2em">copyrightKey="Cityhunter172"</p>
<p style="text-indent: 2em">validationKey="AD117F2F286CDCB15A9D1D4535E16DB0248026939**AUTHOR**CITYHUNTER172****WEBSITE**172*MEIBU*COM****MAILTO**CITYHUNTER172@126*COM*****F2F286CDCB15A9D1D4535E16DB0248026939"</p>
<p style="text-indent: 2em">secondKey="meibu"</p>
<p style="text-indent: 2em">decryptionKey="3C89AE62AD117F2F286CDCB15A9D1D4535E16DB0248026939" validation="SHA1"</p>
<p style="text-indent: 2em">thirdKey="com"</p>
<p style="text-indent: 2em">/&gt;</p>
<p style="text-indent: 2em">1、validationKey为用于验证加密数据的密钥。最小长度为40个字符（20字节），最大长度为128个字符（64字节）。</p>
<p style="text-indent: 2em">2、decryptionKey为用于加密数据的密钥。长度只有16个字符（8字节）与48个字符（24字节）两种。</p>
<p style="text-indent: 2em">3、validation为用数据验证使用的加密类型。拥有&#8220;SHA1&#8221;&#8220;MD5&#8221;&#8220;3DES&#8221;三种方法</p>
<p style="text-indent: 2em">4、大伙参照上述&lt;machineKey&gt;试着在WebForm1.aspx运行下列语句：</p>
<p style="text-indent: 2em">this.TextBox2.Text="ht"+"tp"+"://"+firstKey+"."+secondKey+"."+thirdKey</p>
<p style="text-indent: 2em">大家在修改之前请先备份一下Machine.config，到时要是出错可别怪我没提醒你。以上密钥并不是胡乱得来的，接下来向大家介绍生成密钥的方法。</p>
<p style="text-indent: 2em">我们把上一节中提到的WebForm1.aspx拖入本项目的Public目录下，再往页面上拖入一个TextMode=MultiLine的TextBox3与一个Button编写按钮事件与函数：</p>
<p style="text-indent: 2em">privatevoidButton1_Click(objectsender,System.EventArgse)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">stringdecStr=this.CreateKeyString(int.Parse(this.TextBox1.Text));</p>
<p style="text-indent: 2em">stringvalStr=this.CreateKeyString(int.Parse(this.TextBox2.Text));</p>
<p style="text-indent: 2em">this.TextBox3.Text=string.Format("&lt;machineKeyvalidationKey=""{0}""decryptionKey=""{1}""validation=""SHA1""/&gt;",valStr,decStr);</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">///&lt;summary&gt;</p>
<p style="text-indent: 2em">///生成加密型强随机Key值</p>
<p style="text-indent: 2em">///&lt;/summary&gt;</p>
<p style="text-indent: 2em">///&lt;paramname="i"&gt;Key的有效长度：</p>
<p style="text-indent: 2em">///decryptionKey的有效值为8或24；</p>
<p style="text-indent: 2em">///validationKay的有效值为20至64</p>
<p style="text-indent: 2em">///&lt;/param&gt;</p>
<p style="text-indent: 2em">privatestringCreateKeyString(inti)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">System.Security.Cryptography.RNGCryptoServiceProvider rng=newSystem.Security.Cryptography.RNGCryptoServiceProvider();//加密随机数生成器</p>
<p style="text-indent: 2em">byte[]bt=new byte[i];</p>
<p style="text-indent: 2em">rng.GetBytes(bt);//用加密型强随机值序列填充字节数组</p>
<p style="text-indent: 2em">System.Text.StringBuilder str=newSystem.Text.StringBuilder();</p>
<p style="text-indent: 2em">for(intj=0;j&lt;i;j++)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">str.Append(string.Format("{0:X2}",bt[j]));//转换成大写的十六进制文本</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">returnstr.ToString();</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">每次点击按钮生成密钥都不同，大家不妨多点几次。切换至HTML视图，到WebForm1.aspx第一行把validateRequest="false"去掉，然后再多点几次Button1试试，看看会有什么效果，嘿嘿&#8230;&#8230;&#8230;</p>
<p style="text-indent: 2em"></p>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/319231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-04-23 23:36 <a href="http://www.blogjava.net/jvict/articles/319231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Commons DbUtils 快速上手 </title><link>http://www.blogjava.net/jvict/articles/318674.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sun, 18 Apr 2010 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/318674.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/318674.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/318674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/318674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/318674.html</trackback:ping><description><![CDATA[<div><a href="http://java.chinaitlab.com/advance/796954.html">原文：http://java.chinaitlab.com/advance/796954.html</a><br />
另文：<a href="http://topmanopensource.javaeye.com/blog/348863">http://topmanopensource.javaeye.com/blog/348863</a><br />
Hibernate太复杂，iBatis不好用，JDBC代码太垃圾，DBUtils在简单与优美之间取得了完美平衡。</div>
<div>&nbsp;</div>
<div><strong>一、概述</strong></div>
<div>&nbsp;</div>
<div>DbUtils小巧的<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>数据库操作工具，它在JDBC的基础上做了科学的封装，旨在简化JDBC代码混乱与重复。</div>
<div>&nbsp;</div>
<div>对于JDBC代码，存在很多问题，算是对<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>的批判：</div>
<div>1、操作过程复杂，代码操作一个模式，大量的重复。</div>
<div>2、结果集难以处理，拿到一个ResultSet干屁啊，一个一个度，转称JavaBean，后来形成List，太麻烦了。</div>
<div>3、到处都强制检查SQLException，烦不烦啊，影响代码的美观和可读性。</div>
<div>&nbsp;</div>
<div>当然，以上的批判不是说JDBC设计不合理，二是缺乏更高层操作API的支持。因此才产生了众多的开源数据库操作的框架和工具包。</div>
<div>&nbsp;</div>
<div><strong>二、熟悉DBUtils的API</strong></div>
<div>&nbsp;</div>
<div>针对DBUitlsAPI的包，做个简单的翻译，以便迅速掌握API的使用。</div>
<div>
<div style="border-right: #aaaaaa 1px solid; padding-right: 5px; border-top: #aaaaaa 1px solid; padding-left: 5px; padding-bottom: 5px; border-left: #aaaaaa 1px solid; padding-top: 5px; border-bottom: #aaaaaa 1px solid; background-color: #fffafa">
<div>1、------------------------------------<br />
包org.apache.commons.dbutils <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DbUtils是一个为简化JDBC操作的小类库。</div>
<div>接口摘要<br />
ResultSetHandler 将ResultSet转换为别的对象的工具。<br />
RowProcessor 将ResultSet行转换为别的对象的工具。&nbsp; </div>
<div>类摘要<br />
BasicRowProcessor RowProcessor接口的基本实现类。 <br />
BeanProcessor BeanProcessor匹配列明到Bean属性名，并转换结果集列到Bean对象的属性中。<br />
DbUtils 一个JDBC辅助工具集合。 <br />
ProxyFactory 产生JDBC接口的代理实现。 <br />
QueryLoader 属性文件加载器，主要用于加载属性文件中的 SQL 到内存中。 <br />
QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。<br />
ResultSetIterator 包装结果集为一个迭代器。 <br />
&nbsp; <br />
2、------------------------------------<br />
包org.apache.commons.dbutils.handlers <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSetHandler接口的实现类 </div>
<div>类摘要<br />
AbstractListHandler 将ResultSet转为List的抽象类<br />
ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类<br />
ArrayListHandler 将ResultSet转换为List&lt;Object[]&gt;的ResultSetHandler实现类<br />
BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类<br />
BeanListHandler 将ResultSet转换为List&lt;JavaBean&gt;的ResultSetHandler实现类<br />
ColumnListHandler 将ResultSet的一个列转换为List&lt;Object&gt;的ResultSetHandler实现类<br />
KeyedHandler 将ResultSet转换为Map&lt;Map&gt;的ResultSetHandler实现类<br />
MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类<br />
MapListHandler 将ResultSet转换为List&lt;Map&gt;的ResultSetHandler实现类<br />
ScalarHandler 将ResultSet的一个列到一个对象。</div>
<div>&nbsp;</div>
<div>3、------------------------------------<br />
包org.apache.commons.dbutils.wrappers <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加java.sql类中功能包装类。</div>
<div>类摘要<br />
SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。<br />
StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。<br />
</div>
</div>
</div>
<div>&nbsp;</div>
<div><strong>三、环境</strong></div>
<div>&nbsp;</div>
<div>Java5</div>
<div>commons-dbutils-1.2-bin.zip</div>
<div>mysql-noinstall-5.1.40-win32.zip</div>
<div>mysql-connector-java-5.1.10.zip</div>
<div>&nbsp;</div>
<div><a class="channel_keylink" href="http://download.chinaitlab.com/" target="_blank">下载</a>地址：</div>
<div><u>http://apache.freelamp.com/commons/dbutils/binaries/commons-dbutils-1.2-bin.zip</u></div>
<div><u>http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/mysql-noinstall-5.1.40-win32.zip</u></div>
<div><u><a href="http://gd.tuwien.ac.at/db/mysql/Downloads/Connector-J/mysql-connector-java-5.1.10.zip">http://gd.tuwien.ac.at/db/mysql/Downloads/Connector-J/mysql-connector-java-5.1.10.zip</a></u></div>
<img src ="http://www.blogjava.net/jvict/aggbug/318674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-04-18 17:30 <a href="http://www.blogjava.net/jvict/articles/318674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>