﻿<?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>IT博客-skl-随笔分类-.net</title><link>http://www.cnitblog.com/skl/category/7910.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 03:50:12 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 03:50:12 GMT</pubDate><ttl>60</ttl><item><title>asp.net页面弹出对话框</title><link>http://www.cnitblog.com/skl/archive/2009/01/05/53496.html</link><dc:creator>单</dc:creator><author>单</author><pubDate>Mon, 05 Jan 2009 03:03:00 GMT</pubDate><guid>http://www.cnitblog.com/skl/archive/2009/01/05/53496.html</guid><wfw:comment>http://www.cnitblog.com/skl/comments/53496.html</wfw:comment><comments>http://www.cnitblog.com/skl/archive/2009/01/05/53496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/skl/comments/commentRss/53496.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/skl/services/trackbacks/53496.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: .net   弹出框&nbsp;&nbsp;<a href='http://www.cnitblog.com/skl/archive/2009/01/05/53496.html'>阅读全文</a><img src ="http://www.cnitblog.com/skl/aggbug/53496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/skl/" target="_blank">单</a> 2009-01-05 11:03 <a href="http://www.cnitblog.com/skl/archive/2009/01/05/53496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net 从excel 导入时 提示：不是预期的格式错误 解决方法 </title><link>http://www.cnitblog.com/skl/archive/2008/12/25/53035.html</link><dc:creator>单</dc:creator><author>单</author><pubDate>Thu, 25 Dec 2008 09:03:00 GMT</pubDate><guid>http://www.cnitblog.com/skl/archive/2008/12/25/53035.html</guid><wfw:comment>http://www.cnitblog.com/skl/comments/53035.html</wfw:comment><comments>http://www.cnitblog.com/skl/archive/2008/12/25/53035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/skl/comments/commentRss/53035.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/skl/services/trackbacks/53035.html</trackback:ping><description><![CDATA[最近一个项目用到excel的导入和导出，遇到了这个问题，
<p>把数据导出为excel文件后，修改部分数据，然后再导入该excel文件时就会</p>
<p>提示&#8220;不是预期的格式错误&#8221;。经过详细的排查，发现导出后的excel文件格式</p>
<p>不是真正的 Microsoft Office Excel 的文件格式，而是html的格式的excel文件，</p>
<p>大家可以通过 用记事本 打开该excel文件来验证，</p>
<p>如果打开是乱码，说明是Microsoft Office Excel 的文件格式，此格式文件导入是没有问题的。</p>
<p>如果打开是不是乱码，你就会发现是一些 html格式的代码，此时的excel文件在导入的时候就会报上边的错误。</p>
<p>然后再继续检查原因，发现如果用的是通过HttpContext.Current.Response的方式，改变ContentType的类型来输出的excel，那么导出的excel文件的格式就是html类型的excel文件。</p>
<p>如果采用excel组件的方式来导出excel文件，那么导出的excel文件的格式就是正常的可以导入的格式。</p>
<p>到此问题基本解决，希望对遇到同样问题的朋友有所帮助！</p>
<p>另：如果把导出的html格式的excel文件打开，另存为 正确的excel文件格式的话，也是可以正常导入的。</p>
<img src ="http://www.cnitblog.com/skl/aggbug/53035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/skl/" target="_blank">单</a> 2008-12-25 17:03 <a href="http://www.cnitblog.com/skl/archive/2008/12/25/53035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#将数据导出到Execl的方法</title><link>http://www.cnitblog.com/skl/archive/2008/12/19/52834.html</link><dc:creator>单</dc:creator><author>单</author><pubDate>Fri, 19 Dec 2008 06:59:00 GMT</pubDate><guid>http://www.cnitblog.com/skl/archive/2008/12/19/52834.html</guid><wfw:comment>http://www.cnitblog.com/skl/comments/52834.html</wfw:comment><comments>http://www.cnitblog.com/skl/archive/2008/12/19/52834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/skl/comments/commentRss/52834.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/skl/services/trackbacks/52834.html</trackback:ping><description><![CDATA[<div class=ArticleTitle>&nbsp;</div>
<div class=ArticleBlog>
<div class=ArticleBlogText>
<div id=ArticleBlogButtons style="MARGIN-BOTTOM: 4px" align=right>&nbsp;</div>
<div id=BlogArticleDetail style="FONT-SIZE: 14px"><span style="COLOR: rgb(255,0,0)">一、asp.net中导出Execl的方法：</span><br><br>在asp.net中导出Execl有两种方法，一种是将导出的文件存放在服务器某个文件夹下面，然后将文件地址输出在浏览器上；一种是将文件直接将文件输出流写给浏览器。在Response输出时，t分隔的数据，导出execl时，等价于分列，n等价于换行。<br><span style="COLOR: rgb(0,0,255)">1、将整个html全部输出execl</span><br><br>此法将html中所有的内容，如按钮，表格，图片等全部输出到Execl中。<br>&nbsp;&nbsp; Response.Clear();&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; Response.Buffer=&nbsp;&nbsp; true;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; Response.AppendHeader("Content-Disposition","attachment;filename="+DateTime.Now.ToString("yyyyMMdd")+".xls");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; Response.ContentEncoding=System.Text.Encoding.UTF8; &nbsp;<br>&nbsp;&nbsp; Response.ContentType&nbsp;&nbsp; =&nbsp;&nbsp; "application/vnd.ms-excel"; &nbsp;<br>&nbsp;&nbsp; this.EnableViewState&nbsp;&nbsp; =&nbsp;&nbsp; false; &nbsp;<br><br><br>这里我们利用了ContentType属性，它默认的属性为text/html，这时将输出为超文本，即我们常见的网页格式到客户端，如果改为ms-excel将将输出excel格式，也就是说以电子表格的格式输出到客户端，这时浏览器将提示你下载保存。ContentType的属性还包括：image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。同理，我们也可以输出(导出)图片、word文档等。下面的方法，也均用了这个属性。<br><br style="COLOR: rgb(0,0,255)"><span style="COLOR: rgb(0,0,255)">2、将DataGrid控件中的数据导出Execl</span><br><br>上述方法虽然实现了导出的功能，但同时把按钮、分页框等html中的所有输出信息导了进去。而我们一般要导出的是数据，DataGrid控件上的数据。<br>System.Web.UI.Control ctl=this.DataGrid1;<br>//DataGrid1是你在窗体中拖放的控件<br>HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");<br>HttpContext.Current.Response.Charset ="UTF-8";&nbsp;&nbsp; &nbsp;<br>HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;<br>HttpContext.Current.Response.ContentType ="application/ms-excel";<br>ctl.Page.EnableViewState =false;&nbsp; &nbsp;<br>System.IO.StringWriter&nbsp; tw = new System.IO.StringWriter() ;<br>System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);<br>ctl.RenderControl(hw);<br>HttpContext.Current.Response.Write(tw.ToString());<br>HttpContext.Current.Response.End();<br><br><br>如果你的DataGrid用了分页，它导出的是当前页的信息，也就是它导出的是DataGrid中显示的信息。而不是你select语句的全部信息。<br><br>为方便使用,写成方法如下：<br>public void DGToExcel(System.Web.UI.Control ctl) &nbsp;<br>&nbsp; {<br>&nbsp;&nbsp; HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");<br>&nbsp;&nbsp; HttpContext.Current.Response.Charset ="UTF-8";&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;<br>&nbsp;&nbsp; HttpContext.Current.Response.ContentType ="application/ms-excel";<br>&nbsp;&nbsp; ctl.Page.EnableViewState =false;&nbsp; &nbsp;<br>&nbsp;&nbsp; System.IO.StringWriter&nbsp; tw = new System.IO.StringWriter() ;<br>&nbsp;&nbsp; System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);<br>&nbsp;&nbsp; ctl.RenderControl(hw);<br>&nbsp;&nbsp; HttpContext.Current.Response.Write(tw.ToString());<br>&nbsp;&nbsp; HttpContext.Current.Response.End();<br>&nbsp; }<br><br><br>&nbsp;&nbsp; 用法：DGToExcel(datagrid1);<br>&nbsp; <br><span style="COLOR: rgb(0,0,255)">3、将DataSet中的数据导出Execl</span><br><br>有了上边的思路，就是将在导出的信息，输出（Response）客户端，这样就可以导出了。那么把DataSet中的数据导出，也就是把DataSet中的表中的各行信息，以ms-excel的格式Response到http流，这样就OK了。说明：参数ds应为填充有数据表的DataSet，文件名是全名，包括后缀名，如execl2006.xls<br><br>public&nbsp; void CreateExcel(DataSet ds,string FileName) <br>{<br>&nbsp;HttpResponse resp;<br>&nbsp;resp = Page.Response;<br>&nbsp;resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");<br>&nbsp;resp.AppendHeader("Content-Disposition", "attachment;filename="+FileName);&nbsp; &nbsp;<br>&nbsp;string colHeaders= "", ls_item="";&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;//定义表对象与行对象，同时用DataSet对其值进行初始化<br>&nbsp;DataTable dt=ds.Tables[0];<br>&nbsp;DataRow[] myRow=dt.Select();//可以类似dt.Select("id&gt;10")之形式达到数据筛选目的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int cl=dt.Columns.Count;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;//取得数据表各列标题，各标题之间以t分割，最后一个列标题后加回车符<br>&nbsp;for(i=0;i&lt;cl;i++)<br>&nbsp;{<br>&nbsp;if(i==(cl-1))//最后一列，加n<br>&nbsp;{<br>&nbsp;colHeaders +=dt.Columns[i].Caption.ToString() +"n";<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;colHeaders+=dt.Columns[i].Caption.ToString()+"t";<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;}<br>&nbsp;resp.Write(colHeaders);<br>&nbsp;//向HTTP输出流中写入取得的数据信息<br>&nbsp; &nbsp;<br>&nbsp;//逐行处理数据 &nbsp;<br>&nbsp;foreach(DataRow row in myRow)<br>&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;//当前行数据写入HTTP输出流，并且置空ls_item以便下行数据&nbsp;&nbsp; &nbsp;<br>&nbsp;for(i=0;i&lt;cl;i++)<br>&nbsp;{<br>&nbsp;if(i==(cl-1))//最后一列，加n<br>&nbsp;{<br>&nbsp;ls_item +=row[i].ToString()+"n";<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;ls_item+=row[i].ToString()+"t";<br>&nbsp;}<br>&nbsp; <br>&nbsp;}<br>&nbsp;resp.Write(ls_item);<br>&nbsp;ls_item="";<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;}&nbsp;&nbsp; &nbsp;<br>&nbsp;resp.End(); <br>&nbsp;}<br><br><br><span style="COLOR: rgb(0,0,255)">4、将dataview导出execl</span><br>若想实现更加富于变化或者行列不规则的execl导出时，可用本法。<br>public void OutputExcel(DataView dv,string str)<br>{<br>&nbsp;&nbsp; //dv为要输出到Excel的数据，str为标题名称<br>&nbsp;&nbsp; GC.Collect();<br>&nbsp;&nbsp; Application excel;// = new Application();<br>&nbsp;&nbsp; int rowIndex=4;<br>&nbsp;&nbsp; int colIndex=1;<br>&nbsp;<br>&nbsp;&nbsp; _Workbook xBk;<br>&nbsp;&nbsp; _Worksheet xSt;<br>&nbsp;<br>&nbsp;&nbsp; excel= new ApplicationClass();<br>&nbsp; <br>&nbsp;&nbsp; xBk = excel.Workbooks.Add(true);<br>&nbsp; &nbsp;<br>&nbsp;&nbsp; xSt = (_Worksheet)xBk.ActiveSheet;<br>&nbsp;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //取得标题<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; foreach(DataColumn col in dv.Table.Columns)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; colIndex++;<br>&nbsp;&nbsp;&nbsp; excel.Cells[4,colIndex] = col.ColumnName;<br>&nbsp;&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐<br>&nbsp;&nbsp; }<br>&nbsp;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //取得表格中的数据<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; foreach(DataRowView row in dv)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; rowIndex ++;<br>&nbsp;&nbsp;&nbsp; colIndex = 1;<br>&nbsp;&nbsp;&nbsp; foreach(DataColumn col in dv.Table.Columns)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; colIndex ++;<br>&nbsp;&nbsp;&nbsp;&nbsp; if(col.DataType == System.Type.GetType("System.DateTime"))<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(col.DataType == System.Type.GetType("System.String"))<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //加载一个合计行<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; int rowSum = rowIndex + 1;<br>&nbsp;&nbsp; int colSum = 2;<br>&nbsp;&nbsp; excel.Cells[rowSum,2] = "合计";<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //设置选中的部分的颜色<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色，共计有56种<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //取得整个报表的标题<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; excel.Cells[2,2] = str;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //设置整个报表的标题格式<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //设置报表表格为最适应宽度<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //设置整个报表的标题为跨列居中<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //绘制边框<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗<br>&nbsp;&nbsp; xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; //显示效果<br>&nbsp;&nbsp; //<br>&nbsp;&nbsp; excel.Visible=true;<br>&nbsp;<br>&nbsp;&nbsp; //xSt.Export(Server.MapPath(".")+""+this.xlfile.Text+".xls",SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);<br>&nbsp;&nbsp; xBk.SaveCopyAs(Server.MapPath(".")+""+this.xlfile.Text+".xls");<br>&nbsp;<br>&nbsp;&nbsp; ds = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xBk.Close(false, null,null);<br>&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excel.Quit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);<br>&nbsp;&nbsp;&nbsp; System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xBk = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excel = null;<br>&nbsp;&nbsp; xSt = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GC.Collect();<br>&nbsp;&nbsp; string path = Server.MapPath(this.xlfile.Text+".xls");<br>&nbsp;<br>&nbsp;&nbsp; System.IO.FileInfo file = new System.IO.FileInfo(path);<br>&nbsp;&nbsp; Response.Clear();<br>&nbsp;&nbsp; Response.Charset="GB2312";<br>&nbsp;&nbsp; Response.ContentEncoding=System.Text.Encoding.UTF8;<br>&nbsp;&nbsp; // 添加头信息，为"文件下载/另存为"对话框指定默认文件名<br>&nbsp;&nbsp; Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));<br>&nbsp;&nbsp; // 添加头信息，指定文件大小，让浏览器能够显示下载进度<br>&nbsp;&nbsp; Response.AddHeader("Content-Length", file.Length.ToString());<br>&nbsp; &nbsp;<br>&nbsp;&nbsp; // 指定返回的是一个不能被客户端读取的流，必须被下载<br>&nbsp;&nbsp; Response.ContentType = "application/ms-excel";<br>&nbsp; &nbsp;<br>&nbsp;&nbsp; // 把文件流发送到客户端<br>&nbsp;&nbsp; Response.WriteFile(file.FullName);<br>&nbsp;&nbsp; // 停止页面的执行<br>&nbsp; <br>&nbsp;&nbsp; Response.End();<br>}<br><br><br>&nbsp; <br>&nbsp;&nbsp; 上面的方面，均将要导出的execl数据，直接给浏览器输出文件流，下面的方法是首先将其存到服务器的某个文件夹中，然后把文件发送到客户端。这样可以持久的把导出的文件存起来，以便实现其它功能。<br>5、将execl文件导出到服务器上，再下载。<br><br><span style="COLOR: rgb(255,0,0)">二、winForm中导出Execl的方法：</span><br><br><span style="COLOR: rgb(0,0,255)">方法1：</span><br><br>&nbsp;&nbsp; SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);<br>&nbsp;&nbsp; SqlDataAdapter da=new SqlDataAdapter("select * from tb1",conn);<br>&nbsp;&nbsp; DataSet ds=new DataSet();<br>&nbsp;&nbsp; da.Fill(ds,"table1");<br>&nbsp;&nbsp; DataTable dt=ds.Tables["table1"];<br>&nbsp;&nbsp; string name=System.Configuration.ConfigurationSettings.AppSettings["downloadurl"].ToString()+DateTime.Today.ToString("yyyyMMdd")+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+".csv";//存放到 web.config中downloadurl指定的路径，文件格式为当前日期+4位随机数<br>&nbsp;&nbsp; FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write);<br>&nbsp;&nbsp; StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("gb2312"));<br>&nbsp;&nbsp; sw.WriteLine("自动编号,姓名,年龄");<br>&nbsp;&nbsp; foreach(DataRow dr in dt.Rows)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; sw.WriteLine(dr["ID"]+","+dr["vName"]+","+dr["iAge"]);<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; sw.Close();<br>&nbsp;&nbsp; Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name));<br>&nbsp;&nbsp; Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流，必须被下载<br>&nbsp;&nbsp; Response.WriteFile(name); // 把文件流发送到客户端<br>&nbsp;&nbsp; Response.End();<br><br><br>&nbsp;<br>public void Out2Excel(string sTableName,string url)<br>{<br>Excel.Application oExcel=new Excel.Application();<br>Workbooks oBooks;<br>Workbook oBook;<br>Sheets oSheets;<br>Worksheet oSheet;<br>Range oCells;<br>string sFile="",sTemplate="";<br>//<br>System.Data.DataTable dt=TableOut(sTableName).Tables[0];<br><br>sFile=url+"myExcel.xls";<br>sTemplate=url+"MyTemplate.xls";<br>//<br>oExcel.Visible=false;<br>oExcel.DisplayAlerts=false;<br>//定义一个新的工作簿<br>oBooks=oExcel.Workbooks;<br>oBooks.Open(sTemplate,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing);<br>oBook=oBooks.get_Item(1);<br>oSheets=oBook.Worksheets;<br>oSheet=(Worksheet)oSheets.get_Item(1);<br>//命名该sheet<br>oSheet.Name="Sheet1";<br><br>oCells=oSheet.Cells;<br>//调用dumpdata过程，将数据导入到Excel中去<br>DumpData(dt,oCells);<br>//保存<br>oSheet.SaveAs(sFile,Excel.XlFileFormat.xlTemplate,Type.Missing,Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);<br>oBook.Close(false, Type.Missing,Type.Missing);<br>//退出Excel，并且释放调用的COM资源<br>oExcel.Quit();<br><br>GC.Collect();<br>KillProcess("Excel");<br>}<br><br>private void KillProcess(string processName)<br>{<br>System.Diagnostics.Process myproc= new System.Diagnostics.Process();<br>//得到所有打开的进程<br>try<br>{<br>foreach (Process thisproc in Process.GetProcessesByName(processName))<br>{<br>if(!thisproc.CloseMainWindow())<br>{<br>thisproc.Kill();<br>}<br>}<br>}<br>catch(Exception Exc)<br>{<br>throw new Exception("",Exc);<br>}<br>}<br><br><br><span style="COLOR: rgb(0,0,255)">方法2：</span><br>protected void ExportExcel()<br>&nbsp; {<br>&nbsp;&nbsp; gridbind();<br>&nbsp;&nbsp; if(ds1==null) return;<br>&nbsp;<br>&nbsp;&nbsp; string saveFileName="";<br>//&nbsp;&nbsp; bool fileSaved=false;<br>&nbsp;&nbsp; SaveFileDialog saveDialog=new SaveFileDialog();<br>&nbsp;&nbsp; saveDialog.DefaultExt ="xls";<br>&nbsp;&nbsp; saveDialog.Filter="Excel文件|*.xls";<br>&nbsp;&nbsp; saveDialog.FileName ="Sheet1";<br>&nbsp;&nbsp; saveDialog.ShowDialog();<br>&nbsp;&nbsp; saveFileName=saveDialog.FileName;<br>&nbsp;&nbsp; if(saveFileName.IndexOf(":")&lt;0) return; //被点了取消<br>//&nbsp;&nbsp; excelapp.Workbooks.Open&nbsp;&nbsp; (App.path &amp; 工程进度表.xls)<br>&nbsp; <br>&nbsp;&nbsp; Excel.Application xlApp=new Excel.Application();<br>&nbsp;&nbsp; object missing=System.Reflection.Missing.Value;<br>&nbsp;<br><br>&nbsp;&nbsp; if(xlApp==null)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; MessageBox.Show("无法创建Excel对象，可能您的机子未安装Excel");<br>&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; Excel.Workbooks workbooks=xlApp.Workbooks;<br>&nbsp;&nbsp; Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);<br>&nbsp;&nbsp; Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1<br>&nbsp;&nbsp; Excel.Range range;<br>&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;&nbsp; string oldCaption=Title_label .Text.Trim ();<br>&nbsp;&nbsp; long totalCount=ds1.Tables[0].Rows.Count;<br>&nbsp;&nbsp; long rowRead=0;<br>&nbsp;&nbsp; float percent=0;<br>&nbsp;<br>&nbsp;&nbsp; worksheet.Cells[1,1]=Title_label .Text.Trim ();<br>&nbsp;&nbsp; //写入字段<br>&nbsp;&nbsp; for(int i=0;i&lt;ds1.Tables[0].Columns.Count;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; worksheet.Cells[2,i+1]=ds1.Tables[0].ColumnsIdea [I].ColumnName; <br>&nbsp;&nbsp;&nbsp; range=(Excel.Range)worksheet.Cells[2,i+1];<br>&nbsp;&nbsp;&nbsp; range.Interior.ColorIndex = 15;<br>&nbsp;&nbsp;&nbsp; range.Font.Bold = true;<br>&nbsp;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; //写入数值<br>&nbsp;&nbsp; Caption .Visible = true;<br>&nbsp;&nbsp; for(int r=0;r&lt;ds1.Tables[0].Rows.Count;r++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;ds1.Tables[0].Columns.Count;i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; worksheet.Cells[r+3,i+1]=ds1.Tables[0].Rows[r];&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; rowRead++;<br>&nbsp;&nbsp;&nbsp; percent=((float)(100*rowRead))/totalCount;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; this.Caption.Text= "正在导出数据["+ percent.ToString("0.00")&nbsp; +"%]...";<br>&nbsp;&nbsp;&nbsp; Application.DoEvents();<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; worksheet.SaveAs(saveFileName,missing,missing,missing,missing,missing,missing,missing,missing);<br>&nbsp; &nbsp;<br>&nbsp;&nbsp; this.Caption.Visible= false;<br>&nbsp;&nbsp; this.Caption.Text= oldCaption;<br>&nbsp;<br>&nbsp;&nbsp; range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[ds1.Tables[0].Rows.Count+2,ds1.Tables[0].Columns.Count]);<br>&nbsp;&nbsp; range.BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin,Excel.XlColorIndex.xlColorIndexAutomatic,null);<br>&nbsp; <br>&nbsp;&nbsp; range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;<br>&nbsp;&nbsp; range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle =Excel.XlLineStyle.xlContinuous;<br>&nbsp;&nbsp; range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight =Excel.XlBorderWeight.xlThin;<br>&nbsp;<br>&nbsp;&nbsp; if(ds1.Tables[0].Columns.Count&gt;1)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex=Excel.XlColorIndex.xlColorIndexAutomatic;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; workbook.Close(missing,missing,missing);<br>&nbsp;&nbsp; xlApp.Quit();<br>&nbsp; }<br><br><br style="COLOR: rgb(255,0,0)"><span style="COLOR: rgb(255,0,0)">三、附注：</span><br>虽然都是实现导出 execl的功能，但在asp.net和winform的程序中，实现的代码是各不相同的。在asp.net中，是在服务器端读取数据，在服务器端把数据以ms-execl的格式，以Response输出到浏览器（客户端)；而在winform中，是把数据读到客户端（因为winform运行端就是客户端），然后调用客户端安装的office组件，将读到的数据写在execl的工作簿中。</div>
</div>
</div>
<img src ="http://www.cnitblog.com/skl/aggbug/52834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/skl/" target="_blank">单</a> 2008-12-19 14:59 <a href="http://www.cnitblog.com/skl/archive/2008/12/19/52834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.net中的全局唯一标识</title><link>http://www.cnitblog.com/skl/archive/2008/12/17/52718.html</link><dc:creator>单</dc:creator><author>单</author><pubDate>Wed, 17 Dec 2008 07:31:00 GMT</pubDate><guid>http://www.cnitblog.com/skl/archive/2008/12/17/52718.html</guid><wfw:comment>http://www.cnitblog.com/skl/comments/52718.html</wfw:comment><comments>http://www.cnitblog.com/skl/archive/2008/12/17/52718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/skl/comments/commentRss/52718.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/skl/services/trackbacks/52718.html</trackback:ping><description><![CDATA[.net全局唯一标识符：System.Guid.NewGuid()
<img src ="http://www.cnitblog.com/skl/aggbug/52718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/skl/" target="_blank">单</a> 2008-12-17 15:31 <a href="http://www.cnitblog.com/skl/archive/2008/12/17/52718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net(c#)上传图片并生成缩略图的代码</title><link>http://www.cnitblog.com/skl/archive/2008/12/17/52707.html</link><dc:creator>单</dc:creator><author>单</author><pubDate>Wed, 17 Dec 2008 05:27:00 GMT</pubDate><guid>http://www.cnitblog.com/skl/archive/2008/12/17/52707.html</guid><wfw:comment>http://www.cnitblog.com/skl/comments/52707.html</wfw:comment><comments>http://www.cnitblog.com/skl/archive/2008/12/17/52707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/skl/comments/commentRss/52707.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/skl/services/trackbacks/52707.html</trackback:ping><description><![CDATA[<p>// 按模版比例生成缩略图（以流的方式获取源文件）<br>//生成缩略图函数<br>//顺序参数：源图文件流、缩略图存放地址、模版宽、模版高<br>//注：缩略图大小控制在模版区域内<br>public static void MakeSmallImg(System.IO.Stream fromFileStream,string fileSaveUrl,System.Double templateWidth,System.Double templateHeight)<br>{<br>//从文件取得图片对象，并使用流中嵌入的颜色管理信息<br>System.Drawing.Image myImage = System.Drawing.Image.FromStream(fromFileStream,true); </p>
<p>//缩略图宽、高<br>System.Double newWidth = myImage.Width , newHeight = myImage.Height;<br>//宽大于模版的横图<br>if(myImage.Width&gt;myImage.Height || myImage.Width==myImage.Height)<br>{<br>if(myImage.Width &gt; templateWidth)<br>{<br>//宽按模版，高按比例缩放<br>newWidth = templateWidth;<br>newHeight = myImage.Height * (newWidth/myImage.Width);<br>}<br>}<br>//高大于模版的竖图<br>else<br>{<br>if(myImage.Height &gt; templateHeight)<br>{<br>//高按模版，宽按比例缩放<br>newHeight = templateHeight;<br>newWidth = myImage.Width * (newHeight/myImage.Height);<br>}<br>} </p>
<p>//取得图片大小<br>System.Drawing.Size mySize = new Size((int)newWidth,(int)newHeight);<br>//新建一个bmp图片<br>System.Drawing.Image bitmap = new System.Drawing.Bitmap(mySize.Width,mySize.Height);<br>//新建一个画板<br>System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);<br>//设置高质量插值法<br>g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;<br>//设置高质量,低速度呈现平滑程度<br>g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;<br>//清空一下画布<br>g.Clear(Color.White);<br>//在指定位置画图<br>g.DrawImage(myImage , new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height) , <br>new System.Drawing.Rectangle(0, 0, myImage.Width,myImage.Height) , <br>System.Drawing.GraphicsUnit.Pixel); </p>
<p>///文字水印<br>//System.Drawing.Graphics G=System.Drawing.Graphics.FromImage(bitmap);<br>//System.Drawing.Font f=new Font("宋体",10);<br>//System.Drawing.Brush b=new SolidBrush(Color.Black);<br>//G.DrawString("myohmine",f,b,10,10);<br>//G.Dispose(); </p>
<p>///图片水印<br>//System.Drawing.Image copyImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("pic/1.gif"));<br>//Graphics a = Graphics.FromImage(bitmap);<br>//a.DrawImage(copyImage, new Rectangle(bitmap.Width-copyImage.Width,bitmap.Height-copyImage.Height,copyImage.Width, copyImage.Height),0,0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel); </p>
<p>//copyImage.Dispose();<br>//a.Dispose();<br>//copyImage.Dispose(); </p>
<p>//保存缩略图<br>bitmap.Save(fileSaveUrl , System.Drawing.Imaging.ImageFormat.Jpeg); </p>
<p>g.Dispose();<br>myImage.Dispose();<br>bitmap.Dispose();<br>} <br></p>
<img src ="http://www.cnitblog.com/skl/aggbug/52707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/skl/" target="_blank">单</a> 2008-12-17 13:27 <a href="http://www.cnitblog.com/skl/archive/2008/12/17/52707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>