`
kimmking
  • 浏览: 546659 次
  • 性别: Icon_minigender_1
  • 来自: 中华大丈夫学院
社区版块
存档分类
最新评论

web导出excel文件的几种方法

阅读更多

经常有人问怎么导出数据到excel文件。

 

web导出excel文件的几种方法

 

KimmKing

kimmking@163.com

20099410:19:09

 

总的来说,两种方法:服务器端生成和浏览器端生成。

 

服务器端生成就是:根据用户请求,获取相应的数据,使用poi/jxl, jacob/jawin+excel,或是用数据拼htmltable或是cvs纯文本的数据格式等。然后按.xls或是.cvs格式的文件的形式返回给用户,指定Content-Type:application/vnd.ms-excel ,浏览器就会提示要下载的文件是excel文件。

poi/jxl, jacob/jawin生成的是excelbiff格式。html/csv的是文本格式,不另存为excel文件,很多excel功能是用不了的。jacob/jawin需要服务器端是windows系统,且安装了excel2000以上版本。poi/jxlhtml/csv方式的话,服务器端可以跨平台。

 

浏览器端生成excel文件还没有特别完善的方案,这是因为js无法处理二进制。大概有以下几个方案,各有利弊。

1.       activex方式:使用js/vbs调用excel对象,http://setting.iteye.com/blog/219302,有个extjsgridpanel导出为excel的例子。            ie+excel

2.       ie命令方式:将html或是csv输出到openwindow,然后使用execCommandsaveas命令,存为csvxls                                               (ie6 only)

3.       服务器端中转方式:将htmltable或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。                                (all)

4.       data协议方式:对于支持data协议的浏览器,可以将html或是csv先用js base64处理,然后前缀data:application/vnd.ms-excel;base64,,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件,可惜的是ie不支持。extjs的官网有一个gridplugin,实现导出xhtml格式的伪excel文件,就是这么做的。   (except IE)

 

浏览器端只有第一种方案导出的是真正的biff格式的excel文件,其他方式都是文本格式。activex方式只能在windows平台的ie浏览器使用,而且需要降低ie的安全性,所以应用比较有限。复杂的excel文件,还是在服务器端用poi/jxl生成excel比较好。如果浏览器固定位ie6,浏览器端方式2是最好的方案。如果要降低服务器端cpu的计算压力,客户端方案3可行,而且跨平台(比poi/jxl方式少了取数和生成二进制文件)。如果是非ie浏览器,方案4也不失为一种好方法。

 

 

ps: 还有一个方案,就是让安装了ieexcel的用户在网页上右键,点击“导出到 Microsoft Excel”,然后可以选择要导出的table区域,点“导入”按钮,完成导入。

 

 

 

分享到:
评论
26 楼 ningmenglovesoft 2009-09-22  
好像除了apache poi 外。jxl也可以支持导出导入吧。不过本人还是比较支持服务端支持。。哈哈
25 楼 whaosoft 2009-09-16  
恩,有个效果就更好啦
24 楼 Wisdom7 2009-09-16  
我用得最多还是JXLS,除了合并单元格和组织数据有点麻烦外,效果还是不错的
23 楼 wst302 2009-09-15  
一般使用jasperreports + ireport 进行xls的操作,导出,poi排版不灵活,繁琐
22 楼 kimmking 2009-09-10  
iaimstar 写道
最美的csv,格式简单的txt换个名就可以了
我接触的情况是这样
应用只提供csv文件

客户想看的时候有专门的终端把csv--》pdf 和 excle
简单的直接打开就好

上面说的50M的文本数据就是csv的。
21 楼 iaimstar 2009-09-10  
最美的csv,格式简单的txt换个名就可以了
我接触的情况是这样
应用只提供csv文件

客户想看的时候有专门的终端把csv--》pdf 和 excle
简单的直接打开就好
20 楼 kimmking 2009-09-09  
花花公子 写道
kimmking 写道
bruce.peng 写道
3.       服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。   
-------------------------------------------------------------------------------
假设我现在客户端有 2W 条数据,我用这种方式会不会不适合,数据会不会太多 ?



数据量比较大,推荐还是用activex方式。
我们测过近50M的文本数据,导出excel,动态出交叉表

数据量比较大,可以保存临时文件然后发给用户

最后的实际方案是服务器端压缩到2M左右,下载,然后vba调用zlib解压,然后导入excel,使用exreport出交叉表。
19 楼 花花公子 2009-09-09  
kimmking 写道
bruce.peng 写道
3.       服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。   
-------------------------------------------------------------------------------
假设我现在客户端有 2W 条数据,我用这种方式会不会不适合,数据会不会太多 ?



数据量比较大,推荐还是用activex方式。
我们测过近50M的文本数据,导出excel,动态出交叉表

数据量比较大,可以保存临时文件然后发给用户
18 楼 kimmking 2009-09-09  
bruce.peng 写道
3.       服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。   
-------------------------------------------------------------------------------
假设我现在客户端有 2W 条数据,我用这种方式会不会不适合,数据会不会太多 ?



数据量比较大,推荐还是用activex方式。
我们测过近50M的文本数据,导出excel,动态出交叉表
17 楼 bluemusic 2009-09-09  
viMory 写道
kimmking 写道
viMory 写道
十分感谢kimmking的分享 ,问个问题:用POI处理后,导出的Excel单元格格式能否设置成文本类型的?代码中我设置格式为HSSFCell.CELL_TYPE_STRING,导出后单元格格式为常规类型的,这样我一输入2009-09-05常规类型就会自动转换成日期类型!



excel是输入后判断的,你说的这个跟poi没关系。
试试将一个单元格格式设置为文本,键入2009-09-05,还是会成为日期2009-9-5
解决办法是输入'2009-09-05,前缀一个单引号,就会保留格式


THKS,不过这个还是要手改下,我想自动生成文本格式的!你用的那个方法dsoframer+excel 导出的单元格格式可以设置成文本的么?另,LS的兄弟,jasperreport可以生成文本格式的单元格吗?

当然可以,通常用iReport来视图化编辑,里面有属性可以选择选中就行了。常用2.x。现在3.x出来还没用过。
16 楼 saistarz 2009-09-09  
用过jxl和方案1的到处方法,感觉都不错哦。
方案1适合做那种公司内部系统,规定统一使用ie浏览器,统一设置安全级别就ok啦!
如果是基于外网的系统,那就不合适啦,可以导不出来的话,就会打电话投诉的,他才不管你怎么实现呢!
15 楼 bruce.peng 2009-09-09  
3.       服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。   
-------------------------------------------------------------------------------
假设我现在客户端有 2W 条数据,我用这种方式会不会不适合,数据会不会太多 ?
14 楼 lixinlixin2008 2009-09-08  
data协议不错
其他浏览器都支持了
除了该死的 IE...
13 楼 Jwind 2009-09-08  
请问是否有关于导出word的总结?
12 楼 viMory 2009-09-08  
kimmking 写道
viMory 写道
十分感谢kimmking的分享 ,问个问题:用POI处理后,导出的Excel单元格格式能否设置成文本类型的?代码中我设置格式为HSSFCell.CELL_TYPE_STRING,导出后单元格格式为常规类型的,这样我一输入2009-09-05常规类型就会自动转换成日期类型!



excel是输入后判断的,你说的这个跟poi没关系。
试试将一个单元格格式设置为文本,键入2009-09-05,还是会成为日期2009-9-5
解决办法是输入'2009-09-05,前缀一个单引号,就会保留格式


THKS,不过这个还是要手改下,我想自动生成文本格式的!你用的那个方法dsoframer+excel 导出的单元格格式可以设置成文本的么?另,LS的兄弟,jasperreport可以生成文本格式的单元格吗?
11 楼 bluemusic 2009-09-08  
1,jasperreport导出的excel经过封装后用下来感觉非常不错。可以玩交叉报表,横向纵向都分别group by。当然手工调直线对齐确实有些麻烦。
2,jxl来做用流输出也是种很好的方式。麻烦的是数据定位的行和列要指定下。效果能达到预期。
3,poi类似jxl,不过可能功能有些什么限制。我用得并不多。
10 楼 kimmking 2009-09-07  
GaoJimmy 写道
力挺jasper 除网页差点  pdf excel都不错。
对于列数太多的报表,大家是这么处理的?
我是一行数据中再分行来做,但不美观也不直观
       field1   field2
name   field3   field4
       field5   field6
————————————
        male     22
joe      cn      175
         66      cole
—————————————
        male    27
terry    cn     180
         78      John

我用的最多的是dsoframer+excel

http://code.google.com/p/exreport/
9 楼 GaoJimmy 2009-09-07  
力挺jasper 除网页差点  pdf excel都不错。
对于列数太多的报表,大家是这么处理的?
我是一行数据中再分行来做,但不美观也不直观
       field1   field2
name   field3   field4
       field5   field6
————————————
        male     22
joe      cn      175
         66      cole
—————————————
        male    27
terry    cn     180
         78      John
8 楼 kimmking 2009-09-07  
viMory 写道
十分感谢kimmking的分享 ,问个问题:用POI处理后,导出的Excel单元格格式能否设置成文本类型的?代码中我设置格式为HSSFCell.CELL_TYPE_STRING,导出后单元格格式为常规类型的,这样我一输入2009-09-05常规类型就会自动转换成日期类型!



excel是输入后判断的,你说的这个跟poi没关系。
试试将一个单元格格式设置为文本,键入2009-09-05,还是会成为日期2009-9-5
解决办法是输入'2009-09-05,前缀一个单引号,就会保留格式
7 楼 会飞的狗 2009-09-07  
貌似jasper report也支持excel导出,不过实际效果不好

相关推荐

    DataGrid导出EXCEL的几个方法(WebControl)

    ### DataGrid导出EXCEL的几种方法:深入探讨与实践 在Web开发中,将数据导出为Excel格式是常见的需求之一,尤其是当涉及到大量数据分析和报表制作时。本文将详细解析如何使用ASP.NET中的DataGrid控件实现数据导出至...

    DataGrid导出EXCEL的几个方法(WebControl).rar

    接下来,我们将详细探讨几种常见的DataGrid数据导出到Excel的方法。 1. **Response.Write和HTML表格** 这是最基础的方法,它利用了Excel能够识别HTML表格的特性。首先,通过遍历DataGrid的Item对象,生成HTML表格...

    asp.net导出数据到Excel的几种方法 学习心得

    以下将详细讨论几种常见的导出方法,特别是基于控件的HTML渲染方式。 首先,我们来了解一下最常用的方法,即利用控件的`RenderControl`功能。这个方法的基本思路是,先将ASP.NET网页中的控件(如GridView、DataGrid...

    WebExcel文件展现

    在ASP.NET中实现WebExcel文件展现,通常涉及到以下几个关键知识点: 1. **服务器控件**:ASP.NET提供了一些服务器控件,如Microsoft Office Interop库,可以直接在网页上嵌入Excel文件。不过,这种方式会消耗大量...

    WEB页面导出为EXCEL文档的方法

    下面将详细介绍几种常见的方法。 1. **JavaScript**: - 使用`window.open()`函数配合`application/vnd.ms-excel` MIME类型:在HTML元素上添加`onclick`事件,触发`window.open()`,将网页内容重定向到一个新的...

    Vue+axios+WebApi+NPOI导出Excel文件实例方法

    对于导出方案,有以下几种常见方法: 1. **使用location.href**:直接打开接口地址,但这种方法无法传递token,安全性较低,且仅支持GET请求。 2. **axios请求生成并保存文件**:先在服务器生成并保存文件,返回...

    lodop导出ExcelDemo

    5. 执行导出:调用LODOP的相应方法,执行数据到Excel的转换,并通常会提供一个下载对话框供用户保存文件。 "exe"标签可能指的是LODOP服务端程序的可执行文件,它在服务器端运行,处理来自浏览器的打印请求。用户在...

    asp.net里导出excel表方法汇总

    下面将详细介绍 ASP.NET 中几种常见的导出 Excel 的方法及其实现原理。 #### 方法一:使用 DataSet 直接生成 Excel 文件 此方法适用于简单的情况,即直接将内存中的数据集(DataSet)转换成 Excel 文件格式。具体...

    java生成Excel及jar包和文件下载的几种方式

    首先,让我们了解一下Java生成Excel的几种常见库: 1. **JXL库**:压缩包中的`jxl.jar`文件就是JXL库,这是一个广泛使用的Java库,用于读写Excel文件。JXL支持多种Excel操作,如创建工作簿、添加工作表、设置单元格...

    html静态读取excel文件

    另一种方式是使用Web Workers或Service Worker,但这种方法实现起来较为复杂。 总的来说,HTML通过JavaScript读取Excel文件需要结合HTML5的File API、Excel解析库(如SheetJS)以及可能的跨域解决方案。理解这些...

    C# 将数据导出到Excel汇总

    本文将基于给定的文件信息,深入探讨C#中将数据导出到Excel的几种方法,包括在ASP.NET环境中导出Excel的具体步骤。 #### ASP.NET中导出Excel的方法概览 在ASP.NET中导出数据到Excel主要分为两种基本策略:一是将...

    C#利用Response流将数据库数据导出成Excel

    在本文中,我们将探讨如何使用C#语言将数据库数据导出到Excel文件中。 Response流 在C#中,Response流是指ASP.NET框架中用于将数据发送到客户端的流媒体。Response流可以将服务器端的数据推送到客户端,实现实时...

    ASP_NET导出Excel数据方法总结

    本篇文章将深入探讨几种在ASP.NET环境中导出Excel数据的方法,包括它们的工作原理、优缺点以及适用场景。 #### 方法一:引用COM组件 这种方法通过直接调用Excel COM组件,将数据从DataTable导入至Excel单元格,并...

    C#导出数据到EXCEL方法

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

    js导出excel的方法

    在Web开发中,经常需要将数据导出到Excel文件中,以便用户能够方便地查看或进一步处理这些数据。本文将详细介绍几种使用JavaScript实现导出数据到Excel的方法,包括利用ActiveX对象的方式以及纯JavaScript的方式。 ...

    asp.net中如何导出excel表的几个方法

    ASP.NET 中导出 Excel 表的几个方法 在 ASP.NET 开发过程中,经常需要将数据导出到 Excel 表中,以便于用户查看和分析数据。这篇文章将介绍三种在 ASP...这些方法可以根据需要选择使用,以便将数据导出到 Excel 表中。

    Ext Grid 导出Excel

    总结来说,"Ext Grid 导出Excel"这个话题涵盖了从JavaScript数据结构到Excel文件格式转换的过程,涉及到的主要技术有Ext JS的Grid和Store组件,以及第三方库SheetJS。这个过程对于那些需要提供数据导出功能的Web应用...

    asp.net里导出excel表方法汇总.

    在 ASP.NET 开发中,经常需要将数据导出到 Excel 文件中,以供用户下载或进一步分析使用。本文将详细介绍 ASP.NET 中常用的几种导出 Excel 的方法及其实现细节。 #### 一、通过 DataSet 生成 Excel 文件 这种方法...

    kettle循环导出数据到Excel中

    总之,Kettle循环导出数据到Excel是一种实用的数据处理方法,尤其适合处理大型数据集。它提供了强大的工具和灵活性,能够满足各种ETL需求,而不仅仅是数据导出。通过熟练掌握Kettle,IT专业人士能够更高效地管理和...

    ASP.NET中把Gridview导出为EXCEL

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

Global site tag (gtag.js) - Google Analytics