文档章节

POI操作Excel工具类 java实现

无知的小孩
 无知的小孩
发布于 2017/12/12 13:04
字数 853
阅读 90
收藏 0
package com.test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

// 依赖jar(poi-3.8.jar,poi-ooxml-3.8.jar,poi-ooxml-schemas-3.8.jar,xml-apis-1.0.b2.jar,xmlbeans-2.3.0.jar,dom4j-1.6.1.jar)
public class ExcelCase {
	
	final static int memoryDataCount = 7000;
	
	static String GetXlsxPath(String path){
		if(path.endsWith(".xls")){
			path = path.substring(0,path.length()-4)+".xlsx";
		}
		if(path.indexOf(".") <= 0){
			path +=".xlsx";
		}else{
			if(!(path.endsWith(".xls")
					||path.endsWith(".xlsx"))){
				path +=".xlsx";
			}
		}
		return path;
	}

	/**
	 * 
	* @Title: expSheetsResponse 
	* @Description: 导出多个工作表用Response返回(文件名,编码等请在调用前设置)
	* @param @param resp
	* @param @param sheets  参数说明
	* 多个工作薄每个需设置
	* headerZh("显示的表头"),
	* headers("取值时的字段名"),
	* sheetName(每个工作薄的名称),
	* sheetData(每个工作薄的数据List<Map<String, Object>>类型)
	* @return void    返回类型 
	* @throws
	 */
	public static void expSheetsResponse(HttpServletResponse resp,
			List<Map<String, Object>> sheets) {
		try {
			SXSSFWorkbook workbook = new SXSSFWorkbook(memoryDataCount);
			workbook.setCompressTempFiles(true);
			int sheetCount = sheets.size();
			for (int a = 0; a < sheetCount; a++) {
				Map<String, Object> objMap = sheets.get(a);
				if(objMap == null){
					continue;
				}
				String[] headerZh = (String[])objMap.get("headerZh");
				String[] headers = (String[])objMap.get("headers");
				String sheetName = (String)objMap.get("sheetName");
				@SuppressWarnings("unchecked")
				List<Map<String, Object>> sheetData = (List<Map<String, Object>>)sheets.get(a).get("sheetData");
				Sheet sheet = workbook.createSheet(sheetName);
				expSheet(sheet, resp.getOutputStream(),headerZh,headers,sheetData);
			}
			mergeWorkBookOutputStream(workbook, resp.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void expSheetResponse(HttpServletResponse resp,
			String[] headerZh, String[] headers,
			List<Map<String, Object>> listRows) {
		try {
			SXSSFWorkbook workbook = new SXSSFWorkbook(memoryDataCount);
			workbook.setCompressTempFiles(true);
			Sheet sheet = workbook.createSheet();
			expSheet(sheet, resp.getOutputStream(), headerZh, headers,
					listRows);
			mergeWorkBookOutputStream(workbook, resp.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void expSheetResponse(HttpServletResponse resp,
			String sheetName, String[] headerZh, String[] headers,
			List<Map<String, Object>> listRows) {
		try {
			SXSSFWorkbook workbook = new SXSSFWorkbook(memoryDataCount);
			workbook.setCompressTempFiles(true);
			Sheet sheet = workbook.createSheet(sheetName);
			expSheet(sheet,resp.getOutputStream(), headerZh,
					headers, listRows);
			mergeWorkBookOutputStream(workbook, resp.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void expSheetsFile(String path,List<Map<String, Object>> sheets) {
		try {
			SXSSFWorkbook workbook = new SXSSFWorkbook(memoryDataCount);
			workbook.setCompressTempFiles(true);
			FileOutputStream fout = new FileOutputStream(path);
			int sheetCount = sheets.size();
			for (int a = 0; a < sheetCount; a++) {
				Object obj = sheets.get(a);
				if(obj == null){
					continue;
				}
				String[] headerZh = (String[])sheets.get(a).get("headerZh");
				String[] headers = (String[])sheets.get(a).get("headers");
				String sheetName = (String)sheets.get(a).get("sheetName");
				@SuppressWarnings("unchecked")
				List<Map<String, Object>> sheetData = (List<Map<String, Object>>)sheets.get(a).get("sheetData");
				Sheet sheet = workbook.createSheet(sheetName);
				expSheet(sheet, fout, headerZh, headers, sheetData);
			}
			System.out.println(workbook.getNumberOfSheets());
			mergeWorkBookOutputStream(workbook, fout);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void expSheetFile(String path, String[] headerZh,
			String[] headers, List<Map<String, Object>> listRows) {
		try {
			SXSSFWorkbook workbook = new SXSSFWorkbook(memoryDataCount);
			workbook.setCompressTempFiles(true);
			FileOutputStream fout = new FileOutputStream(GetXlsxPath(path));
			Sheet sheet = workbook.createSheet();
			expSheet(sheet, fout, headerZh, headers, listRows);
			mergeWorkBookOutputStream(workbook, fout);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void expSheetFile(String path, String sheetName,
			String[] headerZh, String[] headers,
			List<Map<String, Object>> listRows) {
		try {
			Workbook hworkbook = new SXSSFWorkbook(memoryDataCount);
			FileOutputStream fout = new FileOutputStream(path);
			Sheet sheet = hworkbook.createSheet(sheetName);
			expSheet(sheet, fout, headerZh, headers, listRows);
			mergeWorkBookOutputStream(hworkbook, fout);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	static void mergeWorkBookOutputStream(Workbook workbook,
			OutputStream fout) {
		try {
			workbook.write(fout);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	static void expSheet(Sheet sheet, OutputStream fout,String[] headerZh, String[] headers,
			List<Map<String, Object>> listRows) {
		Row rowHeader = sheet.createRow(0);
		int headerSize = headerZh.length;
		for (int a = 0; a < headerSize; a++) {
			Cell cell = rowHeader.createCell(a);
			cell.setCellValue(headerZh[a]);
			sheet.setColumnWidth(a, headerZh[a].getBytes().length * 2 * 256);
		}
		int i = 1;
		for (Map<String, Object> row : listRows) {
			Row rowData = sheet.createRow(i);
			i += 1;
			for (int a = 0; a < headerSize; a++) {
				Cell cell = rowData.createCell(a);
				String value = "";
				if (row.get(headers[a]) != null) {
					value = row.get(headers[a]).toString();
				}
				cell.setCellValue(value);
			}
		}
	}
	
	static void testPath(){
		GetXlsxPath("d:\\a.xls");
		GetXlsxPath("d:\\b.xlsx");
		GetXlsxPath("d:\\c.xl");
		GetXlsxPath("d:\\d");
		System.out.println("结束单工作表导出");
	}

	public static void main(String[] args) {
		//testPath();
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		for (int b = 0; b < 800000; b++) {
			Map<String, Object> map = new HashMap<String, Object>();
			for (int a = 0; a < 11; a++) {
				map.put("field" + a, "第" + (b + 1) + "行,第" + (a + 1) + "列");
			}
			list.add(map);
		}
		String[] headerZh = { "字段1", "字段2", "字段3", "字段4", "字段5", "字段6", "字段7",
				"字段8", "字段9", "字段10", "字段11" };
		String[] headers = { "field0", "field1", "field2", "field3", "field4",
				"field5", "field6", "field7", "field8", "field9", "field10" };
		expSheetFile("d:\\aa.xls", headerZh, headers, list);
		System.out.println("结束单工作表导出");
//		List<Map<String, Object>> sheets = new ArrayList<Map<String,Object>>();
//		for(int a = 0;a<10;a++){
//			Map<String, Object> sheet = new HashMap<String, Object>();
//			sheet.put("headerZh", headerZh);
//			sheet.put("headers", headers);
//			sheet.put("sheetData", list);
//			sheet.put("sheetName", (a+1)+"工作表");
//			
//			sheets.add(sheet);
//		}
//		expSheetsFile("d:\\b.xls",sheets);
//		System.out.println("结束多工作表导出");
		
	}

}

 

© 著作权归作者所有

共有 人打赏支持
无知的小孩
粉丝 1
博文 70
码字总数 19034
作品 0
贵阳
后端工程师
私信 提问
Java Apache POI 操作 Excel 导出

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82655653 Java Apache POI 操作 Excel 导出 Java 可以通过 Apache POI......

asing1elife
2018/09/12
0
0
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW
2012/10/26
1K
0
使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2

简介 在 developerWorks DB2 上本文的 先行篇 中,我们研究了 Apache 的 POI 项目的开放源代码产品。期间,我们开始在了解 SQL 的技术专家和通常将电子表格选作工具的商务专家之间架起一座桥...

红薯
2008/12/05
922
0
Apache POI操作Excel导出JAVABEAN对象方法

Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件的强大API,其中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel,因为Word和PowerPoin...

JAVA枪手
2014/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis缓存的装饰器模式

一般在开发生产中,对于新需求的实现,我们一般会有两种方式来处理,一种是直接修改已有组件的代码,另一种是使用继承方式。第一种显然会破坏已有组件的稳定性。第二种,会导致大量子类的出现...

算法之名
昨天
12
0
单元测试

右键方法 Go To --> Test,简便快速生成测试方法。 相关注解 @RunWith(SpringRunner.class) 表示要在测试环境中跑,底层实现是 jUnit测试工具。 @SpringBootTest 表示启动整个 Spring工程 @A...

imbiao
昨天
3
0
欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
昨天
5
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
昨天
3
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部