- 浏览: 1820 次
- 性别:
- 来自: 深圳
文章分类
最新评论
用POI 写了个导出EXCEL 应该算通用吧
//创建一个工作薄
// 因为里面类型可以能比较多,所以都是用接口,这样修改代码比较方法
//在在工作薄里面创建一个sheet面板
//实现
//创建列
//同样是实现
//列的数据源
//客户端调用
//样式,这里用了
PS:这里说明下,只能说一般情况下通用,没考虑合并列之类的复杂情况,而且样式也值设置了标题,只能手动改代码区切换,而且没有考虑什么时候切换sheet ,别且写入数据,代码里面写的都只是按逻辑来实现的,如果多sheet的情况下,可能需要稍微的修改下代码,不过代码比较好修改, ,这个放心,自己去扩展,或者测试下,其它情况没有想到,暂时只考虑到了这么多,欢饮拍砖,但是别投隐藏
/** * 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的情况下,可能需要稍微的修改下代码,不过代码比较好修改, ,这个放心,自己去扩展,或者测试下,其它情况没有想到,暂时只考虑到了这么多,欢饮拍砖,但是别投隐藏
相关推荐
在导出 Excel 的过程中,注释应该清晰地解释每个函数或方法的作用,以及关键部分的工作原理,比如数据处理逻辑、样式设置等。 5. **poi-excel-handler** 这可能是提供的代码库或工具包的名称,其中包含了处理 ...
标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...
这个项目"Java Struts2+poi插件 实现导出Excel"就是结合这两个工具,为用户提供一个功能,能够将数据导出到Excel格式的文件中。 首先,让我们详细了解一下Struts2。Struts2的核心是Action,它负责接收请求、处理...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
以下是一个简单的使用Apache POI导出Excel的工作流程示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java....
利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...
总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...
POI导出Excel参考方法 POI(Poor Obfuscation Implementation)是一个Java的API,用于操作Microsoft Office文档,包括Excel、Word、PowerPoint等。下面是POI导出Excel参考方法的相关知识点: 1. POI的基本概念 ...
在导出Excel时,你需要创建一个工作簿(Workbook)对象,然后添加工作表(Sheet),并在工作表中创建行(Row)和单元格(Cell)。数据可以从数据库、集合或其他数据源填充到这些单元格中。以下是一个简单的例子: `...
通用类的Java导出Excel方法,导出内容是使用json传递,字段描述使用ArrayList数组传递,
在本项目中,"spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库",开发者利用了Spring Boot、MyBatis Plus和EasyPoi库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...
标题“poi导入导出Excel源码”和描述涉及到的核心知识点是利用Apache POI进行Excel文件的导入与导出操作。 首先,让我们详细了解Apache POI库。Apache POI是Apache软件基金会的一个开源项目,其主要目标是创建Java ...
同样,导出Excel功能可以通过创建一个新的工作簿,填充数据,然后设置样式和写入输出流来实现。以下是一个简单的导出示例: ```java @GetMapping("exportList") public void exportList(HttpServletResponse ...
利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...
利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...
**导出Excel数据:** 1. **创建Workbook对象**:使用`WorkbookFactory.create()`或`new XSSFWorkbook()`(对于.xlsx)创建一个新的Excel文件。 2. **添加Sheet对象**:调用Workbook的`createSheet()`方法创建新的...
SpringBoot整合POI导出通用Excel的方法不仅提高了开发效率,而且减少了重复性工作。在实践中,我们需要注意对POI库版本的选择,以及对Excel文件格式的兼容性处理。通过本文的介绍和示例代码,相信你已经掌握了使用...
poi导入/导出Excel表格,合并单元格的读取和设置
### POI 控制 Excel 导出详解 #### 一、引言 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 .xls、.xlsx、.doc、.ppt 等)的 Java API。其中,HSSF 和 XSSF 分别对应处理 .xls 和 .xlsx 文件。本篇...
以下是一个简单的使用POI导出Excel的基本步骤: 1. **初始化Workbook**:首先,我们需要创建一个Workbook对象,这将作为Excel文件的容器。对于老版本的Excel(97-2003格式),我们使用HSSFWorkbook;对于新版本的...