`
ztiny
  • 浏览: 1819 次
  • 性别: 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库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...

    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()`方法创建新的...

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

    SpringBoot整合POI导出通用Excel的方法不仅提高了开发效率,而且减少了重复性工作。在实践中,我们需要注意对POI库版本的选择,以及对Excel文件格式的兼容性处理。通过本文的介绍和示例代码,相信你已经掌握了使用...

    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