Excel通用导出List<Object>对象到excel文件

很早之前写过一个通用的读取模块,使用比较麻烦,当时只写了读取,没有写文件的功能。


原文章:Excel通用读取模块


这次的这个方法,不需要很麻烦的在类中写参数,但是需要配置一个xml文件。


程序根据xml文件来对List<Object>对象进行格式化输出。


程序中只需要调用一个方法即可完成。

方法:



使用该方法的方法:

String xmlPath = "E:/Workspaces/hbxnb/List2Excel/src/TestObj.xml";
		String filePath = "E:/";
		
		String fileName = "text";
		
		ExpListObjExcelVS.expListObjFile(list, xmlPath, filePath, fileName);


通过上面的调用方法,应该发现,使用的时候挺简单的,写的稍微有点多的其实是xml文件。

xml文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<excel>
	<!-- 
		必填项为:name,header,其他全部选填
		
		title:excel表格中第一行合并单元格居中显示的内容
		description:第二行显示的说明
		author:xml作者,不会输出
		sheet:导出excel的sheet名
		columns:导出列的信息
			column:一个列
				name:列对应Object中的字段名,必须有标准的get方法
				header:导出excel中显示的标题
				width:列宽(单位像素)
	 -->
	<title>人员信息导出</title>
	<description>这里是描述信息</description>
	<author>isea533</author>
	<sheet>人员信息</sheet>
	<columns>
		<column>
			<name>name</name>
			<header>姓名</header>
			<width>200</width>
		</column>
		<column>
			<name>country</name>
			<header>国籍</header>
			<width>50</width>
		</column>
		<column>
			<name>birthday</name>
			<header>生日</header>
			<width>160</width>
		</column>
		<column>
			<name>age</name>
			<header>年龄</header>
		</column>
		<column>
			<name>str4</name>
			<header>字符串4</header>
		</column>
		<column>
			<name>str2</name>
			<header>字符串2</header>
		</column>
		<column>
			<name>str3</name>
			<header>字符串3</header>
		</column>
		<column>
			<name>str1</name>
			<header>字符串1</header>
		</column>
		<column>
			<name>str5</name>
			<header>字符串5</header>
		</column>
	</columns>
</excel>


测试导出excel结果如下图:



 


程序源码:http://download.csdn.net/detail/isea533/5087046

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
这段代码是一个Excel导出的实现,其中包含了两种导出方式:前端导出和本地导出。具体实现如下: 1. 首先创建一个SXSSFWorkbook对象,表示整个Excel表格。 2. 遍历sheetMap中的每个Sheet页,创建对应的Sheet对象,并将Sheet页的名称设置为entry.getKey()。 3. 对于每个Sheet页,遍历其对应的数据列表sheetDataList,创建对应的行和单元格,并将数据填充到单元格中。 4. 对于每个Sheet页,如果有需要下拉选择的单元格,将其加入到数据验证中。 5. 如果response不为空,则表示前端导出,将book写入response流中。否则,表示本地导出,将book写入文件中。 下面是代码的具体实现: ```java private static void export(HttpServletResponse response, File file, String fileName, Map<String, List<List<Object>>> sheetMap, Map<Integer, List<String>> selectMap) { // 整个 Excel 表格 book 对象 SXSSFWorkbook book = new SXSSFWorkbook(); // 每个 Sheet 页 Set<Entry<String, List<List<Object>>>> entries = sheetMap.entrySet(); for (Entry<String, List<List<Object>>> entry : entries) { List<List<Object>> sheetDataList = entry.getValue(); Sheet sheet = book.createSheet(entry.getKey()); Drawing<?> patriarch = sheet.createDrawingPatriarch(); // 遍历每一行数据 for (int i = 0; i < sheetDataList.size(); i++) { Row row = sheet.createRow(i); List<Object> rowDataList = sheetDataList.get(i); // 遍历每个单元格 for (int j = 0; j < rowDataList.size(); j++) { Cell cell = row.createCell(j); Object cellData = rowDataList.get(j); // 判断单元格数据类型,并设置单元格格式 if (cellData instanceof String) { cell.setCellValue((String) cellData); } else if (cellData instanceof Number) { cell.setCellValue(((Number) cellData).doubleValue()); } else if (cellData instanceof Date) { cell.setCellValue((Date) cellData); CellStyle style = book.createCellStyle(); style.setDataFormat(book.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")); cell.setCellStyle(style); } else if (cellData instanceof Calendar) { cell.setCellValue((Calendar) cellData); CellStyle style = book.createCellStyle(); style.setDataFormat(book.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")); cell.setCellStyle(style); } else if (cellData instanceof Boolean) { cell.setCellValue((Boolean) cellData); } else if (cellData == null) { cell.setCellValue(""); } // 设置下拉选择 if (selectMap.containsKey(j)) { List<String> selectList = selectMap.get(j); DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = helper.createExplicitListConstraint(selectList.toArray(new String[0])); CellRangeAddressList addressList = new CellRangeAddressList(cell.getRowIndex(), cell.getRowIndex(), cell.getColumnIndex(), cell.getColumnIndex()); DataValidation validation = helper.createValidation(constraint, addressList); sheet.addValidationData(validation); } } } } // 导出Excel if (response != null) { // 前端导出 try { write(response, book, fileName); } catch (IOException e) { e.printStackTrace(); } } else { // 本地导出 FileOutputStream fos; try { fos = new FileOutputStream(file); ByteArrayOutputStream ops = new ByteArrayOutputStream(); book.write(ops); fos.write(ops.toByteArray()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 其中,write()方法用于将book写入response流中,实现前端导出。具体实现如下: ```java private static void write(HttpServletResponse response, SXSSFWorkbook book, String fileName) throws IOException { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1")); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); OutputStream os = response.getOutputStream(); book.write(os); os.flush(); os.close(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值