`
fwgforce
  • 浏览: 10074 次
  • 性别: Icon_minigender_1
  • 来自: 中国
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何将数据导出为EXCEL格式

阅读更多

如何将数据导出为EXCEL格式

作者:fwgforce

[本文章原创,如需转载,请注明作者和链接]

    第一步:我们先设置一下自己的EXCEL将要导出的样式,这可以是一个公有的方法:

public void designTableStyle(HSSFSheet sheet, HSSFWorkbook workbook,String[] headers) {
		//设置表格默认列宽度为15个字节
		sheet.setDefaultColumnWidth((short) 20);
		// 生成一个样式
		// 设置这些样式
		HSSFCellStyle style = workbook.createCellStyle();
		style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);

		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

		style.setBorderRight(HSSFCellStyle.BORDER_THIN);

		style.setBorderTop(HSSFCellStyle.BORDER_THIN);

		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

		// 生成一个字体

		HSSFFont font = workbook.createFont();

		font.setColor(HSSFColor.VIOLET.index);

		font.setFontHeightInPoints((short) 12);

		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

		// 把字体应用到当前的样式

		style.setFont(font);

		// 生成并设置另一个样式

		HSSFCellStyle style2 = workbook.createCellStyle();

		style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);

		style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

		style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

		style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

		style2.setBorderRight(HSSFCellStyle.BORDER_THIN);

		style2.setBorderTop(HSSFCellStyle.BORDER_THIN);

		style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

		style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		// 生成另一个字体

		HSSFFont font2 = workbook.createFont();

		font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

		// 把字体应用到当前的样式

		style2.setFont(font2);
		HSSFRow row = sheet.createRow(0);

		for (short i = 0; i < headers.length; i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellStyle(style);
			HSSFRichTextString text = new HSSFRichTextString(headers[i]);
			cell.setCellValue(text);

		}
	}

 

 下面是我的一个ACTION类里面执行导出的方法:返回到前台的是一个流,然后弹出提示保存.注意紫色的地方

 

@Scope("prototype")
@Service("dataExportAction")
public class DataExportAction {
	private InputStream excelStream;
	private String shtName = "";
	public String buildingExport() {
		//要导出的数据
		List<Building> list = buildingService.getBuildAll();
		String[] headers = { "楼宇名称", "楼宇地址", "楼宇开发商", "楼宇占地面积(㎡)", "建筑面积(㎡)",
				"楼层数量", "楼层面积", "房间总数", "房内净高", "竣工时间", "经营单位(1)", "经营单位(2)",
				"经营单位(3)", "入住时间", "楼宇类型 二级", "物业公司", "物业等级", "建筑总高", "车位个数",
				"空调设置", "电梯数", "所属街道", "周边设施", "交通状况", "招商方向", "可招商面积(㎡)",
				"待招商面积(㎡)", "合作方式", "入住主要行业", "入驻企业数", "租金", "物业费", "联系人",
				"联系电话", "闲置面积", "备注", "楼宇产权", "楼宇分类", "楼宇等级", "楼宇排序号" };
		try {	
			shtName = getFileName("楼宇信息表");//必须给它配一个get(),set(),方法,方便调用
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			// 声明一个工作薄
			HSSFWorkbook workbook = new HSSFWorkbook();
			// 生成一个表格
			HSSFSheet sheet = workbook.createSheet("楼宇信息表");

			// 生成一个样式
			designTableStyle(sheet, workbook, headers);
			//开始往EXCEL里写数据,循环你要的数据,每行每行的往里面插入
			for (int i = 0; i < list.size(); i++) {
				HSSFRow row2 = sheet.createRow(i + 1);
				Object object = list.get(i);
				if (headers.length == 1) {
					if (null != object) {
						for (int j = 0; j < headers.length; j++) {
							if (null != object) {
								//处理日期格式
								if (object instanceof Date) {
									Date date = (Date) object;
									SimpleDateFormat sdf = new SimpleDateFormat(
											"yyyy-MM-dd");
									object = sdf.format(date);

								}
								HSSFCell createCell = row2.createCell(j);
								createCell.setCellValue(object.toString());
							}

						}
					}
				} else if (headers.length > 1) {
					if (null != object) {
						Object[] objs = (Object[]) (object);
						for (int j = 0; j < headers.length; j++) {
							if (null != objs[j]) {
								//处理日期格式
								if (objs[j] instanceof Date) {
									Date date = (Date) objs[j];
									SimpleDateFormat sdf = new SimpleDateFormat(
											"yyyy-MM-dd");
									objs[j] = sdf.format(date);
								}
								HSSFCell createCell = row2.createCell(j);
								createCell.setCellValue(objs[j].toString());
							}

						}
					}
				}

			}
			workbook.write(out);
			byte[] byteArray = out.toByteArray();
			excelStream = new ByteArrayInputStream(byteArray);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return Action.SUCCESS;
	}
	public void setShtName(String shtName) {
		this.shtName = shtName;
	}

	public InputStream getExcelStream() {
		return excelStream;
	}

	public void setExcelStream(InputStream excelStream) {
		this.excelStream = excelStream;
	}
}

 

 然后配置文件如下:

	<!-- 楼宇信息表数据导出 -->
		  <action name="buildingExport" class="dataExportAction"	method="buildingExport" > 
			<!-- 失败跳转的页面,根据需要自定义的 -->        
			<result name="error">/data/export_data.jsp</result>
			<!-- 成功跳转的页面,根据需要自定义的 -->
			<result name="success" type="stream">/data/export_data.jsp
			<param name="contentType">application/vnd.ms-excel;charset=UTF-8</param>   
             			<param name="inputName">excelStream</param>
            			<param name="contentDisposition">attachment;filename="${shtName}"</param>
             			</result>
		</action>

  上传配置说明:

一,关于struts.xml参数

 

<struts>
  <package  name="technicalInformationAction"   extends="Action">
   
    <default-action-ref name="download"/>
  
     <action name="downLoad" class="com.DownLoadAction">
               
                <!--这里的返回值并不是字符串,而是一个流类型-->  
                <result name="success" type="stream">
                
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                
                <param name="inputName">inputStream</param>
                     
                 <!--这里需要将文件名进行转码,转码后将值赋予downloadFileName,对应文中的getDownloadFileName()-->        
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 
               
                <param name="bufferSize">4096</param>
                
                </result> 
     </action> 
  
  </package>
</struts>

1、contentDisposition:文件下载的处理方式:包括内联(inline)和附件(attachment),附件方式会弹出保存文件的对话框,否则浏览器会尝试直接显示文件。一般默认值为attachment;filename="${fileName}",其中,filename表示使用经过转码的文件名作为下载文件名,""号中间既可以直接加文件名,又可以将调用该Action中的getFileName方法。{}内,一定要去掉get并把第一个大写字母变小写。

困扰1:乱码问题。

       如果要下载的文件包含中文字符,会导致下载下来的文件名称变成乱码,或者干脆出现“InternetExplore无法打开该站点”错误。

2、contentType:下载文件的文件类型,和互联网MIME标准钟的规定类型一致,application/octet-stream 表示无限制。其他类型见附言。

3、inputName:下载文件的来源流,通常就是“流对象名”,对应着action类中某个InputStream类型的属性名,例如:取值为inputStream的属性需要编写getInputStream()方法。一旦xml文件读到inputStream,它就会自动去找Action中的getInputStream方法。

4、bufferSize表示下载缓冲区的大小。

二,action类的编写

import java.io.InputStream;
 
import org.apache.struts2.ServletActionContext;
 
public class DownloadAction {
       
        private String fileName;
       
        public void setFileName(String fileName) {
                this.fileName = fileName;
        }
        public InputStream getInputStream() {
                return ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);
        }
       
        public String execute(){
                return "success";
        }
 
}
需要注意的就是使用getResourceAsStream方法时,文件路径必须是以“/”开头,且是相对路径。这个路径是相对于项目根目录(WEB-INFO下)的。

可以用return new FileInputStream(fileName)的方法来得到绝对路径的文件。

 

三,测试

在WEB-INF下随意丢一个test.txt,部署好后进入浏览器,输入tomcat地址/项目路径/download.action?fileName=test.txt即可下载到该文件。

详细请看http://blog.163.com/lizhenming_2008/blog/static/765583332009220115857856/

 

 

 

附:contentType类型.
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javas

cript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
't' => 'application/x-troff',
'tr' => 'application/x-troff',
'roff' => 'application/x-troff',
'man' => 'application/x-troff-man',
'me' => 'application/x-troff-me',
'ms' => 'application/x-troff-ms',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'pdb' => 'chemical/x-pdb',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'wbmp' => 'image/vnd.wap.wbmp',
'ras' => 'image/x-cmu-raster',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'etx' => 'text/x-setext',
'xsl' => 'text/xml',
'xml' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mxu' => 'video/vnd.mpegurl',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk'

 

本文配备部分导出说明和JAR包下载!有什么不明白的可以在线联系或加QQ:745270812一起探讨下,鄙人新手.

  • 大小: 61.4 KB
3
4
分享到:
评论

相关推荐

    C#把数据导出为Excel格式

    ### C#将数据导出为Excel格式的知识点详解 #### 一、导出到Excel的基本原理与步骤 在本示例中,我们主要探讨如何使用C#编程语言将数据导出为Excel格式。该示例提供了较为完整的实现过程,包括用户界面交互、Excel...

    易语言高级表格快速导出EXCEL.7z

    《易语言高级表格快速导出EXCEL》是一个关于如何在易语言编程环境中高效地将数据导出为Excel格式的教程。易语言是中国本土开发的一种面向对象的、易学易用的编程语言,它旨在降低编程的难度,让更多人能够参与到程序...

    java 将数据导出到Excel中

    在Java开发中,将数据导出到Excel是一种常见的需求,特别是在数据分析、报表生成或数据交换等场景下。Excel因其易用性和丰富的格式设置能力,成为处理结构化数据的理想选择。本篇文章将深入探讨如何利用Java实现这一...

    将数据库的内容导出到excel

    点击“Finish”,Myeclipse会将数据导出为Excel格式。 5. **Excel的用途** Excel是一种广泛使用的电子表格程序,对于数据的整理、计算、图表制作等功能非常强大。将数据库中的数据导出到Excel后,你可以进行更深入...

    easyui+数据导出为Excel

    在IT行业中,前端数据处理和展示是至关重要的,特别是在企业级应用中,用户往往需要将大量数据导出为便于分析的格式,如Excel。本文将详细介绍如何在基于EasyUI的前端框架下实现数据导出为Excel的功能。 EasyUI是一...

    C# 将数据导出到Excel汇总

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

    Qt中将QTableView中的数据导出为Excel文件实例

    原文为《Qt中将QTableView中的数据导出为Excel文件&gt;&gt;,地址http://blog.csdn.net/superjoel/article/details/5321404,资源比较难下载,我下载好帮作者上传下。实例可用,简单易懂,对于QTableView导出为excel...

    Data From Keil to Excel (keil数据导出至excel)

    为了将这些数据导出到Excel,我们需要在KEIL中设置数据导出选项。通常,KEIL可以通过仿真器或调试器的内存查看器来查看和复制内存数据。在内存窗口中选择要导出的数据范围,然后通过复制(Ctrl+C)将数据粘贴到Excel...

    asp.net+Ajax实现Excel文件导出

    在IT行业中,Web应用经常需要提供数据导出功能,尤其是将数据导出为Excel格式,以便用户进行数据分析或存储。本篇文章将详细讲解如何利用ASP.NET与Ajax技术实现在Web应用中导出Excel文件。 首先,ASP.NET是...

    easyui datagrid 数据导出到Excel

    在实际工作中,我们经常需要将这些展示的数据导出到Excel文件,以便进行进一步的分析或存储。下面将详细介绍两种有效的方法来实现EasyUI Datagrid数据导出到Excel的功能,并结合提供的文件名来推测具体实现步骤。 *...

    PB数据窗口导出Excel

    标题中的“PB数据窗口导出Excel”指的是在PowerBuilder(PB)环境中,使用数据窗口对象将数据导出到Microsoft Excel格式的过程。数据窗口是PowerBuilder中的一个重要组件,它用于显示和操作数据库中的数据,提供了...

    数据导出到Excel.html

    数据导出到Excel.html ,数据导出到Excel.html

    Qt将Sqlite中的数据导出为Excel

    本篇我们将探讨如何利用Qt将SQLite数据库中的数据导出到Excel格式,这是一个实用的功能,尤其对于需要数据分析和报告的项目。 首先,让我们理解这个过程的基本步骤: 1. **连接SQLite数据库**:使用`QSqlDatabase`...

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

    数据导出是指将数据库数据导出到其他文件格式的过程。在上面的代码中,我们使用了Response流将数据库数据导出到Excel文件中。数据导出功能广泛应用于各种软件系统中,例如报表生成、数据分析等。 本文介绍了如何...

    oracle导出数据生成excel

    - SQL Developer:Oracle的免费数据库管理工具,提供数据导出功能,包括直接导出为Excel格式。 - TOAD:商业数据库管理工具,支持更高级的数据导出选项,包括直接生成Excel报告。 5. **安全性与最佳实践** - 当...

    C#导出Excel,利用第三方控件,改变导出样式,字体等

    在C#编程中,我们经常需要将数据导出为Excel格式以便用户进行分析或进一步处理。在.NET框架中,虽然可以使用Microsoft.Office.Interop.Excel库来实现这个功能,但这种方法需要安装Office环境,且运行时效率较低。...

    将数据导成excel

    在IT行业中,将数据导出为Excel文件是一种常见的需求,特别是在数据分析、报表生成以及数据交换等场景中。这里,我们关注的是如何利用Struts2框架将数据转化为Excel格式。Struts2是一个流行的Java web开发框架,它...

    nodejs将mysql数据库中的数据导出成excel表格文件

    接下来,要将数据库中的数据导出为Excel文件,我们可以使用`xlsx`或` SheetJS `库。`xlsx`库是一个强大的工具,能够读取、写入多种电子表格格式,包括XLS、XLSX和CSV等。在`excel.js`文件中,开发者可能定义了函数,...

    导出万能Excel(最精开发版)

    例如,Google Sheets API支持直接将数据导出为Excel格式。 5. **Excel模板**: 创建预设格式和计算的Excel模板可以提高效率,尤其是在需要多次生成相同格式报告的情况下。开发者可以通过编程控制填充模板,自动化...

Global site tag (gtag.js) - Google Analytics