`
ztiny
  • 浏览: 1793 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

用POI 写了个导出EXCEL 应该算通用吧

阅读更多
//创建一个工作薄
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import org.apache.poi.ss.usermodel.Workbook;

import com.excel.type.WorkBookType;


public interface  WorkBookHandler {
	 
	public Workbook  createWorkBook(WorkBookType type);
}




// 因为里面类型可以能比较多,所以都是用接口,这样修改代码比较方法
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.excel.type.WorkBookType;

public class WorkBookHandlerImpl implements WorkBookHandler {

	@Override
	public Workbook  createWorkBook(WorkBookType type) {
		if(type==WorkBookType.XLS){
			return new HSSFWorkbook();
		}else if(type==WorkBookType.XLSX){
			return new XSSFWorkbook();
		}else{
			return null;
		}
	}

}


//在在工作薄里面创建一个sheet面板

/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import java.util.List;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public interface SheetService {
	 List<Sheet> createSheet(Workbook wb,String... sheetNames);
}



//实现
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class SheetServiceImpl implements SheetService {

	@Override
	public List<Sheet> createSheet(Workbook wb, String... sheetNames) {
		String defaultName = "sheet_1";
		List<Sheet> list = new ArrayList<Sheet>();
		if(wb==null){
			return null;
		}
		if(sheetNames==null || sheetNames.length==0){
			Sheet sheet = wb.createSheet(defaultName);
			list.add(sheet);
		}
		
		for (int i = 0; i < sheetNames.length; i++) {
			Sheet sheet = wb.createSheet(defaultName);
			list.add(sheet);
		}
		return list;
	}
	
}




//创建列
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public interface CellService {
	 void createCells(Workbook workbook,CellData datas,Sheet sheet,HSSFCellStyle style);
}


//同样是实现
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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 com.excel.util.Util;

public  class CellServiceImpl implements CellService {


	/**
	 *没有样式的列
	 *@param datas 数据源
	 *@param sheet excel里面的Sheet面板对象
	 */
	@Override
	public void createCells(Workbook wb,CellData dataSource,Sheet sheet,HSSFCellStyle style) {
		if(sheet==null || dataSource==null){
			return ;
		}
		//设置标题
		Row row = sheet.createRow(0);
		List<String> titles = dataSource.getTitlesList();
        
		for(int m=0;m<titles.size();m++){
			Cell cell = row.createCell(m);
			cell.setCellValue(titles.get(m));
			cell.setCellStyle(style);
		}
		Map<String,List<String>> map = dataSource.getMap();
		if(map==null || map.size()<1){
			return ;
		}
		Iterator<Entry<String,List<String>>> it = (Iterator<Entry<String,List<String>>>) map.entrySet().iterator();
		int i = 1;
		while(it.hasNext()){
			
			Entry<String,List<String>> entry = it.next();
			//第二行开始设置值
			Row rows = sheet.createRow(i);
			List<String> list = entry.getValue();
			for (int j = 0; j <list.size(); j++) {
				Cell cell = rows.createCell(j);
				String value = Util.isBigNumber(list.get(j))!=true?list.get(j):list.get(j)+"`";
				cell.setCellValue(value);
			}
			i++;
		}
	    
	}
}



//列的数据源

/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public class CellData implements Serializable{

	private static final long serialVersionUID = 1L;
	/**列的名称**/
	private List<String> titlesList;
	/**根据列名称对应值**/
	private Map<String,List<String>> map;
	
	public List<String> getTitlesList() {
		return titlesList;
	}
	public void setTitlesList(List<String> titlesList) {
		this.titlesList = titlesList;
	}
	public Map<String, List<String>> getMap() {
		return map;
	}
	public void setMap(Map<String, List<String>> map) {
		this.map = map;
	}
}


//客户端调用
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.client;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import com.excel.type.WorkBookType;
import com.excel.workbook.CellData;
import com.excel.workbook.CellService;
import com.excel.workbook.CellServiceImpl;
import com.excel.workbook.GlobalStyle;
import com.excel.workbook.SheetService;
import com.excel.workbook.SheetServiceImpl;
import com.excel.workbook.WorkBookHandler;
import com.excel.workbook.WorkBookHandlerImpl;

public class ExcelClient {
	
	public void createExcel(String fileName, CellData cellDatas,WorkBookType workType){
		
		if(fileName==null || fileName.equals("")){
			return ;
		}
		if(workType==null){
			workType = WorkBookType.XLS;
		}
		
		WorkBookHandler workBook = new WorkBookHandlerImpl();
		Workbook workbook = workBook.createWorkBook(workType);
		
		SheetService sheetService = new SheetServiceImpl();	
		List<Sheet> sheets = sheetService.createSheet(workbook);
		
		CellService cellService = new CellServiceImpl();
		for (Sheet sheet2 : sheets) {
			cellService.createCells(workbook,cellDatas, sheet2,GlobalStyle.titleStyle(workbook));
		}
		FileOutputStream fileOut = null;
		BufferedOutputStream bo = null;
		try{
			fileOut = new FileOutputStream(new File(fileName));
			bo = new BufferedOutputStream(fileOut);
			workbook.write(bo);
		}catch(IOException ex){
			ex.printStackTrace();
		}finally{
			try{
				if(bo!=null){
					bo.close();
				}
				if(fileOut!=null){
					fileOut.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		new ExcelClient().createExcel("d:\\excel_test.xls",getCellData(),null);
	}
	
	public static CellData getCellData(){
		CellData cellDatas = new CellData();
		List<String> titles = new ArrayList<String>();
		titles.add("标题测试1");
		titles.add("标题测试2");
		titles.add("标题测试3");
		titles.add("标题测试4");
		
		Map<String,List<String>> map = new HashMap<String,List<String>>();
		List<String> vals = new ArrayList<String>();
		vals.add("123142354365423");
		vals.add("值测试2");
		vals.add("值测试3");
		vals.add("值测试4");
		
		for (int i = 0; i <10000; i++) {
			map.put(String.valueOf(i), vals);
		}
		
		cellDatas.setTitlesList(titles);
		cellDatas.setMap(map);
		
		return cellDatas;
	}
}



//样式,这里用了
引用
wdmcln
同学的代码,稍微修改了,title的样式,其它的没用 呵呵
/**
 * author:ztiny
 * data  :2012-8-18
 */
package com.excel.workbook;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook;

public class GlobalStyle {
		/**
		 * 超链接样式
		 * @return HSSFCellStyle
		 */
		public static CellStyle linkStyle(Workbook work) {
			HSSFCellStyle linkStyle = (HSSFCellStyle) work.createCellStyle();
			linkStyle.setBorderBottom((short)1);
			linkStyle.setBorderLeft((short)1);
			linkStyle.setBorderRight((short)1);
			linkStyle.setBorderTop((short)1);
			linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
			linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			Font font = work.createFont();
			font.setFontName(HSSFFont.FONT_ARIAL);
			font.setUnderline((byte)1);
			font.setColor(HSSFColor.BLUE.index);
			linkStyle.setFont(font);
			return linkStyle;
		}
		
		/**s
		 * 单元格样式
		 * @return Workbook
		 */
		public static CellStyle nameStyle(Workbook work) {
			HSSFCellStyle nameStyle = (HSSFCellStyle) work.createCellStyle();
			nameStyle.setBorderBottom((short)1);
			nameStyle.setBorderLeft((short)1);
			nameStyle.setBorderRight((short)1);
			nameStyle.setBorderTop((short)1);
			nameStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
			nameStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			return nameStyle;
		}
		
		/**
		 * 时间样式
		 * @return HSSFCellStyle
		 */
		public static CellStyle dataStyle(Workbook work) {
			HSSFCellStyle dataStyle = (HSSFCellStyle) work.createCellStyle();
			dataStyle.setBorderBottom((short)1);
			dataStyle.setBorderLeft((short)1);
			dataStyle.setBorderRight((short)1);
			dataStyle.setBorderTop((short)1);
			dataStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
			dataStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			return dataStyle;
		}
		
		/**
		 * 标题样式
		 * @return HSSFCellStyle
		 */
		public static HSSFCellStyle titleStyle(Workbook work) {
			
	        HSSFCellStyle style = (HSSFCellStyle) work.createCellStyle();  
	        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
	        style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
	        style.setBorderLeft((short)1);
	        style.setBorderRight((short)1);
//	        style.setAlignment(CellStyle.ALIGN_CENTER);
	        
//	        HSSFFont font = (HSSFFont) work.createFont();
			return style;
		}

}


PS:这里说明下,只能说一般情况下通用,没考虑合并列之类的复杂情况,而且样式也值设置了标题,只能手动改代码区切换,而且没有考虑什么时候切换sheet ,别且写入数据,代码里面写的都只是按逻辑来实现的,如果多sheet的情况下,可能需要稍微的修改下代码,不过代码比较好修改,  ,这个放心,自己去扩展,或者测试下,其它情况没有想到,暂时只考虑到了这么多,欢饮拍砖,但是别投隐藏 
分享到:
评论

相关推荐

    poi导出根据模板导出excel和简单列表导出excel源码

    在导出 Excel 的过程中,注释应该清晰地解释每个函数或方法的作用,以及关键部分的工作原理,比如数据处理逻辑、样式设置等。 5. **poi-excel-handler** 这可能是提供的代码库或工具包的名称,其中包含了处理 ...

    poi导出excel通用类

    标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...

    Java Struts2+poi插件 实现导出Excel

    这个项目"Java Struts2+poi插件 实现导出Excel"就是结合这两个工具,为用户提供一个功能,能够将数据导出到Excel格式的文件中。 首先,让我们详细了解一下Struts2。Struts2的核心是Action,它负责接收请求、处理...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    poi方式导出excel需要的3个jar包

    以下是一个简单的使用Apache POI导出Excel的工作流程示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java....

    POI导出Excel表格通用工具类

    利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    poi导出excel参考方法

    POI导出Excel参考方法 POI(Poor Obfuscation Implementation)是一个Java的API,用于操作Microsoft Office文档,包括Excel、Word、PowerPoint等。下面是POI导出Excel参考方法的相关知识点: 1. POI的基本概念 ...

    通用excel导入/导出 (poi)

    在导出Excel时,你需要创建一个工作簿(Workbook)对象,然后添加工作表(Sheet),并在工作表中创建行(Row)和单元格(Cell)。数据可以从数据库、集合或其他数据源填充到这些单元格中。以下是一个简单的例子: `...

    Java poi 导出Excel

    通用类的Java导出Excel方法,导出内容是使用json传递,字段描述使用ArrayList数组传递,

    spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库.zip

    在本项目中,"spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库",开发者利用了Spring Boot、MyBatis Plus和EasyPoi库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...

    SpringBoot整合POI导出通用Excel的方法示例

    SpringBoot 整合 POI 导出通用 Excel 的方法示例 本文主要介绍了 SpringBoot 整合 POI 导出通用 ...本文提供了一个完整的 SpringBoot 整合 POI 导出通用 Excel 的方法示例,帮助开发者快速实现 Excel 的导出功能。

    poi导入导出Excel源码

    标题“poi导入导出Excel源码”和描述涉及到的核心知识点是利用Apache POI进行Excel文件的导入与导出操作。 首先,让我们详细了解Apache POI库。Apache POI是Apache软件基金会的一个开源项目,其主要目标是创建Java ...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    同样,导出Excel功能可以通过创建一个新的工作簿,填充数据,然后设置样式和写入输出流来实现。以下是一个简单的导出示例: ```java @GetMapping("exportList") public void exportList(HttpServletResponse ...

    Java使用POI实现Excel报表的导入和导出

    利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...

    poi报表导入导出.zip

    利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...

    Java poi 实现excel导入导出

    **导出Excel数据:** 1. **创建Workbook对象**:使用`WorkbookFactory.create()`或`new XSSFWorkbook()`(对于.xlsx)创建一个新的Excel文件。 2. **添加Sheet对象**:调用Workbook的`createSheet()`方法创建新的...

    poi导入/导出Excel表格,合并单元格的读取和设置

    poi导入/导出Excel表格,合并单元格的读取和设置

    poi的控制,poi导出excel详细介绍,有代码

    ### POI 控制 Excel 导出详解 #### 一、引言 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 .xls、.xlsx、.doc、.ppt 等)的 Java API。其中,HSSF 和 XSSF 分别对应处理 .xls 和 .xlsx 文件。本篇...

    Excel导出poi

    以下是一个简单的使用POI导出Excel的基本步骤: 1. **初始化Workbook**:首先,我们需要创建一个Workbook对象,这将作为Excel文件的容器。对于老版本的Excel(97-2003格式),我们使用HSSFWorkbook;对于新版本的...

Global site tag (gtag.js) - Google Analytics