﻿<?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-网摘-文章分类-Web</title><link>http://www.blogjava.net/jvict/category/33920.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 07 May 2010 00:17:49 GMT</lastBuildDate><pubDate>Fri, 07 May 2010 00:17:49 GMT</pubDate><ttl>60</ttl><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>0</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>FreeBSD 8 mysql apache php java整合</title><link>http://www.blogjava.net/jvict/articles/309446.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 14 Jan 2010 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/309446.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/309446.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/309446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/309446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/309446.html</trackback:ping><description><![CDATA[<strong>1.下载安装FreeBSD 8，ＤＶＤ１<br />
2.安装mysql 5 - 利用ports安装<br />
</strong><font size="2">cd /usr/ports/databases/mysql50-server/ <br />
make install clean # n长的编译过程 <br />
rehash <br />
mysql_install_db --user=mysql <br />
chown -R mysql /var/db/mysql/<br />
chgrp -R mysql /var/db/mysql/<br />
/usr/local/bin/mysqld_safe -user=mysql &amp;<br />
<br />
mysqld_safe－－MySQL服务器启动脚本 <br />
mysqld_safe是在Unix或是NetWare系统推荐使用来启动MySQL服务器的方法。mysqld_safe添加了许多安全的特征，例如，当发生错误时重新启动服务器，并且可以将运行时的信息写入错误日志文件<br />
<br />
<li>The port installation will put a script file mysql-server.sh<br />
in /usr/local/etc/rc.d which will has capability to start MySQL server.<br />
To enable MySQL server to start automatically after every FreeBSD<br />
server reboot, enter the following command in CLI:
<p><span style="color: red">echo &#8216;mysql_enable=&#8221;YES&#8221;&#8216; &gt;&gt; /etc/ rc.conf<br />
</span></p>
<p>mysqladmin -u root password newpassword (改变root帐户密码）<br />
</p>
<li>MySQL 5.0 installation done. <br />
------------------------------------------------------------------------<br />
<strong>3.安装 Apache Web Server 2.2<br />
</strong>Install Apache HTTP Server 2.20 by using FreeBSD Ports Collection: <br />
cd /usr/ports/www/apache22<br />
make install clean<br />
<li>A Apache HTTP Server script apache22.sh is located at<br />
/usr/local/etc/rc.d to provide Apache HTTP Server start and shutdown <font color="#333333">.</font> <br />
service. To enable Apache web server to automatically starts whenever<br />
after server reboots, issue the following command at CLI: <br />
<span style="color: red">echo &#8216;apache22_enable =&#8221;YES&#8221;&#8216; &gt;&gt; /etc/ rc.conf<br />
</span>
<li>To start Apache HTTP web server immediately, use: <br />
/usr/local/sbin/apachectl start<br />
or<br />
/usr/local/etc/rc.d/apache22.sh start<br />
<li>Apache installation finished. <br />
<br />
<strong>4.Installing PHP Hypertext Preprocessor Scripting Language 5 and PHP 5 Extensions<br />
</strong>
<li>Install by enter the following commands on FreeBSD OS command line,<br />
wait for previous command to finish before running the next command: cd /usr/ports/lang/php5<br />
make install clean<br />
<li>If you&#8217;re prompted, select &#8220;use Apache 2.x instead&#8221;. <br />
<li>Continue with the following commands to install PHP5 extensions and modules to enable the support of the modules in Apache: <br />
cd /usr/ports/lang/php5-extensions </font>make config<br />
<li>At Options for php5-extension 1.0 menu, select all PHP<br />
extensions and modules that you may use with Apache webserver. This is<br />
a part of the configuration for PHP, where you need to enable features<br />
of PHP that come in modules, such as ability to manage user sessions,<br />
interface with databases and many others. Default extensions such as<br />
ctype functions support, HASH Message Digest Framework support, session<br />
support and etc have been selected. Other popular extensions that you<br />
most likely to be in used are MySQL database support and GD library<br />
support. Use space bar to select or unselect the extensions and press<br />
Enter when done.
<li>Continue the installation of php5-extensions with the following commands: <br />
make install clean<br />
<li>If there are any message the pops up and prompts you to select<br />
some options or configurations, you can just accept the default<br />
settings by pressing Enter. Some modules that may prompt you for action&nbsp; <br />
include php5-gd, php5-mbstring and php5-sqlite.
<li>Edit the Apache configuration file in order to enable Apache web server to load the PHP modules when initialization: <br />
<li>Go to Apache configuration file location by cd /usr/local/etc/apache2/ <br />
<li>Edit Apache configuration file by vi httpd.conf <br />
<li>Search for LoadModule lines, after the last LoadModule line, but within the same section, add the following 2 lines: <br />
AddType application/x- httpd-php .php<br />
AddType application/x- httpd-php-source .phps<br />
<li>Optionally, copy /usr/local/etc/php.ini-recommended or<br />
/usr/local/etc/php.ini-dist to /usr/local/etc/php.ini (in same<br />
directory), which will enable you to tune and change the default<br />
settings of behaviours of PHP.
<li>Start the Apache HTTP web server by using apachectl start<br />
(or restart Apache HTTP web server by using apachectl restart).<br />
apachectl is located in /usr/local/sbin, if you encounter Command not<br />
found problem, try to change directory to its location.
<li>PHP5 installation done. <font color="#333333">。</font> <br />
A web server has been setup with the FreeBSD with Apache, MySQL and<br />
PHP. The document root of the web server (where you should put your<br />
HTML and PHP files is at /usr/local/www/apache22/data/ and you will<br />
need a SecureFTP (SFTP) client such as WinSCP to upload your files to<br />
web server securely.
<p><br />
<strong>5.安装php后若apache不能启动：<br />
</strong>在 FreeBSD 下安装 apache22 会出现类似的 warming:<br />
No such file or directory: Failed to enable the 'httpready' Accept Filter</p>
<p>解决方案：<br />
#kldload accf_http并在 /boot/defaults/loader.conf 中加入下面 2 行，以便下次启动自动装载模块<br />
accf_data_load="YES"<br />
accf_http_load="YES"<br />
<br />
<strong>问题</strong><br />
[root@freebsd ~]# apachectl -t<br />
httpd: Could not reliably determine the server's fully qualified domain name, using freebsd.web for ServerName</p>
<p>解决方案：<br />
vi /usr/local/etc/apache22/httpd.conf<br />
添加这么一行：<span style="color: red">ServerName 127.0.0.1:80</span></p>
</li>
<img src ="http://www.blogjava.net/jvict/aggbug/309446.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-01-14 13:47 <a href="http://www.blogjava.net/jvict/articles/309446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] PHP5及Discuz的附件大小限制修改</title><link>http://www.blogjava.net/jvict/articles/261540.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 23 Mar 2009 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/261540.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/261540.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/261540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/261540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/261540.html</trackback:ping><description><![CDATA[建的论坛上传附件的时候发现文件大了传不上,最大只能是2M.
<p>我的论坛是用Discuz!6.0.0建立的,在Windows下用Apache+Mysql+php。没改太多的配置.</p>
<p>出现了这个问题,我到网上找了些解决方法,但都没修改成功,到学校内的一个论坛上发了个帖子,很快有人帮我解决了这个问题,我就整理下,写在这里.</p>
<p>首先需要在PHP.ini里设置以下几项:<br />
1. post_max_size =10M </p>
<p>表单提交最大数据为10M.此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的.<br />
限制范围包括表单提交的所有内容.例如:发表贴子时,贴子标题,内容,附件等...</p>
<p>2.file_uploads = On&nbsp;&nbsp;</p>
<p>是否允许上传文件,如果为OFF您将不能上传文件.</p>
<p>3.upload_tmp_dir = "D:/APM/PHP/uploadtemp/"&nbsp;&nbsp;</p>
<p>上传文件时系统使用的缓存目录.如果此目录所在磁盘空间不足的话您将不能上传文件.</p>
<p>4.upload_max_filesize =2M </p>
<p>最大上传文件大小,此项针对上传文件时单个文件的大小.</p>
<p>与post_max_size之间的关系:<br />
在论坛发表贴子时,您post_max_size 设为10M,而此项设成了2M,那么您只能上传最大为2M的附件,且可以同时上传5个.</p>
<p>注意:很多人遇到修改php.ini后重应WEB服务后仍然不能生效.这种情况应该先确认一下所改的php.ini是不是当前PHP所使用的.<br />
您可以在WEB目录下建立一个php文件,内容很简单就一句话 </p>
<p>为了确定让更改有效，我重启了Apache。</p>
<p>然后在到"用户管理"----&gt;分组与级别下的"用户组"---&gt;系统用户组---&gt;点击每个用户组的详情编辑，找到附件相关的&#8220;最大附件尺寸(字节):&#8221;修改就行了。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/261540.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> 2009-03-23 16:15 <a href="http://www.blogjava.net/jvict/articles/261540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET会话（Session）保存模式</title><link>http://www.blogjava.net/jvict/articles/250421.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 07 Jan 2009 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/250421.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/250421.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/250421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/250421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/250421.html</trackback:ping><description><![CDATA[<p>引发 Session 丢失的几种原因<br />
动过手写代码的人都知道，Session 丢失是比较常见的事。以下是本人这几年所遇到的，能够引发 Session 丢失的原因，不敢说是百分百，丢失概率还是特别高的。错&#8230;，简直可以说是&#8220;相&#8230;当&#8230;&#8221;高哇 ^_^"</p>
<p>1、&nbsp;&nbsp;&nbsp; 存放 Session 的电脑重启（废话，若这样都不丢，你神仙啊）</p>
<p>2、&nbsp;&nbsp;&nbsp; InProc 模式：aspnet_wp.exe 或 w3wp.exe 在&#8220;任务管理器&#8221;中或其它情况下导致其进程被终止运行。</p>
<p>3、&nbsp;&nbsp;&nbsp; InProc 模式：修改 .cs 文件后，编译了两次（只编译一次，有时不会丢失）</p>
<p>4、&nbsp;&nbsp;&nbsp; InProc 模式：修改了 Web.config</p>
<p>5、&nbsp;&nbsp;&nbsp; InProc 模式，Windows 2003 环境：应用程序池回收、停止后重启</p>
<p>6、&nbsp;&nbsp;&nbsp; InProc 模式：服务器上 bin 目录里的 .dll 文件被更新</p>
<p>以上列举的都是 InProc 模式下，容易引发解析 ASP.NET 应用程序重置的原因。是不是觉得很窝火？之前我也有这种感觉，慢慢就习惯啦，再后来就干脆不用这种模式了。于是乎，就有了使用下列两种模式的尝试，现写出来与大家一起分享。</p>
<p>二、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用 StateServer 保存 Session</p>
<p>StateServer 模式的实质是，把Session 存放在一个单独的进程里，此进程独立于 aspnet_wp.exe 或 w3wp.exe 。启用此服务后，在&#8220;任务管理器&#8221;中可以看到一个名为 aspnet_state.exe 的进程，下面开始说明一下设置的具体步骤：</p>
<p>&nbsp;</p>
<p>1、&nbsp;&nbsp;&nbsp; 修改注册表（关键步骤，如下图）</p>
<p>运行 regedit &#8594; 打开注册表 &#8594; 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters 节点 &#8594; 将 AllowRemoteConnection 的键值设置成&#8220;1&#8221;（1 为允许，0 代表禁止）&#8594; 设置 Port (端口号)</p>
<p>注意事项：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a)、若ASP.NET State Service 正在运行，修改注册表内容后，则需要重新启动该服务</p>
<p>b)、注意端口号的键值是以十六进制储存的，可以使用十进制进行修改，42424 是默认的端口</p>
<p>c)、AllowRemoteConnection 的键值设置成&#8220;1&#8221;后，意味着允许远程电脑的连接，也就是说只要知道你的服务端口，就可享用你的ASP.NET State Service，即把 Session 存放在你的电脑进程内，因此请大家慎用；键值为&#8220;0&#8221;时，仅有stateConnectionString 为&#8220;tcpip=localhost: 42424&#8221;与&#8220;tcpip=127.0.0.1:42424&#8221;的情况，方可使用ASP.NET State Service<br />
2、&nbsp;&nbsp;&nbsp; 开启 ASP.NET State Service（如下图）</p>
<p>右键点击&#8220;我的电脑&#8221;&#8594; 管理 &#8594; 服务与应用程序 &#8594; 服务 &#8594; 双击&#8220;ASP.NET State Service&#8221; &#8594; 启动（可设为&#8220;自动&#8221;）</p>
<p>说明：只要安装了 .Net Framework v1.0/v1.1 ，都拥有此服务<br />
、&nbsp;&nbsp;&nbsp; 更改 Web.config</p>
<p>打开 Web.config &#8594; 找到 &lt;sessionState&gt; 节点内容</p>
<p>&lt;sessionState </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode="InProc"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stateConnectionString="tcpip=127.0.0.1:42424"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieless="false" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeout="20" /&gt;</p>
<p>&nbsp;</p>
<p>&#8594; 将其改为以下内容</p>
<p>&lt;sessionState mode="StateServer"&nbsp; stateConnectionString="tcpip=192.168.0.2:42424" timeout="20" /&gt;</p>
<p>注意事项：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a)、设成StateServer 后，必须要有对应的stateConnectionString </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b)、注意 IP 地址（可以是远程计算机 IP、计算机名称、域名）与端口号，端口号需与ASP.NET State Service 的服务端口一致</p>
<p>&nbsp;</p>
<p>三、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将 Session 放入 SQLServer 保存</p>
<p>SQLServer 模式就是，把Session 存放在 SQL Server 数据库里（注意不是 Oracle ，动动脚趾都能猜到原因啦），下面开始说明一下设置的具体步骤：</p>
<p>&nbsp;</p>
<p>1、&nbsp;&nbsp;&nbsp; 启动相关的数据库服务（如图）</p>
<p>运行SQL Server 服务管理器 &#8594; 启动 SQL Server （最好设为开机自动运行） &#8594; 启动 SQL Server Agent 服务（最好设为开机自动运行）</p>
<p>注意事项：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a)、注意启动顺序，也可通过下列方式设置： 右键点击&#8220;我的电脑&#8221;&#8594; 管理 &#8594; 服务与应用程序 &#8594; 服务 &#8594; 找到&#8220;MSSQLSERVER&#8221;与&#8220;SQLSERVERAGENT&#8221; &#8594; 启动并设置启动类型为&#8220;自动&#8221;</p>
<p>b)、SQL Server Agent在此处的作用是清除数据库中已过期的 Session</p>
<p>2、&nbsp;&nbsp;&nbsp; 建立存放 Session 的 DataBase</p>
<p>运行&#8220;SQL 查询分析器&#8221;&#8594; 使用&#8220;sa&#8221;或是拥有&#8220;master&#8221;的 db_owner 权限的用户登录数据库 &#8594; 打开查询文件 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\InstallSqlState.sql （存放在 Windows 系统目录的 .Net 安装目录下可找到） &#8594; 直接运行该 sql 脚本 &#8594; 刷新数据库即可看到名为 ASPState 的 DataBase</p>
<p>3、&nbsp;&nbsp;&nbsp; 建立连接数据库 ASPState 的用户，并为此用户授权（此步骤可跳过）</p>
<p>进行此步的原因是：一是不想在 Web.config 中出现 sa 的密码；二是 tempdb 在数据库启动后仅保留 sa 一个帐号的使用权限，其余帐号的权限统统被清除，但保存 Session又需要用到此 DataBase；</p>
<p>&nbsp;</p>
<p>A)、运行 SQL Server 的企业管理器 &#8594; 展开数据库的安全性 &#8594; 右击&#8220;登录&#8221; &#8594; 新建&#8220;登录&#8221; &#8594; 输入&#8220;名称&#8221; &#8594; 选择 &#8220;SQL Server 身份验证&#8221; &#8594; 输入&#8220;密码&#8221; &#8594; 指定&#8220;数据库&#8221; &#8594; 点击&#8220;数据库访问&#8221; &#8594; 勾选 &#8220;ASPState&#8221; &#8594; 选中&#8220;db_owner&#8221;角色 &#8594; 点击&#8220;确定&#8221; &#8594; 再一次输入&#8220;密码&#8221; &#8594; 点击&#8220;确定&#8221; 后即可建立 ASPState 的用户（此处建立名为&#8220;SessionStateUser&#8221;，密码为&#8220;123456&#8221;的测试用户）</p>
<p>B)、运行 SQL Server 的企业管理器 &#8594; 展开&#8220;管理&#8221; &#8594; 展开&#8220;SQL Server 代理&#8221; &#8594; 右击&#8220;作业&#8221; &#8594; 点击&#8220;新建作业&#8221; &#8594; 输入 &#8220;名称&#8221;（此例为 GrantSessionUser ） &#8594; 点击标签 &#8220;步骤&#8221; &#8594; 新建 &#8594; 输入 &#8220;步骤名&#8221;（此例为 Grant01） &#8594; 选择数据库&#8220;tempdb&#8221; &#8594; 编写 SQL 脚本&#8220;exec sp_adduser 'SessionStateUser', 'SessionUser' ,'db_owner' &#8221;&#8594; 确定 &#8594; 点击标签 &#8220;调度&#8221; &#8594; 新建 &#8594; 输入 &#8220;名称&#8221;（此例为 Start01 ）&#8594; 选择类型&#8220;SQL Server 代理启动时自动启动&#8221; &#8594; 确定 &#8594; 最后点击&#8220;确定&#8221;新增完毕</p>
<p>C）、也可运行以下脚本一次性搞定以上 A、B 两个步骤</p>
<p>/******脚本开始******/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --新建数据库帐号 SessionStateUser ，默认登录 ASPState</p>
<p>EXEC sp_addlogin 'SessionStateUser', '123456', 'ASPState'</p>
<p>&nbsp;</p>
<p>use ASPState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --切换 DataBase</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --将 SessionStateUser 授予 db_owner 的权限</p>
<p>exec sp_adduser 'SessionStateUser', 'SessionUser' ,'db_owner'</p>
<p>&nbsp;</p>
<p>use master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --切换 DataBase</p>
<p>&nbsp;</p>
<p>BEGIN TRANSACTION&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /******声明变量******/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; DECLARE @JobID BINARY(16)&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; DECLARE @ReturnCode INT&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; SELECT @ReturnCode = 0&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; -- 若没有，则添加作业的分类</p>
<p>&nbsp;&nbsp;&nbsp; IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') &lt; 1 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; -- 新建作业</p>
<p>&nbsp;&nbsp;&nbsp; EXECUTE @ReturnCode = msdb.dbo.sp_add_job&nbsp;&nbsp; --调用存储过程 sp_add_job</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @job_id = @JobID OUTPUT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --将返回的 JobID，赋值给变量</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @job_name = N'GrantSessionUser',&nbsp;&nbsp; --作业名称</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @owner_login_name = NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --默认为当前用户所有</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @description = null, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @category_name = N'[Uncategorized (Local)]',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --作业分类归属</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @enabled = 1,&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; @notify_level_email = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @notify_level_page = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @notify_level_netsend = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @notify_level_eventlog = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @delete_level= 0</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback --出错则回滚</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; -- 新建步骤</p>
<p>&nbsp;&nbsp;&nbsp; EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep --调用存储过程 sp_add_jobstep</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @job_id = @JobID,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --传入刚刚新建的 JobID</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @step_id = 1, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @step_name = N'Grant01',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --步骤名称</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @command = N'exec sp_adduser ''SessionStateUser'', ''SessionUser'' ,''db_owner''', </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --需要执行的 SQL 脚本（注意用两个连续的单引号表示 SQL 中的单引号）</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @database_name = N'tempdb', --执行上述 SQL 所用的 DataBase</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @server = N'', </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @database_user_name = N'', </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @subsystem = N'TSQL',&nbsp;&nbsp;&nbsp; --执行类型为&#8220;Transact-SQL 脚本&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @cmdexec_success_code = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @flags = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @retry_attempts = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @retry_interval = 1, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @output_file_name = N'', </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @on_success_step_id = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @on_success_action = 1, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @on_fail_step_id = 0, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @on_fail_action = 2</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback </p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; -- 新建调度</p>
<p>&nbsp;&nbsp;&nbsp; EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @job_id = @JobID, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @name = N'Start01',&nbsp;&nbsp; --调度名称</p>
<p><br />
该文章转载自德仔工作室：http://www.dezai.cn/article_show.asp?ArticleID=20551</p>
<p>@enabled = 1, </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @freq_type = 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&#8220;64&#8221;表示 当 SQLServerAgent 服务启动时运行</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback </p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; -- 将新建的作业添加到本地数据库</p>
<p>&nbsp;&nbsp;&nbsp; EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)' </p>
<p>&nbsp;&nbsp;&nbsp; IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback </p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; COMMIT TRANSACTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; GOTO&nbsp;&nbsp; EndSave&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>QuitWithRollback:</p>
<p>&nbsp;&nbsp;&nbsp; IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION </p>
<p>EndSave:</p>
<p>/******脚本结束******/</p>
<p>&nbsp;</p>
<p>4、&nbsp;&nbsp;&nbsp; 设置 Web.config 内容</p>
<p>打开 Web.config &#8594; 找到 &lt;sessionState&gt; 节点内容 &#8594; 修改为以下内容即可：</p>
<p>&lt;sessionState mode="SQLServer"&nbsp; sqlConnectionString ="data source=192.168.0.2; user id= SessionStateUser; password=123456" timeout="20" /&gt;</p>
<p>注意事项：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a)、sqlConnectionString 中不能出现 initial catalog 选项</p>
<p>b)、SQL Server Agent在此处的作用是清除数据库中已过期的 Session</p>
<p>c）、你若跳过了第三步，则 user id 需要用 sa 进行登录</p>
<p>d）、若sqlConnectionString 为 &#8220;data source=127.0.0.1;Trusted_Connection=yes&#8221;，则使用本地计算机ASPNET（Windows 2000 系统帐户）或 Network Service（Windows 2003 系统帐户）的身份登录数据库。要是数据库不允许上述用户登录，则报错；同样，即使上述帐户能成功登录，也要分配其 tempdb 的权限，理由是 Session 是保存在 tempdb 中的，若没有该 DataBase 的存取权限是行不滴</p>
<p><br />
该文章转载自德仔工作室：http://www.dezai.cn/Article_Show.asp?ArticleID=20551&amp;ArticlePage=2</p>
<img src ="http://www.blogjava.net/jvict/aggbug/250421.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> 2009-01-07 22:42 <a href="http://www.blogjava.net/jvict/articles/250421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET SESSION丢失问题解决方案</title><link>http://www.blogjava.net/jvict/articles/250417.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 07 Jan 2009 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/250417.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/250417.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/250417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/250417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/250417.html</trackback:ping><description><![CDATA[<p><span style="font-weight: bold; font-size: 20px; color: black; background-color: transparent">Session丢失的解决办法小结</span> <br />
<br />
<span style="font-weight: bold; font-size: 20px; color: black; background-color: transparent">SessionState 的Timeout)，其主要原因有三种</span> <br />
<br />
一：有些杀病毒软件会去扫描您的Web.Config文件，那时<a class="SearchKeyword">Session</a>肯定掉，这是微软的说法。 <br />
二:程序内部里有让<a class="SearchKeyword">Session</a>掉失的代码，及服务器内存不足产生的。 <br />
三：程序有框架页面和跨域情况。 <br />
<br />
第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它) <br />
第二种是检查代码有无<a class="SearchKeyword">Session</a>.Abandon()之类的。 <br />
第三种是在Window服务中将ASP.NET State Service 启动。 <br />
<br />
<br />
一：在第一个页面置了<a class="SearchKeyword">SESSION</a>，然后REDIRECT去第二个页面。解决方法是在REDIRECT中设置endResponse为FALSE。 <br />
<br />
二： ASP.NET中使用了ACCESS数据库，而且数据库是放在bin目录中的。解决方法是不要放会更新的文件在BIN目录中。 <br />
<br />
参考：<a class="Url" href="http://www.dotnet247.com/247reference/msgs/58/290316.aspx">http://www.dotnet247.com/247reference/msgs/58/290316.aspx</a> <br />
<br />
<br />
<span style="font-weight: bold; font-size: 20px; color: black; background-color: transparent">Asp.net 默认配置下，Session莫名丢失的原因及解决办法</span> <br />
&nbsp;&nbsp; <br />
<br />
正常操作情况下<a class="SearchKeyword">Session</a>会无故丢失。因为程序是在不停的被操作，排除<a class="SearchKeyword">Session</a>超时的可能。另外，<a class="SearchKeyword">Session</a>超时时间被设定成60分钟，不会这么快就超时的。 <br />
<br />
这次到CSDN上搜了一下帖子，发现好多人在讨论这个问题，然后我又google了一下，发现微软网站上也有类似的内容。 <br />
<br />
现在我就把原因和解决办法写出来。 <br />
<br />
<br />
<span style="font-weight: bold; font-size: 20px; color: black; background-color: transparent">原因：</span> <br />
<br />
由于Asp.net程序是默认配置，所以Web.Config文件中关于<a class="SearchKeyword">Session</a>的设定如下： <br />
&lt;<a class="SearchKeyword">session</a>State mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/&gt; <br />
<br />
我们会发现<a class="SearchKeyword">session</a>State标签中有个属性mode，它可以有3种取值：InProc、StateServer?SQLServer（大小写敏感） 。默认情况下是InProc，也就是将<a class="SearchKeyword">Session</a>保存在进程内（IIS5是aspnet_wp.exe，而IIS6是W3wp.exe），这个进程不稳定，在某些事件发生时，进程会重起，所以造成了存储在该进程内的<a class="SearchKeyword">Session丢失</a>。 <br />
<br />
<span style="font-weight: bold; font-size: 20px; color: black; background-color: transparent">解决办法：</span> <br />
<br />
前面说到的<a class="SearchKeyword">session</a>State标签中mode属性可以有三个取值，除了InProc之外，还可以为StateServer、SQLServer。这两种存<a class="SearchKeyword">Session</a>的方法都是进程外的，所以当aspnet_wp.exe重起的时候，不会影响到<a class="SearchKeyword">Session</a>。 <br />
<br />
现在请将mode设定为StateServer。StateServer是本机的一个服务，可以在系统服务里看到服务名为ASP.NET State Service的服务，默认情况是不启动的。当我们设定mode为StateServer之后，请手工将该服务启动。 <br />
<br />
这样，我们就能利用本机的StateService来存储<a class="SearchKeyword">Session</a>了，除非电脑重启或者StateService崩掉，否则<a class="SearchKeyword">Session</a>是不会丢的（因<a class="SearchKeyword">Session</a>超时被丢弃是正常的）。 <br />
<br />
除此之外，我们还可以将<a class="SearchKeyword">Session</a>通过其他电脑的StateService来保存。具体的修改是这样的。同样还在<a class="SearchKeyword">session</a>State标签中，有个stateConnectionString='tcpip=127.0.0.1:42424'属性，其中有个ip地址，默认为本机（127.0.0.1），你可以将其改成你所知的运行了StateService服务的电脑IP，这样就可以实现位于不同电脑上的Asp.net程序互通<a class="SearchKeyword">Session</a>了。 <br />
<br />
如果你有更高的要求，需要在服务期重启时<a class="SearchKeyword">Session</a>也不丢失，可以考虑将mode设定成SQLServer，同样需要修改sqlConnectionString属性。关于使用SQLServer保存<a class="SearchKeyword">Session</a>的操作，请访问这里。 <br />
<br />
在使用StateServer或者SQLServer存储<a class="SearchKeyword">Session</a>时，所有需要保存到<a class="SearchKeyword">Session</a>的对象除了基本数据类型（默认的数据类型，如int、string等）外，都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。</p>
<p><strong>理解Session State模式<br />
<br />
<span style="text-decoration: underline">存储位置</span></strong></p>
<p>InProc：session在服务器中以活动对象方式存储（aspnet_wp.exe）<br />
<br />
StateServer: session被序列化并保存在单独的aspnet_state.exe的内存中。StateServer能够运行在另一台服务器上<br />
<br />
SQLServer: session被序列化并保存在SQL Server中<br />
<br />
性能：<br />
<font color="#ff0000">InProc：最快</font>，但是session数据越多，web服务器上消耗的内存也越多，它可能影响性能。<br />
<br />
StateServer：当存储基本类型（如string,integer等）数据时，在同一个测试环境中它比<font color="#ff0000">InProc慢15%</font>。如果你存储大量对象，序列化和反序列化可能影响到性能</p>
<p>SQLServer：当存储基本类型（如string,integer等）数据时，在同一个测试环境中它比<font color="#ff0000">InProc慢25%</font>。它也有与StateServer一样的序列化性能问题。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/250417.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> 2009-01-07 22:09 <a href="http://www.blogjava.net/jvict/articles/250417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008切换设计视图假死的解决办法</title><link>http://www.blogjava.net/jvict/articles/249714.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sun, 04 Jan 2009 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249714.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249714.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249714.html</trackback:ping><description><![CDATA[<p>原文: http://blog.csdn.net/cngkqy/archive/2008/12/24/3597082.aspx<br />
<br />
原来有一段时间经常碰到这个问题，搞的我疯狂的重做系统，被折腾的不清，最后也没有搞清楚到底是什么因为造成的，只是重做了好几次系统之后，自己莫名其妙的又不出了。今天在网上搜资料无意中又搜到了这个问题的贴子，发现这里边提到的腾讯通、Office2008插件原因我都弄过，可能就是这两个当中当中的一个原因，或是混合原因。赶紧先把帖子转进来，防止以后再走弯路。。。</p>
<p>&nbsp;</p>
<p>VS2008刚刚出来的时候，安装过一次，一段时间没用，后来打开WebApplication的时候，一点设计，VS2008IDE就死掉。后来就删除了。最近打算用VS2008，就又开始安装了。<br />
第一次安装：用的是电脑公司克隆版9，克隆好系统就安装VS2008，启动空WebApplication点设计就死。<br />
到网上查找，有不少提出这个问题的，但是没有解决方案。<br />
又下载了一个YLMF克隆版，克隆好就安装VS2008，测试没有问题。可把需要的软件安装好之后，点设计又死。<br />
下面是痛苦的历程，多次的克隆，安装，不过功夫不负有心人，确定了问题的原因，安装了RTX2006（腾讯通）之后，导致了VS2008 WEB设计假死。<br />
<br />
罪魁祸首确定之后，就是查找RTX2006安装程序做了什么。又经过了几个小时的折腾，最后确定原因出在注册表中的一个键值上面。<br />
<br />
<strong>原键值</strong>：<br />
<font face="Verdana">[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{F5078F18-C551-11D3-89B9-0000F81FE221}\5.0\0\win32]<br />
@="C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\msxml5.dll"<br />
<br />
<strong>安装RTX2006后</strong>：<br />
<font face="Verdana">[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{F5078F18-C551-11D3-89B9-0000F81FE221}\5.0\0\win32]<br />
@="C:\\Program Files\\Common Files\\Tencent\\MSXML5.dll"</font><br />
<br />
如果这个键值不为C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\msxml5.dll，启动VS2008 的WEB设计界面就假死。<br />
不知道没有安装OFFICE2003的机器上安装VS2008这个键值是什么？</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana">原贴地址：<a href="http://www.cnblogs.com/onecool/archive/2008/09/11/1242950.html">http://www.cnblogs.com/onecool/archive/2008/09/11/1242950.html</a></font></p>
<p>--------------------------------------------------------------------------------------------------------</p>
<p><font style="background-color: #c7edcc">家里电脑上安装了vs2008,之前没装其他版本的vs,最近在使用webform窗体的时候发现不能切换到设计视图了,一点切换vs就卡死,网上搜索了一下 除了重装vs2008 没有发现其他解决办法,发现vs2005也有这个问题,vs2005的解决办法是<a href="http://www.cnblogs.com/abeen/archive/2007/02/04/639871.html"><u><font color="#0000ff">http://www.cnblogs.com/abeen/archive/2007/02/04/639871.html</font></u></a><br />
对vs2008不起作用,说下vs2008解决办法:<br />
把C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller\setup.exe删除或改名<br />
<br />
重启vs,问题解决<br />
<br />
不知道为什么vs切换到设计视图的时候就运行到这个setup.exe,很诡异,看来是跟office 2007 有冲突 本来电脑上没有安装office 2007,一次需要打开.docx,安装了一个相关插件,结果引来这个麻烦事,写下来希望对遇到同样问题的人有点帮助</font></p>
<p><font style="background-color: #c7edcc"></font>&nbsp;</p>
<img src ="http://www.blogjava.net/jvict/aggbug/249714.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> 2009-01-04 12:13 <a href="http://www.blogjava.net/jvict/articles/249714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景</title><link>http://www.blogjava.net/jvict/articles/249011.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 29 Dec 2008 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249011.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249011.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249011.html</trackback:ping><description><![CDATA[<p>过去的几个星期内，我一直在写着讨论我们正在开发的新ASP.NET MVC框架的系列贴子。ASP.NET MVC框架是个你可以用来结构化你的ASP.NET web应用，使之拥有清晰的关注分离，方便你单元测试代码和支持TDD流程的可选方法。 </p>
<p>这个系列的<a href="http://blog.joycode.com/scottgu/archive/2007/11/14/111385.aspx" target="_blank"><font color="#087da8">第一篇</font></a>建造了一个简单的电子商务产品列表/浏览网站。它讨论了MVC后面的高层次的概念，示范了如何从头创建一个新的ASP.NET MVC项目，实现和测试这个电子商务产品列表功能。系列的<a href="http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx" target="_blank"><font color="#087da8">第二篇</font></a>对ASP.NET MVC框架的URL路径选择（routing）架构做了深入探讨，讨论了它的工作原理以及你如何使用它来处理更高级的URL路径选择场景。 <a href="http://blog.joycode.com/scottgu/archive/2007/12/07/112355.aspx" target="_blank"><font color="#087da8">第三篇</font></a>讨论了控制器是如何与视图做交互的，特别地讨论了你可以把视图数据从控制器传给视图以显示返回到客户端的回复的各种方法。 </p>
<p>在今天的帖子里，我将讨论你可以用MVC框架来处理表单输入和提交场景的各种方法，以及讨论一些你可以用来简化数据编辑场景的HTML辅助方法。<a href="http://www.scottgu.com/blogposts/mvc4/mvcapplication5.zip" target="_blank"><font color="#087da8">点击这里</font></a>下载我们将在下面为解释这些概念而建造的完整的应用的源代码。 </p>
<h3><u>表单输入和提交场景</u></h3>
<p>为示范如何在ASP.NET MVC框架中处理表单输入和提交场景的一些基本原则，我们将建造一个简单的产品列表，产品生成，和产品编辑场景。它将拥有三个核心的用户体验：</p>
<p><u>按类列出的产品列表</u></p>
<p>通过导航到<em>/Products/Category/[CategoryID]</em> 这样的URL，用户将能看到在某个特定产品分类内的所有产品的列表： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step1.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step1.png" width="500" /></a> </p>
<p><u>添加新产品</u></p>
<p>用户将能通过点击上面的&#8220;添加新产品&#8221;的链接往商店里添加一个新产品。点击之后，会转到<em>/Products/New</em> URL，在这里，系统将提示用户输入要添加的新产品的细节： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step2.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step2.png" width="500" /></a> </p>
<p>在点击Save（保存）之后，产品就会添加到数据库中，然后就会转向返回到产品列表网页。 </p>
<p><u>编辑产品</u></p>
<p>在产品列表网页上，用户可以点击每个产品旁边的&#8220;Edit&#8221;（编辑）链接。这会转到<em>/Products/Edit/[ProductID]</em> URL，在这里，用户可以改动产品的细节，然后点击Save按钮，往数据库里更新： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step3.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step3.png" width="500" /></a> </p>
<h3><u>我们的数据模型</u></h3>
<p>我们将使用SQL Server Northwind样品数据库来存储我们的数据。然后我们将使用.NET 3.5内置的LINQ to SQL对象关系映射器（ORM）来对Product, Category, 和 Supplier对象进行建模，这些对象代表了我们的数据库数据表中的记录行。 </p>
<p>一开始，在ASP.NET MVC项目中，右击/Models子目录，选择&#8220;添加新项&#8221; -&gt; &#8220;LINQ to SQL 类&#8221;，调出 <a href="http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx" target="_blank"><font color="#087da8">LINQ to SQL orM 设计器</font></a>来对我们的数据对象建模： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step4.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step4.png" width="500" /></a> </p>
<p>然后我们将在项目中创建一个NorthwindDataContext部分类（partial class），向里面添加一些辅助方法。我们定义这些辅助方法有2个原因： 1)避免在我们的Controller类中直接嵌入我们的LINQ查询，2) 将允许我们在将来更容易地改变我们的控制器以使用dependency injection（依赖注入）。 </p>
<p>我们将添加的NorthwindDataContext辅助方法是象下面这样的： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step5.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step5.png" width="500" /></a> </p>
<p>想进一步了解LINQ和LINQ to SQL的话，请参阅我<a href="http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx" target="_blank"><font color="#087da8">这里</font></a>的LINQ to SQL系列。</p>
<h3><u>建造我们ProductsController控制器</u></h3>
<p>我们将使用单一控制器类来实现这三个核心用户浏览体验，我们将称这个控制器类为&#8220;ProductsController&#8221;（在Controllers子目录上右击，选择&#8220;添加新项&#8221; -&gt; &#8220;MVC 控制器&#8221;来创建这个类： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step6.png" /> </p>
<p>我们的 ProductsController 类将通过实现"Category", "New", 和"Edit" 等action方法来处理象<em>/Products/Category/3</em>, <em>/Products/New</em>, 和<em>/Products/Edit/5</em>这样的URL： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step7.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step7.png" width="500" /></a> </p>
<p>想了解这些URL是如何导向到 ProductsController 类的action方法上的话，请阅读我的ASP.NET MVC系列的<a href="http://blog.joycode.com/scottgu/archive/2007/11/14/111385.aspx" target="_blank"><font color="#087da8">第一部分</font></a>和<a href="http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx" target="_blank"><font color="#087da8">第二部分</font></a>。在本文的例子里，我们将使用默认的<em>/[Controller]/[Action]/[Id]</em>路径映射规则，这意味着我们<u>不必</u>配置什么东西，路径导向就会自动发生。 </p>
<p>我们控制器的Action方法将使用三个视图网页，用以显示输出。"List.aspx", "New.aspx", 和 "Edit.aspx" 网页将居于 \Views\Products 子目录下，这些网页将基于\Views\Shared目录中的Site.Master母版页上。 </p>
<h3><u>实现按类列出的产品列表</u></h3>
<p>我们要实现的网站的第一部分将是产品列表URL (/Products/Category/[CategoryId]) ： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step1.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step1.png" width="500" /></a> </p>
<p>我们将使用我们的ProductsController类上的"Category" action方法来实现这个功能。我们将使用LINQ to SQL DataContext类，和我们往其中添加的GetCategoryById辅助方法，来获取一个Category对象，该对象代表了由URL （譬如， /Products/Category/3） 指定的某个特定分类。然后我们将该Category对象传给"List"视图来从中生成回复： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step8.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step8.png" width="500" /></a> </p>
<p>在实现我们的List视图时，我们首先将更新我们网页的后台代码，从ViewPage&lt;Category&gt;继承而来，这样页面的ViewData属性将是从我们的控制器传过来的Category对象的类型（<a href="http://blog.joycode.com/scottgu/archive/2007/12/07/112355.aspx" target="_blank"><font color="#087da8">第三部分</font></a>对此有详细讨论）： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step9.png" /> </p>
<p>然后我们将象下面这样实现List.aspx： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step10.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step10.png" width="500" /></a> </p>
<p>上面的视图在页面上方显示了分类名称，然后显示了分类内的所有产品的项目列表。 </p>
<p>在项目列表的每个产品旁边，有个 "Edit" 链接。我们是用在<a href="http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx" target="_blank"><font color="#087da8">第二部分</font></a>中讨论过的Html.ActionLink辅助方法来显示这些HTML超链接（譬如，&lt;a href="/Products/Edit/4"&gt;Edit&lt;/a&gt;）的，在"Edit"链接被点击后，用户将被导向到"Edit"action方法。然后我们还将使用Html.ActionLink辅助方法在页面底部生成一个&lt;a href="/Products/New"&gt;Add New Product&lt;/a&gt;链接，在该链接被点击后，用户将被导向到"New" action方法。 </p>
<p>当我们访问 /Products/Category/1 URL时，在浏览器中查看源码的话，你会注意到我们的ASP.NET MVC应用输出了非常干净的HTML和URL标识： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step11.png" /> </p>
<h3><u>实现添加新产品（第一部分-背景知识）</u></h3>
<p>现在让我们来实现网站的&#8220;添加新产品&#8221;表单提交功能，最终我们想要用户在访问<em>/Products/New</em> URL时看到象下面这样的显示： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step2.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step2.png" width="500" /></a> </p>
<p>在ASP.NET MVC框架中，表单输入和编辑场景一般是通过在Controller类上呈示2个Action方法来处理的。第一个Controller Action方法负责发送含有要显示的初始表单的HTML。第二个Controller Action方法则负责处理从浏览器发回的任何表单提交。 </p>
<p>例如，对上面的&#8220;添加产品&#8221;屏幕，我们会选择在ProductsController上的2个不同action中来实现：一个叫"New"，另一个叫"Create"。<em>/Products/New</em> URL负责显示一个带有HTML文本框和下拉框控件的空白表单，让用户输入新产品的细节。然后，这个网页上的HTML &lt;form&gt;元素将其action属性设置为 <em>/Products/Create</em> URL。这意味着当用户点击表单提交按钮时，表单的输入将被发送到"Create" action方法上来处理和更新数据库。 </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step12.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step12.png" width="500" /></a> </p>
<h3><u>实现添加新产品（第二部分 - 第一种方法）</u></h3>
<p>下面是我们可以用来实现ProductsController的一个初始实现。</p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step13.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step13.png" width="500" /></a> </p>
<p>注意上面，在涉及产品生成过程中，我们有2个action方法， - "New" 和 "Create"。 "New" action方法只是简单地向用户显示一个空白表单。"Create" action方法则处理从表单提交过来的值，根据这些值在数据库中生成一个新产品，然后将客户转向到产品的分类列表网页。 </p>
<p>发送到客户端的HTML表单，是在由"New" action方法调用的"New.aspx"视图里实现的。这个视图的一个初始实现（每个输入都用了文本框）看上去象下面这样： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step14.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step14.png" width="500" /></a> </p>
<p>注意上面，我们在网页上使用了标准的 HTML &lt;form&gt; 元素，而不是form runat=server。表单的"action"属性被设置为ProductsController上的"Create" action方法。在页面底部的&lt;input type="submit"&gt;元素被点击时，提交就会发生，之后，ASP.NET MVC框架就会自动将ProductName, CategoryID, SupplierID 和 UnitPrice值映射为方法参数，传给ProductsController上的 "Create" action方法： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step15.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step15.png" width="500" /></a> </p>
<p>至此，我们运行网站时，就有了最基本的产品输入功能： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step16.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step16.png" width="500" /></a> </p>
<h3><u>实现添加新产品 （第三部分 - 使用HTML辅助方法实现下拉框）</u></h3>
<p>我们在前面一节里创建的产品输入屏幕是可行的，但不是很友好。具体来说，它要求用户知道正输入的产品的原始CategoryID和SupplierID成员。我们需要通过显示内含可读名称的HTML下拉框来修正这个问题。 </p>
<p>第一步，将修改ProductsController来向视图里传人2个集合，一个内含现有的分类列表，另一个内含产品供应商列表。我们将通过生成一个封装这些列表的强类型的ProductsNewViewData类，然后将它传给视图来达成这个目的（你可以在<a href="http://blog.joycode.com/scottgu/archive/2007/12/07/112355.aspx" target="_blank"><font color="#087da8">第三部分</font></a>中了解有关详情）： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step17.png" /> </p>
<p>然后我们将更新 "New" action 方法来填充这些集合，然后将它们作为ViewData传给 "New" 视图： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step18.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step18.png" width="500" /></a> </p>
<p>然后在我们的视图里，我们可以使用这些集合来生成 HTML &lt;select&gt; 下拉框。</p>
<p><u>ASP.NET MVC HTML 辅助方法</u></p>
<p>我们可以用来生成下拉框的一个方法是在HTML里手工生成内含 if/else 语句的 &lt;% %&gt; for-循环。这会给与我们对HTML的完全控制，但HTML会很乱。 </p>
<p>一个你可以使用的干净得多的方法是利用ViewPage基类上的"Html"辅助属性。这是个方便对象，呈示了一套HTML辅助界面方法，用于自动化HTML界面的生成。例如，在本帖子的前面，我们使用了 Html.ActionLink辅助方法来生成 &lt;a href=""&gt; 元素： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step19.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step19.png" width="500" /></a> </p>
<p>HtmlHelper对象（以及我们将在以后的教程里讨论的AjaxHelper对象）是特地设计可以通过使用"<a href="http://blog.joycode.com/scottgu/archive/2007/04/07/100611.aspx" target="_blank"><font color="#087da8">扩展方法</font></a>"（VS 2008中VB和C#的一个新语言特性）来轻松地扩展的。这意味着，任何人都可以为这些对象生成他们自己的自定义辅助方法，共享这些方法，为你所用。 </p>
<p>在ASP.NET MVC框架将来的预览版中，我们将提供几十个内置的HTML和AJAX辅助方法。在第一个预览版中，只有"ActionLink"方法是内置于System.Web.Extensions（目前实现核心ASP.NET MVC框架的程序集）中的。但我们还将有一个单独的 "MVCToolkit" 下载，你可以加到你的项目中，来得到你可以在第一个预览版中使用的的几十个辅助方法。 </p>
<p>要安装MVCToolkit HTML辅助方法的话，只要将MVCToolkit.dll程序集添加为你的项目的引用即可： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step21.png" /> </p>
<p>重新编译你的项目，然后下一次你键入 &lt;%= Html. %&gt; 的话，你将看到许许多多你可以使用的额外界面辅助方法： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step20.png" /> </p>
<p>为生成HTML &lt;select&gt;下拉框，我们可以使用Html.Select()方法。每个方法都有重载的版本，在视图里有完整的intellisense： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step22.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step22.png" width="500" /></a> </p>
<p>我们可以更新我们的"New"视图，用下面的代码，使用Html.Select选项来显示使用CategoryID/SupplierID属性作为值，CategoryName/SupplierName作为显示文字的下拉框： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step24.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step24.png" width="500" /></a> </p>
<p>这会在运行时为我们生成适当的&lt;select&gt; HTML标识： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step25.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step25.png" width="500" /></a> </p>
<p>在/Products/New屏幕上给用户一个方便的方式来选择产品分类和供应商： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step23.png" /> </p>
<p>注： 因为我们还是在向服务器提交CategoryID和SupplierID值，所以我们根本不用更新ProductsController的Create Action方法来支持这个新的下拉框界面，这个方法还是工作的。 </p>
<h3><u>实现添加新产品（第四部分 - 使用UpdateFrom方法清理Create代码）</u></h3>
<p>我们的ProductsController的"Create" Action方法负责处理我们的&#8220;添加产品&#8221;场景的表单提交。目前它是以action方法参数的方式来处理进来的表单参数的： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step26.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step26.png" width="500" /></a> </p>
<p>这个方法是可行的，但对于涉及大量值的表单，Action方法的签名就会开始变得有点难读。而且，上面将所有进来的参数值设置到新的Product对象上的代码有点长，而且单调。 </p>
<p>如果你引用了MVCToolkit程序集，你可以利用在System.Web.Mvc.BindingHelpers命名空间下实现的一个有用的扩展方法，来对此代码作些清理。这个扩展方法叫做&#8220;UpdateFrom&#8221;，可以用在任何 .NET 对象上。它接受一个字典作为参数，然后，它会对任何匹配该对象的公开属性的键，自动对本身进行属性赋值。 </p>
<p>例如，我们可以重写我们上面的Create action方法，来使用UpdateFrom方法，象这样：</p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step27.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step27.png" width="500" /></a>&nbsp;</p>
<p>注： 如果你因为安全的原因，想要更明确些，只允许某些属性可以更新的话，你还可以向UpdateFrom方法传入一个可以更新的属性名称的字符串数组： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step28.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step28.png" width="500" /></a> </p>
<h3><u>实现编辑产品功能（第一部分 - 背景知识）</u></h3>
<p>现在让我们来实现网站&#8220;编辑产品&#8221;的功能。我们最终想要用户在访问<em>/Products/Edit/[ProductID]</em> URL时看到象下面这样的屏幕： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step3.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step3.png" width="500" /></a> </p>
<p>跟上面的&#8220;添加新产品&#8221;表单提交例子一样，我们将使用2个ProductsController Action方法来实现这个表单编辑交互，我们将称这2个方法为"Edit"和"Update"： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step29.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step29.png" width="500" /></a> </p>
<p>"Edit" 会显示产品表单，"Update"会被用来处理表单的提交行动。</p>
<h3><u>实现编辑产品功能（第二部分 - Edit Action）</u></h3>
<p>我们将通过实现ProductController的Edit action方法来开始启用我们应用的编辑功能。当我们在本贴子的开头创建产品列表网页的时候，我们是这么建造的，Edit action将接受一个作为URL一部分的id参数（譬如，/Products/Edit/5）： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step31.png" /> </p>
<p>我们想要Edit Action方法从数据库中获取适当的产品对象，以及现有的产品供应商和分类集合（这样，我们可以在我们的编辑视图里实现这些东西对应的下拉框）。我们将使用下面的ProductsEditViewData对象来定义一个强类型的视图对象来代表所有这些数据： </p>
<p><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step30.png" /> </p>
<p>然后，我们可以实现我们的Edit action方法来填充这个viewdata对象，在"Edit" 视图中显示： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step32.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step32.png" width="500" /></a> </p>
<h3><u>实现编辑产品功能（第三部分 - Edit 视图）</u></h3>
<p>我们可以使用下述方法来实现Edit.aspx视图网页： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step33.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step33.png" width="500" /></a> </p>
<p>注意我们是如何同时使用上面例子中的Html.TextBox和Html.Select辅助方法来的。这2个方法都是来自MVCToolkit.dll程序集中的扩展方法。 </p>
<p>注意Html.Select辅助方法有个重载版本，允许你指定下拉框中的选定值是什么。在下面的代码片断中，我表示我要Category下拉框根据编辑产品目前的CategoryID值自动选择某一项： </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step34.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step34.png" width="500" /></a> </p>
<p>最后，注意我们是如何使用Url.Action()辅助方法来设置&lt;form&gt;元素的action属性的：</p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step35.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step35.png" width="500" /></a> </p>
<p>Url.Action和Html.ActionLink这2个辅助方法都使用了ASP.NET MVC框架的<a href="http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx" target="_blank"><font color="#087da8">路径选择引擎</font></a>来生成URL（参阅<a href="http://blog.joycode.com/scottgu/archive/2007/12/04/112249.aspx" target="_blank"><font color="#087da8">第二部分</font></a>以了解URL生成原理的细节）。这意味着，如果我们改变我们网站的编辑功能的路径选择规则的话，我们<u>不</u>需要改动控制器或视图中的任何代码。例如，我们可以将我们的URL做重新映射，换掉/Products/Edit/1，而是使用象/Products/1/Edit这样更具RESTful的URL的话，上面的控制器和视图代码不用做改动，而依旧会工作。 </p>
<h3><u>实现编辑产品功能（第四部分 - Update Action）</u></h3>
<p>最后一步是实现ProductController类上的"Update" action方法: </p>
<p><a title="在新窗口打开图片" href="http://www.scottgu.com/blogposts/mvc4/step36.png" target="_blank"><img alt="" src="http://www.scottgu.com/blogposts/mvc4/step36.png" width="500" /></a> </p>
<p>跟前面的"Create" action方法一样，我们将利用"UpdateFrom"扩展方法来从请求中自动填充我们的产品对象。但注意，填充的不是一个空对象，我们使用了一个模式，先从数据库中获取老的值，然后对它应用用户做的改动，然后更新到数据库中。 </p>
<p>编译完毕之后，我们重新定向到产品列表网页，自动设置 /Products/Category/[CategoryID]，以匹配我们正在操作的产品的保存的状态。 </p>
<h3><u>结语</u></h3>
<p>希望本帖子提供了在ASP.NET MVC框架中如何处理表单输入和提交场景的一些细节，还提供了你可以如何处理和结构化常见数据输入和编辑场景的一些背景。 </p>
<p><a href="http://www.scottgu.com/blogposts/mvc4/mvcapplication5.zip" target="_blank"><font color="#087da8">点击这里</font></a>下载一个内含我们在上面建造的完整应用源代码的.ZIP 文件。 </p>
<p>在将来的帖子里，我将讨论如何处理表单输入和编辑场景中数据验证和错误复原的情形。我将讨论一些促进快速应用开发的内置的数据和安全支架（scaffolding）。我将讨论你如何在MVC框架中使用ASP.NET AJAX进行启用AJAX的编辑。我还将对如何单元测试控制器和向控制器添加依赖注入做深入的探讨。 </p>
<p>希望本文对你有所帮助，</p>
<p>Scott</p>
<img src ="http://www.blogjava.net/jvict/aggbug/249011.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> 2008-12-29 22:52 <a href="http://www.blogjava.net/jvict/articles/249011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GridView导出Excel研究 </title><link>http://www.blogjava.net/jvict/articles/247617.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sun, 21 Dec 2008 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/247617.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/247617.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/247617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/247617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/247617.html</trackback:ping><description><![CDATA[<p style="text-align: left" align="left">原文：http://www.cnblogs.com/stswordman/articles/485641.html<span style="font-size: 10pt; font-family: 宋体"><br />
<br />
将</span><span style="font-size: 10pt; font-family: Verdana">GridView</span><span style="font-size: 10pt; font-family: 宋体">中的数据导出为</span><span style="font-size: 10pt; font-family: Verdana">Excel</span><span style="font-size: 10pt; font-family: 宋体">是</span><span style="font-size: 10pt; font-family: Verdana">web</span><span style="font-size: 10pt; font-family: 宋体">应用中的常见功能。在不同的应用场景下有不同的导出技术。在本文中我将介绍一些导出的技术，希望对您有所帮助</span></p>
<p style="text-align: left" align="left"><strong><u><span style="font-size: 10pt; font-family: Verdana">GridView Export the Excel (Basic Code):&nbsp; </span></u></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">. </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">首先看一个基础的应用。创建一个表格，见截图</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">&lt;!--[if !vml]--&gt; &lt;!--[if !vml]--&gt;<img height="207" alt="" src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed1.GIF" width="526" /></p>
<fieldset><legend><br />
</legend></fieldset>&lt;!--[endif]--&gt;&nbsp;</span>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">然后将数据库中的数据绑定到</span><span style="font-size: 10pt; font-family: Verdana">GridView</span><span style="font-size: 10pt; font-family: 宋体">中的数据，代码如下：</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">private</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">void</span> BindData()</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">SqlConnection</span><span style="font-size: 10pt; font-family: 'Courier New'"> myConnection = <span style="color: blue">new</span> <span style="color: teal">SqlConnection</span>(<span style="color: maroon">"Server=localhost;Database=School;Trusted_Connection=true"</span>);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">SqlDataAdapter</span><span style="font-size: 10pt; font-family: 'Courier New'"> ad = <span style="color: blue">new</span> <span style="color: teal">SqlDataAdapter</span>(<span style="color: maroon">"SELECT * FROM Users"</span>, myConnection);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">DataSet</span><span style="font-size: 10pt; font-family: 'Courier New'"> ds = <span style="color: blue">new</span> <span style="color: teal">DataSet</span>();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">ad.Fill(ds);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gvUsers.DataSource = ds;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gvUsers.DataBind(); </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">&lt;!--[if !vml]--&gt;<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed2.GIF" border="0"  alt="" /><br />
&lt;!--[endif]--&gt; &lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">现在，</span><span style="font-size: 10pt; font-family: Verdana">GridView</span><span style="font-size: 10pt; font-family: 宋体">中已经绑定了数据，接下来的任务就是导出到</span><span style="font-size: 10pt; font-family: Verdana">Excel</span><span style="font-size: 10pt; font-family: 宋体">。下面是</span><span style="font-size: 10pt; font-family: Verdana">button</span><span style="font-size: 10pt; font-family: 宋体">事件中的代码</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ClearContent();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.AddHeader(<span style="color: maroon">"content-disposition"</span>, <span style="color: maroon">"attachment; filename=MyExcelFile.xls"</span>);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ContentType = <span style="color: maroon">"application/excel"</span>;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">StringWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> sw = <span style="color: blue">new</span> <span style="color: teal">StringWriter</span>();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">HtmlTextWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> htw = <span style="color: blue">new</span> <span style="color: teal">HtmlTextWriter</span>(sw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gvUsers.RenderControl(htw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.Write(sw.ToString());</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.End();</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">并且还需要</span><span style="font-size: 10pt; font-family: Verdana">override</span><span style="font-size: 10pt; font-family: 宋体">一下</span><strong><span style="font-size: 10pt; font-family: Verdana">VerifyRenderingInServerForm</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">方法</span></strong><strong><span style="font-size: 10pt; font-family: Verdana">(</span></strong><strong><span style="font-size: 10pt; color: blue; font-family: 宋体">这一点非常重要，否则在点击按钮后会报错，译者注</span></strong><strong><span style="font-size: 10pt; font-family: Verdana">)</span></strong><strong><span style="font-size: 10pt; font-family: 宋体">，</span></strong><span style="font-size: 10pt; font-family: 宋体">代码如下</span><strong><span style="font-size: 10pt; font-family: Verdana">:</span></strong></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">public</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">override</span> <span style="color: blue">void</span> VerifyRenderingInServerForm(<span style="color: teal">Control</span> control)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">点击导出按钮后会弹出对话框，询问您打开或保存。选择打开文件，导出到</span><span style="font-size: 10pt; font-family: Verdana">Excel</span><span style="font-size: 10pt; font-family: 宋体">的结果如下图：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">&lt;!--[if !vml]--&gt;<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed3.GIF" border="0"  alt="" /><br />
&lt;!--[endif]--&gt; &lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;</span></p>
<p style="text-align: left" align="left"><strong><u><span style="font-size: 10pt; font-family: Verdana">Exporting GridView to Excel With Style:</span></u></strong><span style="font-size: 10pt; font-family: Verdana"><br />
</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">您是否注意到了以上代码存在一些的问题？是的，</span><span style="font-size: 10pt; font-family: Verdana">ID</span><span style="font-size: 10pt; font-family: 宋体">列开头的</span><span style="font-size: 10pt; font-family: Verdana">0</span><span style="font-size: 10pt; font-family: 宋体">都被截去了。如果你的</span><span style="font-size: 10pt; font-family: Verdana">ID</span><span style="font-size: 10pt; font-family: 宋体">是</span><span style="font-size: 10pt; font-family: Verdana">000345</span><span style="font-size: 10pt; font-family: 宋体">，导出后就编程了</span><span style="font-size: 10pt; font-family: Verdana">345</span><span style="font-size: 10pt; font-family: 宋体">。这个问题可以通过把</span><span style="font-size: 10pt; font-family: Verdana">css</span><span style="font-size: 10pt; font-family: 宋体">添加到输出流中来解决。为了使</span><span style="font-size: 10pt; font-family: Verdana">ID</span><span style="font-size: 10pt; font-family: 宋体">列正确显示，您需要将其储存为文本格式。</span><span style="font-size: 10pt; font-family: Verdana">Excel</span><span style="font-size: 10pt; font-family: 宋体">中的文本格式表示为</span><span style="font-size: 10pt; font-family: Verdana">"</span><span style="font-size: 10pt; font-family: 'Courier New'">mso-number-format:""@</span><span style="font-size: 10pt; font-family: Verdana">"</span><span style="font-size: 10pt; font-family: 宋体">。</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">protected</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">void</span> Btn_ExportClick(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">string</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"> style = <span style="color: maroon">@"&lt;style&gt; .text { } &lt;/script&gt; "</span>; </span></strong></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ClearContent();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.AddHeader(<span style="color: maroon">"content-disposition"</span>, <span style="color: maroon">"attachment; filename=MyExcelFile.xls"</span>);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ContentType = <span style="color: maroon">"application/excel"</span>;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">StringWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> sw = <span style="color: blue">new</span> <span style="color: teal">StringWriter</span>();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">HtmlTextWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> htw = <span style="color: blue">new</span> <span style="color: teal">HtmlTextWriter</span>(sw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gvUsers.RenderControl(htw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">// Style is added dynamically</span></p>
            <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; font-family: 'Courier New'">Response.Write(style); </span></strong></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.Write(sw.ToString());</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.End();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">public</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">override</span> <span style="color: blue">void</span> VerifyRenderingInServerForm(<span style="color: teal">Control</span> control)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">&nbsp;在上面的代码中，我通过</span><span style="font-size: 10pt; font-family: Verdana">&#8221;style&#8221;</span><span style="font-size: 10pt; font-family: 宋体">变量来控制</span><span style="font-size: 10pt; font-family: Verdana">GridView</span><span style="font-size: 10pt; font-family: 宋体">列的样式。并通过</span><span style="font-size: 10pt; font-family: Verdana">Respnose.Write</span><span style="font-size: 10pt; font-family: 宋体">方法将其添加到输出流中。最后把样式添加到</span><span style="font-size: 10pt; font-family: Verdana">ID</span><span style="font-size: 10pt; font-family: 宋体">列。这一步需要在</span><span style="font-size: 10pt; font-family: Verdana">RowDataBound</span><span style="font-size: 10pt; font-family: 宋体">事件中完成</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">protected</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">void</span> gvUsers_RowDataBound(<span style="color: blue">object</span> sender, <span style="color: teal">GridViewRowEventArgs</span> e)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{ </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">if</span><span style="font-size: 10pt; font-family: 'Courier New'"> (e.Row.RowType == <span style="color: teal">DataControlRowType</span>.DataRow)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; font-family: 'Courier New'">e.Row.Cells[1].Attributes.Add(<span style="color: maroon">"class"</span>, <span style="color: maroon">"text"</span>); </span></strong></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">&nbsp;修改的结果如下：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt; &lt;!--[if !vml]--&gt;<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed4.GIF" border="0"  alt="" /><br />
&lt;!--[endif]--&gt;</span></p>
<div align="center">
<table style="background: #ffffcc 0% 50%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" height="22" cellspacing="0" cellpadding="0" width="1" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%"><br />
            </td>
        </tr>
    </tbody>
</table>
</div>
<p style="text-align: left" align="left"><strong><u><span style="font-size: 10pt; font-family: Verdana">Exporting GridView With LinkButtons and Paging:&nbsp; </span></u></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">如果要导出的</span><span style="font-size: 10pt; font-family: Verdana">GridView</span><span style="font-size: 10pt; font-family: 宋体">中包含</span><span style="font-size: 10pt; font-family: Verdana">LinkButton</span><span style="font-size: 10pt; font-family: 宋体">或者分页</span><span style="font-size: 10pt; font-family: Verdana">(</span><span style="font-size: 10pt; color: blue; font-family: 宋体">出现分页码时，译者注</span><span style="font-size: 10pt; font-family: Verdana">) </span><span style="font-size: 10pt; font-family: 宋体">则将出现错误：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt; &lt;!--[if !vml]--&gt;<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed5.GIF" border="0"  alt="" /><br />
&lt;!--[endif]--&gt;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">通过修改页文件可以修正这个问题：</span><span style="font-size: 10pt; font-family: Verdana">EnableEventValidation = "false". </span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">&lt;%<span style="color: blue">@</span> <span style="color: maroon">Page</span> <span style="color: red">Language</span><span style="color: blue">="C#"</span> <strong><span style="color: red">EnableEventValidation</span><span style="color: blue">="false"</span></strong> <span style="color: red">AutoEventWireup</span><span style="color: blue">="true"</span> <span style="color: red">CodeFile</span><span style="color: blue">="Default.aspx.cs"</span> <span style="color: red">Inherits</span><span style="color: blue">="_Default"</span> %&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">看一下导出的文件</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">&lt;!--[if !vml]--&gt;<br />
<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed6.GIF" border="0"  alt="" />&nbsp;</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">在导出的文件中可以看见</span><span style="font-size: 10pt; font-family: Verdana">linkbutton</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">dropdownlist</span><span style="font-size: 10pt; font-family: 宋体">控件，虽然</span><span style="font-size: 10pt; font-family: Verdana">dropdownlist</span><span style="font-size: 10pt; font-family: 宋体">控件显示的数据的确是用户所选的项，但怎么看也不像是一个导出文件（<span style="color: blue">我倒是觉的挺</span></span><span style="font-size: 10pt; color: blue; font-family: Verdana">cool</span><span style="font-size: 10pt; color: blue; font-family: 宋体">的：）译者注</span><span style="font-size: 10pt; font-family: 宋体">），现在应如何移除</span><span style="font-size: 10pt; font-family: Verdana">dropdownlist</span><span style="font-size: 10pt; font-family: 宋体">并显示选择的文字呢？</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">&nbsp;<br />
我写了一个</span><span style="font-size: 10pt; font-family: Verdana">DisableControls</span><span style="font-size: 10pt; font-family: 宋体">函数，用使循环的方法将</span><span style="font-size: 10pt; font-family: Verdana">linkbutton</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">dropdownlist</span><span style="font-size: 10pt; font-family: 宋体">替换成</span><span style="font-size: 10pt; font-family: Verdana">literal</span><span style="font-size: 10pt; font-family: 宋体">控件</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">private</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">void</span> DisableControls(<span style="color: teal">Control</span> gv)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">LinkButton</span><span style="font-size: 10pt; font-family: 'Courier New'"> lb = <span style="color: blue">new</span> <span style="color: teal">LinkButton</span>();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">Literal</span><span style="font-size: 10pt; font-family: 'Courier New'"> l = <span style="color: blue">new</span> <span style="color: teal">Literal</span>(); </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">string</span><span style="font-size: 10pt; font-family: 'Courier New'"> name = <span style="color: teal">String</span>.Empty;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">for</span><span style="font-size: 10pt; font-family: 'Courier New'"> (<span style="color: blue">int</span> i = 0; i &lt; gv.Controls.Count; i++)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">if</span><span style="font-size: 10pt; font-family: 'Courier New'"> (gv.Controls[i].GetType() == <span style="color: blue">typeof</span>(<span style="color: teal">LinkButton</span>))</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">l.Text = (gv.Controls[i] <span style="color: blue">as</span> <span style="color: teal">LinkButton</span>).Text; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gv.Controls.Remove(gv.Controls[i]);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gv.Controls.AddAt(i, l);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">else</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">if</span> (gv.Controls[i].GetType() == <span style="color: blue">typeof</span>(<span style="color: teal">DropDownList</span>))</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">l.Text = (gv.Controls[i] <span style="color: blue">as</span> <span style="color: teal">DropDownList</span>).SelectedItem.Text;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gv.Controls.Remove(gv.Controls[i]);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gv.Controls.AddAt(i, l);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">if</span><span style="font-size: 10pt; font-family: 'Courier New'"> (gv.Controls[i].HasControls())</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">DisableControls(gv.Controls[i]); </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">} </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">方法非常简单，只需将</span><span style="font-size: 10pt; font-family: Verdana">linkbuton</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">dropdownlist</span><span style="font-size: 10pt; font-family: 宋体">替换成</span><span style="font-size: 10pt; font-family: Verdana">literal</span><span style="font-size: 10pt; font-family: 宋体">控件，并将选择项赋值给</span><span style="font-size: 10pt; font-family: Verdana">literal</span><span style="font-size: 10pt; font-family: 宋体">控件的文本属性。该方法需要在导出前调用</span></p>
<table style="background: silver 0% 50%; width: 100%; border-collapse: collapse; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 100%; padding-top: 0cm" width="100%">
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">protected</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">void</span> Btn_ExportExcelPaging(<span style="color: blue">object</span> sender, <span style="color: teal">EventArgs</span> e)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">{</span></p>
            <p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 'Courier New'">DisableControls(gvUsers);</span></strong></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ClearContent();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.AddHeader(<span style="color: maroon">"content-disposition"</span>, <span style="color: maroon">"attachment; filename=MyExcelFile.xls"</span>);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.ContentType = <span style="color: maroon">"application/excel"</span>;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">StringWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> sw = <span style="color: blue">new</span> <span style="color: teal">StringWriter</span>();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">HtmlTextWriter</span><span style="font-size: 10pt; font-family: 'Courier New'"> htw = <span style="color: blue">new</span> <span style="color: teal">HtmlTextWriter</span>(sw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">gvUsers.RenderControl(htw);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.Write(sw.ToString());</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Response.End(); </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">现在的</span><span style="font-size: 10pt; font-family: Verdana">Excel</span><span style="font-size: 10pt; font-family: 宋体">中就只剩下选中文本了</span></p>
<p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">&lt;!--[if !vml]--&gt;<img src="http://images.cnblogs.com/cnblogs_com/stswordman/GridViewExportToExcelAllYouNeed7.GIF" border="0"  alt="" /><br />
&lt;!--[endif]--&gt; &lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;</span></p>
<p><a href="http://files.cnblogs.com/stswordman/GridViewExportToExcelAllYouNeed.zip"><br />
</a></p>
<p><a href="http://files.cnblogs.com/stswordman/GridViewExportToExcelAllYouNeed.zip"><br />
</a></p>
<p>原文：http://gridviewguy.com/ArticleDetails.aspx?articleID=197</p>
<img src ="http://www.blogjava.net/jvict/aggbug/247617.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> 2008-12-21 13:57 <a href="http://www.blogjava.net/jvict/articles/247617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>导出excel的四种方法 [转]</title><link>http://www.blogjava.net/jvict/articles/247613.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sun, 21 Dec 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/247613.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/247613.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/247613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/247613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/247613.html</trackback:ping><description><![CDATA[<p>转天天博客 作者: roc<br />
http://qx.ahnw.gov.cn/user1/apeng/archives/2006/11.html<br />
<br />
据我现在所知excel有四种方法：<br />
1.自己写的excel接口，客户端不需要装excel，见灵感之源的blog:<br />
<a href="http://www.cnblogs.com/unruledboy/archive/2004/07/07/22093.aspx">http://www.cnblogs.com/unruledboy/archive/2004/07/07/22093.aspx</a></p>
<p>2.把web上的DataGrid直接导入到excel<br />
public void ExportToExcel(System.Web.UI.Control ctl) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool CurrCtlVisible=ctl.Visible;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctl.Visible=true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentType = "application/ms-excel"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctl.Page.EnableViewState = false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.IO.StringWriter tw = new System.IO.StringWriter(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctl.RenderControl(hw); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(tw.ToString()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.End(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctl.Page.EnableViewState = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctl.Visible=CurrCtlVisible;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
3.在引用里调用Microsoft.Office.Interop.Excel.dll，原理是把数据存到DataTable、DataView或DataGrid中，然后再把数据一格一格的赋到excel的cell里去。<br />
见如下代码：</p>
<p>public class ExportToExcel<br />
&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 私有成员#region 私有成员<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 数据的DataView<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private DataView dv=null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 表格标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string title=null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 输出文件路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string outFilePath=null;</p>
<p>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 输入文件名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string inputFilePath=System.Windows.Forms.Application.StartupPath+@" emplate.xls";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公共属性#region 公共属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 数据的DataView<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DataView DV<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<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; dv=value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 表格标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Title<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<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; title=value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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; return title;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 输出文件路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string OutFilePath<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<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; outFilePath=value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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; return outFilePath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**//// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 输入文件路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string InputFilePath<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<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; inputFilePath=value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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; return inputFilePath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 构造函数#region 构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ExportToExcel()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public OutputExcel(DataView dv,string title)<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
//<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公共方法#region 公共方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**///<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void CreateExcel()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rowIndex=4;//行起始坐标<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int colIndex=1;//列起始坐标</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationClass myApp=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Workbook myBook=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Worksheet mySheet=null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果文件不存在，则将模板文件拷贝一份作为输出文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!File.Exists(outFilePath))<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; File.Copy(inputFilePath,outFilePath,true);<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; myApp= new ApplicationClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myApp.Visible=false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object oMissiong=System.Reflection.Missing.Value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oMissiong,oMissiong,oMissiong);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myBook=myApp.Workbooks[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet=(Worksheet)myBook.ActiveSheet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach(DataColumn col in dv.Table.Columns)<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; colIndex++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[4,colIndex] = col.ColumnName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐<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; //取得表格中的数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach(DataRowView row in dv)<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; rowIndex ++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colIndex = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach(DataColumn col in dv.Table.Columns)<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; colIndex ++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(col.DataType == System.Type.GetType("System.DateTime"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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; else&nbsp; if(col.DataType == System.Type.GetType("System.String"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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; }<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; //加载一个合计行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rowSum = rowIndex + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int colSum = 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[rowSum,2] = "合计";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置选中的部分的颜色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色，共计有56种</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得整个报表的标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.Cells[2,2] = title;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置整个报表的标题格式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size = 22;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置报表表格为最适应宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置整个报表的标题为跨列居中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制边框<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myBook.Save();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myBook.Close( true,outFilePath,true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myApp.Quit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GC.Collect();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
4.另外，这就是另外一种方法了，建一个SqlServer的数据源，利用Excel的外部数据源让Excel自己从数据库取数据：</p>
<p>public void ExportToExcel(string pstrSql)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Application pApplication;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel._Workbook xBk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel._Worksheet xSt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel._QueryTable xQt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string ExcelConn = "ODBC;DRIVER=SQL Server;SERVER=localhost;UID=sa;PWD=;APP=Microsoft(R) Windows (R) 2000 Operating System;WSID=me;DATABASE=pubs";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pApplication = new Excel.ApplicationClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xBk = pApplication.Workbooks.Add(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt = (Excel._Worksheet)xBk.ActiveSheet;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pApplication.Cells[2,2] = this.title;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt.get_Range(pApplication.Cells[2,2],pApplication.Cells[2,2]).Font.Bold = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt.get_Range(pApplication.Cells[2,2],pApplication.Cells[2,2]).Font.Name = "黑体";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt.get_Range(pApplication.Cells[2,2],pApplication.Cells[2,2]).Font.Size = 22;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt = xSt.QueryTables.Add(ExcelConn,xSt.get_Range(pApplication.Cells[4,2],pApplication.Cells[4,2]),pstrSql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.Name = "导出EXCEL";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.FieldNames = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.RowNumbers = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.FillAdjacentFormulas = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.PreserveFormatting = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.BackgroundQuery = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.RefreshStyle = Excel.XlCellInsertionMode.xlInsertDeleteCells;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.AdjustColumnWidth = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.RefreshPeriod = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.PreserveColumnInfo = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xQt.Refresh(xQt.BackgroundQuery);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pApplication.Visible = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
这里的pstrSql指的是sql语句。<br />
</p>
<img src ="http://www.blogjava.net/jvict/aggbug/247613.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> 2008-12-21 13:20 <a href="http://www.blogjava.net/jvict/articles/247613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>datalist导出excel</title><link>http://www.blogjava.net/jvict/articles/247608.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sun, 21 Dec 2008 04:44:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/247608.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/247608.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/247608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/247608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/247608.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">原文: http://topic.csdn.net/u/20081102/13/c07a4eb4-0f24-45cd-bc7e-e3fbeeff857e.html<br />
<br />
void</span><span style="color: #000000"> ExportExcel( System.Web.UI.WebControls.DataList dl, </span><span style="color: #0000ff">string</span><span style="color: #000000"> strFileName)<br />
&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; strFileName </span><span style="color: #000000">=</span><span style="color: #000000"> System.Web.HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.Buffer </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.Charset </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800000">"</span><span style="color: #800000">gb2312</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.AppendHeader(</span><span style="color: #800000">"</span><span style="color: #800000">Content-Disposition</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">online; filename=</span><span style="color: #800000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> strFileName </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #800000">"</span><span style="color: #800000">.xls</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.ContentEncoding </span><span style="color: #000000">=</span><span style="color: #000000"> System.Text.Encoding.GetEncoding(</span><span style="color: #800000">"</span><span style="color: #800000">gb2312</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.ContentType </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800000">"</span><span style="color: #800000">application/ms-excel</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Globalization.CultureInfo myCItrad </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> System.Globalization.CultureInfo(</span><span style="color: #800000">"</span><span style="color: #800000">zh-CN</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.IO.StringWriter oStringWriter </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> System.IO.StringWriter(myCItrad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.UI.HtmlTextWriter oHtmlTextWriter </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> System.Web.UI.HtmlTextWriter(oStringWriter);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dl.RenderControl(oHtmlTextWriter);<br />
&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; System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString().Replace(</span><span style="color: #800000">"</span><span style="color: #800000">&lt;td</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">&lt;td STYLE='MSO-NUMBER-FORMAT:\\@'</span><span style="color: #800000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.Buffer </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpContext.Current.Response.End();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
1Response.Clear() <br />
2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.BufferOutput = True <br />
3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.Charset = "GB2312" <br />
4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.AppendHeader("Content-Disposition", "attachment;filename=" &amp; HttpUtility.UrlEncode("学员建议--" &amp; Me.courseName, System.Text.Encoding.UTF8) &amp; ".xls") <br />
5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312") <br />
6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.ContentType = "application/ms-excel" <br />
7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dlstGetAndSuggest.EnableViewState = False <br />
8&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim myCItrad As New System.Globalization.CultureInfo("ZH-CN", True) <br />
9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim oStringWriter As New System.IO.StringWriter(myCItrad) <br />
10&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter) <br />
11&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me.dlstGetAndSuggest.RenderControl(oHtmlTextWriter) <br />
12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.Write(oStringWriter.ToString()) <br />
13&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Response.End()说明： <br />
&nbsp; &nbsp; &nbsp; &nbsp; 第4行，如果把文件名直接写作字符串格式，在导出时文件名会出现乱码，用HttpUtility.UrlEncode("学员建议--" &amp; Me.courseName, System.Text.Encoding.UTF8)，可以防止文件名为乱码。 <br />
　　第3行和第5行，防止原文中的内容导出到Excel文件时出现乱码。 </span>
<img src ="http://www.blogjava.net/jvict/aggbug/247608.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> 2008-12-21 12:44 <a href="http://www.blogjava.net/jvict/articles/247608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net导出Excel文件之方法比较</title><link>http://www.blogjava.net/jvict/articles/246025.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 12 Dec 2008 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/246025.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/246025.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/246025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/246025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/246025.html</trackback:ping><description><![CDATA[<p>http://blog.sina.com.cn/s/blog_3ecd5bc701000a1j.html<br />
<br />
web导出Excel也不是什么新鲜的话题了，到网上一查，结果一大堆。可是要挑选一个好的、合适的方法也不容易。再加上自己也没有真正的做过这方面的导出工作，到底选那种方法好呢？最近一个一个方法地试了一边，小结出来给大家做个参考。</p>
<p>测试题目：通过一个模板，导出Excel文件。(模板结构较复杂，有公式、样式、合并行等)</p>
<p>（一）、首先想到的是用服务器端的Excel软件com来生成目标Excel。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 这个是网上找到介绍最多的方法。这方法不多说了，有需要的可以到网上找，这里简单讲讲。这种方法就是调用服务器端的Excel软件，来读取模板，填写模板的。就是后台启动Excel来处理的，在进程管理器里可以查看到它的进程。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>方法缺点：服务器端要装Excel软件，处理效率低，容易产生进程无法回收。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 优点：Excel处理功能丰富，多样，可以完成一切的Excel文件处理。</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 下面是在网上找到的一个利用Excel com处理Excel文件的类，自己整理了一下，代码：</p>
<p>using System;<br />
using System.Reflection;</p>
<p>namespace MyExcelClass{<br />
&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>/// ExcelClass 的摘要说明。<br />
&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>public class ExcelClass<br />
&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 构建ExcelClass类<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public ExcelClass()<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.m_objExcel=new Excel.Application();<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 构建ExcelClass类<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="objExcel"&gt;Excel.Application&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public ExcelClass(Excel.Application objExcel)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.m_objExcel=objExcel;<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 列标号<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>private string AList="ABCDEFGHIJKLMNOPQRSTUVWX<wbr>YZ";</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 获取描述区域的字符<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public string GetAix(int x,int y)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>char [] AChars=AList.ToCharArray();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(x&gt;=26){return "";}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>string s="";<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>s=s+AChars[x-1].ToString();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>s=s+y.ToString();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return s;<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 给单元格赋值1<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x"&gt;行号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y"&gt;列号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="align"&gt;对齐（CENTER、LEFT、RIGHT）&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="text"&gt;值&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void setValue(int y,int x,string align,string text)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.set_Value(miss,text);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(align.ToUpper()=="CENTER")<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(align.ToUpper()=="LEFT")<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.HorizontalAlignment=Excel.XlHAlign.xlHAlignLeft;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(align.ToUpper()=="RIGHT")<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.HorizontalAlignment=Excel.XlHAlign.xlHAlignRight;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 给单元格赋值2<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x"&gt;行号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y"&gt;列号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="text"&gt;值&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void setValue(int y,int x,string text)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.set_Value(miss,text);<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 给单元格赋值3<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x"&gt;行号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y"&gt;列号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="text"&gt;值&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="font"&gt;字符格式&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="color"&gt;颜色&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void setValue(int y,int x,string text,System.Drawing.Font font,System.Drawing.Color color)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.setValue(x,y,text);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Size=font.Size;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Bold=font.Bold;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Color=color;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Name=font.Name;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Italic=font.Italic;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Font.Underline=font.Underline;<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 插入新行<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y"&gt;模板行号&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void insertRow(int y)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(GetAix(1,y),GetAix(25,y));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Copy(miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Insert(Excel.XlDirection.xlDown,miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.get_Range(GetAix(1,y),GetAix(25,y));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Select();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>sheet.Paste(miss,miss);</p>
<p>&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 把剪切内容粘贴到当前区域<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void past()<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>string s="a,b,c,d,e,f,g";<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>sheet.Paste(sheet.get_Range(this.GetAix(10,10),miss),s);<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 设置边框<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x1"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y1"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="x2"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="y2"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="Width"&gt;&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void setBorder(int x1,int y1,int x2,int y2,int Width)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Borders.Weight=Width;<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>public void mergeCell(int x1,int y1,int x2,int y2)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>range.Merge(true);<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>public Excel.Range getRange(int x1,int y1,int x2,int y2)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return range;<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>private object miss=Missing.Value; //忽略的参数OLENULL<br />
&nbsp;<wbr>&nbsp;<wbr>private Excel.Application m_objExcel;//Excel应用程序实例<br />
&nbsp;<wbr>&nbsp;<wbr>private Excel.Workbooks m_objBooks;//工作表集合<br />
&nbsp;<wbr>&nbsp;<wbr>private Excel.Workbook m_objBook;//当前操作的工作表<br />
&nbsp;<wbr>&nbsp;<wbr>private Excel.Worksheet sheet;//当前操作的表格</p>
<p>&nbsp;<wbr>&nbsp;<wbr>public Excel.Worksheet CurrentSheet<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>get<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return sheet;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>set<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.sheet=value;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>public Excel.Workbooks CurrentWorkBooks<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>get<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return this.m_objBooks;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>set<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.m_objBooks=value;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>public Excel.Workbook CurrentWorkBook<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>get<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return this.m_objBook;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>set<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>this.m_objBook=value;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/// &lt;summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// 打开Excel文件<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;/summary&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>/// &lt;param name="filename"&gt;路径&lt;/param&gt;<br />
&nbsp;<wbr>&nbsp;<wbr>public void OpenExcelFile(string filename)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>UserControl(false);</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.Workbooks.Open( filename,miss,miss,miss,miss,miss,miss,miss,<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> miss,miss,miss,miss,miss,miss,miss);</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBook = m_objExcel.ActiveWorkbook;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>sheet = (Excel.Worksheet)m_objBook.ActiveSheet;<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>public void UserControl(bool usercontrol)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(m_objExcel==null){return ;}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.UserControl=usercontrol;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.DisplayAlerts=usercontrol;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.Visible = usercontrol;<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>public void CreateExceFile()<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>UserControl(false);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>sheet = (Excel.Worksheet)m_objBook.ActiveSheet;<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>public void SaveAs(string FileName)<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBook.SaveAs(FileName, miss, miss, miss, miss,<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>miss, Excel.XlSaveAsAccessMode.xlNoChange,<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Excel.XlSaveConflictResolution.xlLocalSessionChanges,<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>miss,miss, miss, miss);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>//m_objBook.Close(false, miss, miss);<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>public void ReleaseExcel()<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.Quit();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objExcel);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objBooks);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>System.Runtime.InteropServices.Marshal.ReleaseComObject((object)m_objBook);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>System.Runtime.InteropServices.Marshal.ReleaseComObject((object)sheet);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel=null;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBooks=null;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objBook=null;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>sheet=null;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>GC.Collect();<br />
&nbsp;<wbr>&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>&nbsp;<wbr>/////////////////////////////////<br />
&nbsp;<wbr>&nbsp;<wbr>public bool KillAllExcelApp()<br />
&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>try<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(m_objExcel != null) // isRunning是判断xlApp是怎么启动的flag.<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel.Quit();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>//释放COM组件，其实就是将其引用计数减1<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>//System.Diagnostics.Process theProc;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>foreach(System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>//先关闭图形窗口。如果关闭失败...有的时候在状态里看不到图形窗口的excel了，<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>//但是在进程里仍然有EXCEL.EXE的进程存在，那么就需要杀掉它:p<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if( theProc.CloseMainWindow() == false )<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>theProc.Kill();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>m_objExcel = null;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return true;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>catch<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return false;<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>return true;<br />
&nbsp;<wbr>&nbsp;<wbr>}<br />
&nbsp;<wbr>&nbsp;<wbr>/////////////////////////////////////////////<br />
&nbsp;<wbr>}<br />
}<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>当然，使用的时候要先在工程引入Excel com,我用的是11版本。</p>
<p>（二）、利用MSOWC，即是微软的 office web&nbsp;<wbr>component。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 安装office就有安装到这个组件。文件和编程参考在系统盘的Program Files\Common Files\Microsoft Shared\下有Office10或者Office11版本。文件夹中还有帮助文件和例子。<br />
网上找的一段导出Excel的简短例子：</p>
<p>//请在项目中引用OWC11(COM组件)</p>
<p>OWC11.SpreadsheetClass xlsheet =new OWC11.SpreadsheetClass();<br />
//合并单元格<br />
xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[1,14]).set_MergeCells(true);<br />
xlsheet.ActiveSheet.Cells[1,1] ="一级帐表";<br />
//字体加粗<br />
xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[1,14]).Font.set_Bold(true);<br />
//单元格文本水平居中对齐<br />
xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[1,14]).set_HorizontalAlignment(OWC11.XlHAlign.xlHAlignCenter );<br />
//设置字体大小<br />
xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[1,14]).Font.set_Size(14);<br />
//设置列宽<br />
xlsheet.get_Range(xlsheet.Cells[1,3],xlsheet.Cells[1,3]).set_ColumnWidth(50);</p>
<p>//画边框线<br />
xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[10,15]).Borders.set_LineStyle(OWC11.XlLineStyle.xlContinuous );</p>
<p>//写入数据 (这里可根据需要由DS生成)<br />
for (int row=2;row&lt;10;row ) //注意写入数据时,必须从第一行开始写EXCEL里没有第"0"行<br />
{<br />
for(int i = 0 ;i&lt; 15 ;i )<br />
{<br />
xlsheet.ActiveSheet.Cells[row, i 1] =123.456;<br />
}<br />
}<br />
try<br />
{<br />
//将数字格式化为金额(要格式化的单元格内的值必须为数值型)<br />
xlsheet.get_Range(xlsheet.Cells[2,1],xlsheet.Cells[10,15]).set_NumberFormat("￥#,##0.00");<br />
xlsheet.Export("D:\\ExportToExcel\\TestOWC.xls",OWC11.SheetExportActionEnum.ssExportActionNone,OWC11.SheetExportFormat.ssExportXMLSpreadsheet);<br />
Response.Write("Export OK");<br />
}<br />
catch<br />
{<br />
}</p>
<p><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>这个方法我没有比较全面的试用过。用的时候，好像没有找到它打开Excel文件的方法，不知道是没有还是我没留心找。我在试用的时候，是用它来设计Excel表的，要画边框，设置样式等，好像很繁。<br />
（三）、导出XML类型的Excel文件。其实是一个XML文件。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 这个方法好啊，用起来放心。因为asp.net里面提供了很多丰富易用的xml类，xml处理起来明了，简单。我把原来的Excel文件保存为xml文件，用做模板。接着就是读写Xml文件了。想这么读就怎么读，想怎么写就怎么写，查找记录、改变属性值方便。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 优点：不用安装Excel等软件，处理灵活，效率高。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>缺点：Excel2000版本不支持xml，不知道其他版本支不支持。我用的是2003版本。<br />
（四）、用htm文件。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 还好Excel2000支持htm，可以把Excel内容保存到htm中。其实就是旧版本的xml吗。当然，样式和公式也可以用。我正打算用这个方法来做。(还没有去全面试用，不过自己对html还是很熟的，处理起来应该没问题。)<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 优缺点先不说，不过它代替xml在低版本的Excel中兼容。</p>
<p>（五）、网上也有说用text做中介的。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>可是这种文件表示不了样式，公式等等，格式也很死板。<br />
（六）、ado.net<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>容易出错，而且操作也不灵活，插入等经常遇到问题，而且不能删除行。比较适用于结构单一的Excel表。</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr> ////连接<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dd.xls;&nbsp;<wbr>Extended Properties="Excel 8.0;HDR=YES;"<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>HDR表示是否把第一行当作表头。如果为"NO"则系统或自动给行命名为F1,F2,F3.....等<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>///////获取默认的Excel表<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> tableName = dt.Rows[0][2].ToString().Trim();<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ///更新数据<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> update [titles$] set F1='dd'<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ///插入数据<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> INSERT INTO DataTable values(1,'e2')<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ///查询数据<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>select * from [Sheet1$] where F1=5</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 更多可以查看<a href="http://support.microsoft.com/kb/278973/#top">MSDN读取 Excel</a>&nbsp;<wbr> 和 <a href="http://support.microsoft.com/default.aspx?scid=kb;zh-cn;306023#top">MSDN写入Excel</a></p>
<p>（六）、也有方法在客户端导出Excel。就是用脚本。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/246025.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> 2008-12-12 19:33 <a href="http://www.blogjava.net/jvict/articles/246025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache设置PHP环境方法</title><link>http://www.blogjava.net/jvict/articles/236840.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 27 Oct 2008 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/236840.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/236840.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/236840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/236840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/236840.html</trackback:ping><description><![CDATA[<p><a href="http://hi.baidu.com/linsyyang/blog/item/f55cfcc770c268dad00060fe.html">http://hi.baidu.com/linsyyang/blog/item/f55cfcc770c268dad00060fe.html<br />
</a><br />
将系统更新到最新状态，在做任何操作之前都要做这一步，以确保系统的稳定，同时也不会有一些莫名其妙的现象出现。 </p>
<p>$sudo apt-get update <br />
$sudo apt-get dist-upgrade <br />
安装PHP支持 </p>
<p>$sudo apt-get install libapache2-mod-php5 <br />
$sudo apt-get install php5</p>
<p>如果想支持图形就加php5-gd，如果想支持Mysql就加php5-mysql，这里之所以要单独列出libapache2- mod-php5，主要是由于php5的依赖关系没有做好，有可能会安装上libapache-mod-php4的包，所以为了避免不必要的麻烦，干脆还 是单独指定比较好。如果有朋友还是会出现问题，请在新立得中查找libapache-mod-php4包，如果安装的话请将其删除。 <br />
根据个人需要，我们可以编辑/etc/php5/apache2/php.ini文件，先做一般配置，在改动之前，请先将该配置文件做个备份。以便在出错的时候可以恢复。 <br />
目前大多数php的open source都是用php4写的，为了兼容以前的php版本，有时需要将register_long_arrays打开，否则$HTTP_GET_VARS和$HTTP_POST_VARS等变量将无法使用，会出现一些莫名其妙的问题。 a. 另外，在装完php5後最好确认一下/etc/apache2/mods-enabled/下是否有链接： <br />
php5.load -&gt; /etc/apache2/mods-available/php5.load <br />
加固PHP，以增强安全性。注意，下面的安全性要因情况而定，所以我已经把它们的功能写清楚了，如果有问题的话，看看是否由于下面哪种限制条件所造成，可 相应将其注释掉。那么让我们开始吧,我们将再次编辑/etc/php5/apache2/php.ini文件，之所以没有一次改完，主要是为了给大家一个 清晰的思路。#打开安全模式，打开他的好处就是PHP文件只能访问所有者和PHP文件所 <br />
有着一样的文件，即使在chroot环境下也无法访问jail 中属主不一样的文 <br />
件，类似于php shell这样的後门就没用武之地了哦，phpshell是很流行 <br />
的php後门，他可以执行系统命令，就象他的名字一样，和shell很接近。 <br />
safe_mode = On <br />
#下面的设置就限制了fopen(), file()等函数可以操作的目录范围,避免了 <br />
入侵者非法读取文件,一定要在/var/www後面加"/",否则/var/wwww下的文 <br />
件也能被访问。该选项会禁止任何不在/var/www/目录下的PHP文件运行， <br />
包括任何以软链接方式链到/var/www/目录下的程序，如PhpMyAdmin 包， <br />
就在该选项设定後无法正常运行。 <br />
open_basedir = /var/www/ <br />
#禁止使用phpinfo和get_cfg_var函数，这样可以避免泄露服务信息，一 <br />
般在在确认PHP能正常工作之後再使之关闭 <br />
disable_functions = phpinfo,get_cfg_var <br />
#设置php程序错误日志 <br />
error_reporting = E_ALL <br />
log_errors = On <br />
error_log = /var/log/php_err.log <br />
#如果php程序没有指明需要register_globals的话，最好把register_globals <br />
设置为Off,这样可以避免很多安全问题的。注意，如果你的程序是 <br />
需要register_globals的话，可千万别关。Ubuntu默认是关闭的。 <br />
register_globals = Off <br />
#禁止打开远程地址,记得最近出的php include的那个漏洞吗？就是在一个 <br />
php程序中include了变量，那么入侵者就可以利用这个控制服务器在本地<br />
执行远程的一个php程序，例如phpshell,所以我们关闭这个。 <br />
allow_url_fopen = Off</p>
<img src ="http://www.blogjava.net/jvict/aggbug/236840.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> 2008-10-27 12:27 <a href="http://www.blogjava.net/jvict/articles/236840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>