`
hsyzijvaa
  • 浏览: 111771 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转]asp.net导出excel/csv格式数据最优方案(c#)

    博客分类:
  • java
阅读更多
    <p>本文转自:<a href="http://www.cnblogs.com/lovenets2008/archive/2008/05/06/1184234.html" target="_blank">http://www.cnblogs.com/lovenets2008/archive/2008/05/06/1184234.html</a></p><p>原文如下:</p><p><font style="background-color: #cce8cf;">好久没有写点什么了,也许是太忙。一年了,积累了不少好的东东,有机会时就写出来与大家分享。 </font></p><p><font style="background-color: #cce8cf;">好,言归正传。 <br>导出到excel/csc文件并不难,所以就有好多方法:控件直接render、把dataset输出成string再write出来等,(当然如果调用excel程序的库文件的话还可以使用更强的直接操作excel的方法,但这种方法用于web服务显得有点要求太高:必须让web服务器安装指定版本的excel或其支持库文件)。就其前两种方法,实际上也是一样的,render也是把由dataset转变的view生成为一个table输出到客户端而已,只不过隐藏了细节,如果不信,你用editplus什么的看看生成的.xls文件就知道了。 </font></p><p><font style="background-color: #cce8cf;">excel的识别力太强了,以至于它本身的格式、csv格式、tab分隔符格式、网页的table格式等都能够很好的打开。但是它“太聪明”了,以至于自动识别数字和字符串,而且要把超过11位的数字自动变为科学计数法的格式,你试试输入“123456789012”,离开那个单元格,就成“123457e+11”了,够聪明的吧,不过有时会让我们感觉不便,因为我输入的就是我自己的身份证号码,尾巴上没有“x”,本来好好的15位数字,得现在成这么个计数法了。那我就改改显示格式吧,改为把数字显示为文本,好了。可是国家的身份证升级了,号码变成18位,我把它输入到数据库,导出来时,用刚才的方法处理过,18位没错,可是最后三位怎么都是零了!excel为我们做了太多的事,不管是应该的还是不应该的。 </font></p><p><font style="background-color: #cce8cf;">怎么解决?请看代码: </font></p><font style="background-color: #cce8cf;"><p> public static string exporttable(dataset ds)<br> {<br> string data = "";<br> //data = ds.datasetname + "\n";</p><p> foreach (datatable tb in ds.tables)<br> {<br> //data += tb.tablename + "\n";<br> data += "&lt;table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\"&gt;";<br> //写出列名<br> data += "&lt;tr style=\"font-weight: bold; white-space: nowrap;\"&gt;";<br> foreach (datacolumn column in tb.columns)<br> {<br> data += "&lt;td&gt;" + column.columnname + "&lt;/td&gt;";<br> }<br> data += "&lt;/tr&gt;";</p><p> //写出数据<br> foreach (datarow row in tb.rows)<br> {<br> data += "&lt;tr&gt;";<br> foreach (datacolumn column in tb.columns)<br> {<br> if (column.columnname.equals("证件编号") || column.columnname.equals("报名编号"))<br> data += "&lt;td style=\"vnd.ms-excel.numberformat:@\"&gt;" + row[column].tostring() + "&lt;/td&gt;";<br> else <br> data += "&lt;td&gt;" + row[column].tostring() + "&lt;/td&gt;";<br> }<br> data += "&lt;/tr&gt;";<br> }<br> data += "&lt;/table&gt;";<br> }</p><p> return data;<br> }</p><p><br> public static void exportdstoxls(page page, string sql)<br> {<br> exportdstoxls(page, "filename", sql);<br> }<br> public static void exportdstoxls(page page, string filename, string sql)<br> {<br> dataset ds = dbutil.getdataset(sql);<br> if (ds != null) exportdstoxls(page, filename, ds);<br> }<br> public static void exportdstoxls(page page, dataset ds)<br> {<br> exportdstoxls(page, "filename", ds);<br> }<br> public static void exportdstoxls(page page, string filename, dataset ds)<br> {<br> page.response.clear();<br> page.response.buffer = true;<br> page.response.charset = "gb2312";<br> //page.response.charset = "utf-8";<br> page.response.appendheader("content-disposition", "attachment;filename=" + filename + system.datetime.now.tostring("_yymmdd_hhmm") + ".xls");<br> page.response.contentencoding = system.text.encoding.getencoding("gb2312");//设置输出流为简体中文<br> page.response.contenttype = "application/ms-excel";//设置输出文件类型为excel文件。 <br> page.enableviewstate = false;<br> page.response.write(exporttable(ds));<br> page.response.end();<br> }<br>//style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰 <br>//输出为table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有html标签的情况 在页面后台中,这样使用就可以了: </p><p> protected void lbtntoexcel_click(object sender, eventargs e)<br> {<br> string strwhere = buildsearchwherestring(); <br> string strorder = this.hidorderstring.value; <br> string sql = "select 报名编号, 证件编号, 姓名, 考区考点, 报考类别, " <br> + "行政区划名称 as 行政区划, 单位名称 as 工作单位, 毕业学校名称, 毕业专业名称 as 毕业专业, 毕业年月, " <br> + "通讯地址, 性别"<br> + " from [vw报名]"; <br> if (!string.isnullorempty(strwhere)) sql += " where " + strwhere; <br> if (!string.isnullorempty(strorder)) sql += " order by " + strorder; <br> else sql += " order by [报考类别]";<br> pageexport.exportdstoxls(this.page, "baoming", sql);<br> databind();<br> }</p><p></p></font>暂写到这里,休息。<br>更新日期:2008-5-5<p><font color="#336699">#7楼</font>[<span class="louzhu"><font color="#999999">楼主</font></span>] <font color="#999999">2008-05-09 12:33 </font><font color="#336699">爱网2008</font><font color="#336699" size="2"></font></p><p>修改了这个函数:在导出1k条数据时,估计速度提高上百倍,数据量越大越明显,原理很简单,stringbuilder的性能和“+”的性能的区别。 <br>public static string exporttable(dataset ds) <br>{ <br>stringbuilder sb = new stringbuilder(); <br>//data = ds.datasetname + "\n"; <br>int count = 0; <br><br>foreach (datatable tb in ds.tables) <br>{ <br>//data += tb.tablename + "\n"; <br>sb.appendline("&lt;meta http-equiv=\"content-type\" content=\"text/html; charset=gb2312\"&gt;"); <br>sb.appendline("&lt;table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\"&gt;"); <br>//写出列名 <br>sb.appendline("&lt;tr style=\"font-weight: bold; white-space: nowrap;\"&gt;"); <br>foreach (datacolumn column in tb.columns) <br>{ <br>sb.appendline("&lt;td&gt;" + column.columnname + "&lt;/td&gt;"); <br>} <br>sb.appendline("&lt;/tr&gt;"); <br><br>//写出数据 <br>foreach (datarow row in tb.rows) <br>{ <br>sb.append("&lt;tr&gt;"); <br>foreach (datacolumn column in tb.columns) <br>{ <br>if (column.columnname.equals("证件编号") || column.columnname.equals("报名编号")) <br>sb.append("&lt;td style=\"vnd.ms-excel.numberformat:@\"&gt;" + row[column].tostring() + "&lt;/td&gt;"); <br>else <br>sb.append("&lt;td&gt;" + row[column].tostring() + "&lt;/td&gt;"); <br>} <br>sb.appendline("&lt;/tr&gt;"); <br>count++; <br>} <br>sb.appendline("&lt;/table&gt;"); <br>} <br><br>return sb.tostring(); <br>} <br><br>稍后会提供下载版</p> 
分享到:
评论

相关推荐

    asp.net 导出 CSV

    在ASP.NET中导出CSV文件是一种常见的需求,尤其是在处理大量数据时。CSV(Comma-Separated Values)文件是一种存储表格数据的简单文件格式,每一行表示一个数据记录,字段之间用逗号分隔。以下将详细介绍如何在ASP...

    ASP.NET导出EXCEL类.rar

    这个“ASP.NET导出EXCEL类.txt”可能包含一个自定义的C#类,该类封装了数据导出到Excel的逻辑,包括创建工作簿、工作表,设置单元格值,样式等。以下是一些可能的关键知识点: 1. **创建Excel文件**:类可能使用...

    asp.net Gridview Export PDF,Word,Excel,Csv等等(GridView导出为Excel,word,pdf,csv)源代码

    然而,仅限于网页显示有时并不足够,我们常常需要将GridView中的数据导出到其他格式,如PDF、Word、Excel或CSV,以便用户可以离线查看或进一步处理。本主题主要围绕如何实现ASP.NET GridView控件的数据导出功能进行...

    导出Excel案例. asp.net c#.rar

    在ASP.NET C#环境中,导出Excel是一种常见的需求,例如数据报表、数据分析或者用户下载功能。这个"导出Excel案例. asp.net c#"的压缩包文件提供了相关的代码示例和可能的数据样本,帮助开发者理解如何在实际项目中...

    C#导出CSV格式的代码

    ### C#导出CSV格式的代码详解 在日常开发工作中,导出数据为CSV格式是一种常见的需求,尤其是在处理大量数据时。CSV(Comma-Separated Values)是一种简单且易于理解的数据格式,常用于不同系统间的数据交换。下面...

    ASP.NET中把Gridview导出为EXCEL

    在ASP.NET开发中,将Gridview控件中的数据导出到Excel是一种常见的需求,这有助于用户方便地管理和处理大量数据。下面将详细讲解如何实现这一功能,并解决中文乱码问题。 首先,我们需要理解ASP.NET Gridview的基本...

    C#百万数据导出Demo

    在C#编程中,导出大量数据到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据备份等场景中。本文将深入探讨如何在C#环境中高效地处理百万级别的数据导出,并结合“C#百万数据导出Demo”进行详细解析。 ...

    ASP.NET(C#)导入&导出Excel

    在ASP.NET(C#)开发中,导入和导出Excel是一项常见的功能需求,它涉及到Web应用程序与Microsoft Excel数据的交互。这个主题涵盖了多个知识点,包括文件流处理、数据序列化、Excel对象模型的理解以及如何利用C#语言...

    ASP.NET(c#) EXCEL操作类

    ASP.NET(C#)Excel操作类是一个用于在.NET环境中处理Microsoft Excel文件的工具类库。...通过学习和使用ASP.NET(C#)Excel操作类,开发者可以高效地处理Excel数据,提高Web应用的功能性和用户体验。

    c#.net excel的导入导出

    标题 "c#.net excel的导入导出" 描述的是使用C#编程语言和.NET框架来处理Excel文件,实现数据在Excel和数据库之间的导入导出功能。这个项目可能包含了一个完整的解决方案,供开发者参考和学习。 在.NET环境中,C#...

    CSV格式导入导出到sql数据库asp.net

    总结来说,CSV导入导出到SQL数据库是ASP.NET开发中的常见任务,通过理解CSV文件格式和掌握数据库操作技巧,可以轻松实现数据的双向交换。在实际项目中,务必遵循良好的编程实践,保证代码的可读性和可维护性。

    【ASP.NET编程知识】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题).docx

    包括ASP.NET生成静态页面的方法、ASP.NET动态生成静态页面的实例代码、ASP.NET生成Excel文件并导出下载的五种实现方法、ASP.NET生成随机验证码的代码、ASP.NET生成条形码code39条码生成方法、ASP.NET C#生成和解析...

    ASP.NET(C#)导出数据到Excel工作薄.zip

    这个压缩包文件"ASP.NET(C#)导出数据到Excel工作薄.zip"提供了一种实现这一功能的方法,主要针对的是初学者,注释详细,易于理解。 在ASP.NET中导出数据到Excel,通常我们会用到Microsoft Office Interop库,但这...

    ExcelCSVExportInAspNetCore:在Asp.Net Core中导出Excel和CSV文件的示例代码

    在Asp.Net Core中,开发人员经常需要处理数据导出功能,例如将数据库中的数据导出为Excel或CSV格式,以便用户可以下载和进一步分析。本示例代码着重讲解如何在C#环境下实现这一功能。 首先,让我们了解Excel和CSV...

    C#导出数据到EXCEL方法

    在ASP.NET Web应用程序中,经常需要将数据从datagridview组件导出到Excel文件,以便用户可以轻松地查看、编辑和共享数据。本文将详细介绍如何在C#中实现这个功能,并提供一个详细的实例源码和讲解。 首先,我们要...

    ASP.NET用DataSet导出到Excel的方法

    ***使用DataSet导出数据到Excel的详细方法涉及.NET框架下的数据操作和文件处理技术。首先,我们要明确DataSet在.NET中的作用,它是一个内存中的数据存储结构,可以包含一个或多个DataTable,用于存储数据以及表与表...

    C# Excel导入 Excel导出

    在.NET开发环境中,C#与ASP.NET结合使用可以实现高效的数据导入和导出功能,特别是与Excel文件交互。本文将详细讲解如何使用C#在ASP.NET项目中进行Excel的导入和导出操作,并重点关注速度优化。 一、Excel导入 1. ...

    ASP.NET实现SQL和Access数据直接的到导入导出

    本教程将探讨如何使用ASP.NET技术实现SQL Server与Access数据库之间的数据导入导出。这对于那些需要在不同数据库系统之间迁移数据的开发者来说,具有很高的实用价值。 首先,ASP.NET是Microsoft开发的一个Web应用...

    DataSet导出CSV格式

    在 ASP.NET 和 C# 中,我们可以使用 DataSet 的Tables 属性来遍历所有的数据表,然后使用 foreach 语句遍历每个数据表中的行和列。最后,我们可以使用 string 类型的变量来存储导出的数据。 在本文中,我们提供了一...

Global site tag (gtag.js) - Google Analytics