poifsfilesystem pdf
POI3.5_HSSF_和XSSF_Excel操作快速入门手册

poi导出word模板项目实例(一个文件)

poi导出word模板项⽬实例(⼀个⽂件)在页⾯上填写值,然后导出到word模板中,并把页⾯上的值带到模板中,也就是导出word⽂档,提前有word 的模板形式,1.jsp 页⾯<table class="formTable"><TR><TD class="label">会议地点</TD><TD class="content"><INPUT id="meetingSite" type="text" class="text" name="CommonLink/meetingSite"></TD><TD class="label">会议⼈员</TD><TD><INPUT id="meetingPerson" type="text" class="text" name="CommonLink/meetingPerson"></TD></TR><TR><TD class="label">会议内容</TD><TD class="content"><INPUT id="meetingContent" type="text" class="text" name="CommonLink/meetingContent"></TD><TD class="label">会议时间</TD><TD><INPUT id="meetingDate" type="text" class="text" name="CommonLink/meetingDate"></TD></TR><TR><TD class="label">总经理</TD><TD class="content"><INPUT id="manager" type="text" class="text" name="CommonLink/manager"></TD><TD class="label">采购部门</TD><TD><INPUT id="purchaseDep" type="text" class="text" name="CommonLink/purchaseDep"></TD></TR></table><div id="btns" class="form-btns"><INPUT value="导出word⽂档" type="button" class="btn" onclick="exportWord();"></div>2.js异步的⽅法function exportWord(){var data = setData();jQuery.post("http://localhost:8080/expWord/GKBX29_word.jsp",data,function(data1){var url = data1; //回调函数,返回值是地址,data1window.open(url); //打开});}function setData(){var data = {};data.author='zzz';data.meetingSite = document.getElementById("meetingSite").value;data.purchaseDep = document.getElementById("purchaseDep").value;data.meetingPerson = document.getElementById("meetingPerson").value;data.meetingContent = document.getElementById("meetingContent").value;data.meetingDate = document.getElementById("meetingDate").value;data.manager = document.getElementById("manager").value;return data;}3.GKBX29_word.jsp其实是后台的处理⽅法,因为本次开发⽤EOS,所以在jsp⽤request接收值,并传递到模板<%@page import="java.util.HashMap"%><%@page import="java.util.Map"%><%@page import="com.boco.eoms.word.client.word"%><%request.setCharacterEncoding("UTF-8");String author = request.getParameter("author");String meetingSite = request.getParameter("meetingSite");String purchaseDep = request.getParameter("purchaseDep");String meetingPerson = request.getParameter("meetingPerson");String meetingContent = request.getParameter("meetingContent");String meetingDate = request.getParameter("meetingDate");String manager = request.getParameter("manager");word w = new word();Map map = new HashMap();map.put("author", author);map.put("meetingSite", meetingSite);map.put("purchaseDep", purchaseDep);map.put("meetingPerson", meetingPerson);map.put("meetingContent", meetingContent);map.put("meetingDate", meetingDate);map.put("manager", manager);String url = w.replacWordByMap(map, "model"); //模板名称,默认是.doc⽂件response.getWriter().write(url);%>4. ⽣成word 的⽅法package com.boco.eoms;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.apache.poi.hwpf.HWPFDocument;import ermodel.Range;import org.apache.poi.poifs.filesystem.DirectoryEntry;import org.apache.poi.poifs.filesystem.POIFSFileSystem;//***************************************************************////** 需要使⽤变量的地⽅可以⽤如下替换 ${name} ,name为变量名,在map中key使⽤变量名,value使⽤要替换成的字符串,如 map.put("name","栾主峰") **// //***************************************************************//public class word {/*** 根据传⼊的模板编号将变量替换成实际值之后⽣成word⽂档* 需要使⽤变量的地⽅word中可以⽤变量替换,格式: ${变量名} 如: ${name}* name为变量名,在map中key使⽤变量名,value使⽤要替换成的字符串* 如 map.put("name","栾主峰")* @param maps 变量集合* @param DocName 模板名称* @return 重新⽣成的⽂档名称包含全路径,返回-1时,⽂件⽣成错误*/public String createWordByMap(Map<String, String> maps, String DocName) {String path = this.getClass().getClassLoader().getResource("/").getPath()+ "attach/";//获取基础路径String docModelPath = path + "word/model/"; //⽣成模板所在路径String docPath = path + "word/create/" + getCurrentDateTime("yyyyMMdd")+ "/";//+"/"+getCurrentDateTime("yyyyMMddHHmmssSSS");java.io.File filetemp = new java.io.File(docPath);if (!filetemp.exists())filetemp.mkdirs();String destFile = docPath + getCurrentDateTime("yyyyMMddHHmmssSSS")+ ".doc";HWPFDocument document = new word().replaceDoc(docModelPath + DocName+ ".doc", maps);if (document != null){ByteArrayOutputStream ostream = new ByteArrayOutputStream();try {document.write(ostream);// 输出word⽂件OutputStream outs = new FileOutputStream(destFile);outs.write(ostream.toByteArray());outs.close();} catch (IOException e) {e.printStackTrace();destFile = "-1";}} elsedestFile = "-1";return destFile;}/**** @param destFile* @param fileCon*/public void exportDoc(String destFile, String fileCon) {try {//doc contentByteArrayInputStream bais = new ByteArrayInputStream(fileCon.getBytes());POIFSFileSystem fs = new POIFSFileSystem();DirectoryEntry directory = fs.getRoot();directory.createDocument("WordDocument", bais);FileOutputStream ostream = new FileOutputStream(destFile);fs.writeFilesystem(ostream);bais.close();ostream.close();} catch (IOException e) {e.printStackTrace();}}/*** 读取word模板并替换变量* @param srcPath* @param map* @return*/public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) { try {// 读取word模板FileInputStream fis = new FileInputStream(new File(srcPath));HWPFDocument doc = new HWPFDocument(fis);// 读取word⽂本内容Range bodyRange = doc.getRange();// 替换⽂本内容for (Map.Entry<String, String> entry : map.entrySet()) {bodyRange.replaceText("${" + entry.getKey() + "}", entry.getValue());}return doc;} catch (Exception e) {e.printStackTrace();return null;}}//得到当前的系统时间/*根据输⼊的格式(String _dtFormat)得到当前时间格式*/public String getCurrentDateTime(String _dtFormat) {String currentdatetime = "";try {Date date = new Date(System.currentTimeMillis());SimpleDateFormat dtFormat = new SimpleDateFormat(_dtFormat);currentdatetime = dtFormat.format(date);} catch (Exception e) {System.out.println("时间格式不正确");e.printStackTrace();}return currentdatetime;}}5.模板中的样式。
javaPOIHTML转Word两种方式

javaPOIHTML转Word两种⽅式说明,不论使⽤哪种⽅式,都不能引⽤CSS来渲染样式,⽽是使⽤style,或者将样式放在当前页⾯的<style></style>中⽅法⼀、1、引⽤的jar包<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version></dependency>2、核⼼代码String html = "<div>测试内容</div";POIFSFileSystem poifs = null;FileOutputStream ostream = null;ByteArrayInputStream bais = null;String uuid = "测试.doc";File file = null;try { //HTML内容必须被<html><body></body></html>包装 fileParam.setcContent("<html><body>" + html + "</body></html>"); byte[] b = fileParam.getcContent().getBytes(); bais = new ByteArrayInputStream(b); poifs = new POIFSFileSystem(); DirectoryEntry directory = poifs.getRoot(); //WordDocument名称不允许修改 directory.createDocument("WordDocument", bais); ostream = new FileOutputStream(uuid); poifs.writeFilesystem(ostream);//当前⽬录下就⽣成了⼀个测试.doc的⽂档} catch (Exception e) { logger.error("exception is {}", e);} finally { IOUtils.closeQuietly(poifs); IOUtils.closeQuietly(ostream); IOUtils.closeQuietly(bais); try { FileUtils.forceDelete(file); } catch (Exception e2) { }}⽅法⼆/*** word格式html的标签头*/public static final String HTML_TAG_BGN = "<html xmlns=\"/TR/REC-html40\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w=\"urn:schemas-microsoft-com:office public filePath downloadWordReport(String htmlForPrint) {try {String wordString = htmlForPrint.replaceAll("<head>", "").replaceAll("<html>", HTML_TAG_BGN );String fileName = new String("测试⽂件.doc".getBytes(), "UTF-8");//上传⽂件⽅法return this.upload(new ByteArrayInputStream(wordString.getBytes()), fileName);} catch (Exception e) {return null;}}。
Java根据模板导出Excel报表并复制模板生成多个Sheet页

Java根据模板导出Excel报表并复制模板⽣成多个Sheet页因为最近⽤报表导出⽐较多,所有就提成了⼀个⼯具类,本⼯具类使⽤的场景为根据提供的模板来导出Excel报表并且可根据提供的模板Sheet页进⾏复制从⽽实现多个Sheet页的需求,使⽤本⼯具类时,如果需求是每个Sheet页中的数据都不⼀致,但是表格样式和模板都⼀样那么只需要在实际情况中根据 sql 来查询要添加的数据源 (只需更改数据源即可)采⽤的技术为 POI 导出,因为类的缘故,⽬前只⽀持2003版本的Excel.使⽤前请先下载相应jar包!后期有时间的话会进⾏进⼀步完善,初次写⼯具类,若有不完善的地⽅还请包涵!先看看模板样式和运⾏结果,然后直接上代码这是Excel的模板样式这是导出结果具体实现看demopackage com.sgcc.xyz.util;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.hssf.util.Region;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import com.sgcc.uap.persistence.impl.HibernateDaoImpl;/*** 报表导出⼯具类** @author JYLiu@巴黎的⾬季本⼯具是根据POI对Excel2003进⾏报表导出本⼯具类可根据模板进⾏Excel的导出* 并且可根据提供的模板Sheet页进⾏复制从⽽实现多个Sheet页的需求* 使⽤本⼯具类时,如果需求是每个Sheet页中的数据都不⼀致,但是表格样式和模板都⼀样* 那么只需要在实际情况中根据 sql 来查询要添加的数据源 (只需更改数据源即可)*/public class ExcelUtil {/*** 根据模板导出报表,可导出多个Sheet页** @param 导出的Excel⽂件名* @param 模板路径 (全路径)* @param 数据源* @param 返回请求* @param ⽣成的Sheet页的名称集合* @param 数据源中Map集合的key值 (key值对应的value值顺序要列名顺序⼀致)* @param 开始循环写⼊数据的⾏数(从第⼏⾏开始写⼊数据)*/public static void ExcelByModel(String ExcelName, String ModelURl, List<Map<String, String>> dataSource, HttpServletResponse response, String[] sheetNames, String[] keyNames, int rowNum) throws Exception { // 设置导出Excel报表的导出形式response.setContentType("application/vnd.ms-excel");// 设置导出Excel报表的响应⽂件名String fileName = new String(ExcelName.getBytes("utf-8"), "ISO-8859-1");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");// 创建⼀个输出流OutputStream fileOut = response.getOutputStream();// 读取模板⽂件路径File file = new File(ModelURl);FileInputStream fins = new FileInputStream(file);POIFSFileSystem fs = new POIFSFileSystem(fins);// 读取Excel模板HSSFWorkbook wb = new HSSFWorkbook(fs);// 设置边框样式HSSFCellStyle style = wb.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置边框样式的颜⾊style.setBottomBorderColor(HSSFColor.BLACK.index);style.setLeftBorderColor(HSSFColor.BLACK.index);style.setRightBorderColor(HSSFColor.BLACK.index);style.setTopBorderColor(HSSFColor.BLACK.index);// 模板页HSSFSheet sheetModel = null;// 新建的Sheet页HSSFSheet newSheet = null;// 创建⾏HSSFRow row = null;// 创建列HSSFCell cell = null;// 循环建⽴Sheet页for (int i = 0; i < sheetNames.length; i++) {// 读取模板中模板Sheet页中的内容sheetModel = wb.getSheetAt(0);// 设置新建Sheet的页名newSheet = wb.createSheet(sheetNames[i]);// 将模板中的内容复制到新建的Sheet页中copySheet(wb, sheetModel, newSheet, sheetModel.getFirstRowNum(), sheetModel.getLastRowNum());//获取到新建Sheet页中的第⼀⾏为其中的列赋值row=newSheet.getRow(0);row.getCell(1).setCellValue("这是为表代码赋的值");//注意合并的单元格也要按照合并前的格数来算row.getCell(6).setCellValue("这是为外部代码赋的值");//获取模板中的第⼆列,并赋值row=newSheet.getRow(1);row.getCell(1).setCellValue("表名称赋值");//注意合并的单元格也要按照合并前的格数来算row.getCell(6).setCellValue("这是为是否系统表赋的值");// 遍历数据源开始写⼊数据(因为Excel中是从0开始,所以减⼀)int num = rowNum - 1;for (Map<String, String> item : dataSource) {// 循环遍历,新建⾏row = newSheet.createRow((short) num);//判断有多少列数据for (int j = 0; j < keyNames.length; j++) {// 设置每列的数据设置每列的样式设置每列的值cell = row.createCell(j); cell.setCellStyle(style); cell.setCellValue(item.get(keyNames[j]));}num++;}// break 加break可以测试只添加⼀个Sheet页的情况}// 写⼊流wb.write(fileOut);// 关闭流fileOut.close();}/**** @param Excel⼯作簿对象* @param 模板Sheet页* @param 新建Sheet页* @param 模板页的第⼀⾏* @param 模板页的最后⼀⾏*/private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) { // 复制⼀个单元格样式到新建单元格if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {return;}// 复制合并的单元格Region region = null;for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {region = fromsheet.getMergedRegionAt(i);if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {newSheet.addMergedRegion(region);}}HSSFRow fromRow = null;HSSFRow newRow = null;HSSFCell newCell = null;HSSFCell fromCell = null;// 设置列宽for (int i = firstrow; i < lasttrow; i++) {fromRow = fromsheet.getRow(i);if (fromRow != null) {for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {int colnum = fromsheet.getColumnWidth((short) j);if (colnum > 100) {newSheet.setColumnWidth((short) j, (short) colnum);}if (colnum == 0) {newSheet.setColumnHidden((short) j, true);} else {newSheet.setColumnHidden((short) j, false);}}break;}}// 复制⾏并填充数据for (int i = 0; i < lasttrow; i++) {fromRow = fromsheet.getRow(i);if (fromRow == null) {continue;}newRow = newSheet.createRow(i - firstrow);newRow.setHeight(fromRow.getHeight());for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {fromCell = fromRow.getCell((short) j);if (fromCell == null) {continue;}newCell = newRow.createCell((short) j);newCell.setCellStyle(fromCell.getCellStyle());int cType = fromCell.getCellType();newCell.setCellType(cType);switch (cType) {case HSSFCell.CELL_TYPE_STRING:newCell.setCellValue(fromCell.getRichStringCellValue());break;case HSSFCell.CELL_TYPE_NUMERIC:newCell.setCellValue(fromCell.getNumericCellValue());break;case HSSFCell.CELL_TYPE_FORMULA:newCell.setCellValue(fromCell.getCellFormula());break;case HSSFCell.CELL_TYPE_BOOLEAN:newCell.setCellValue(fromCell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_ERROR:newCell.setCellValue(fromCell.getErrorCellValue());break;default:newCell.setCellValue(fromCell.getRichStringCellValue());break;}}}}}以上便是整个⼯具类的核⼼代码了测试数据如下/*** 测试多Sheet页导出数据表格⽅法*/public static void ExcelTest(HttpServletResponse response){//构建数据源List<Map<String, String>> dataSourceList=new ArrayList<Map<String,String>>(){ {add(new HashMap<String, String>(){{put("字段编号", "1");put("字段代码", "BUSINESS_ID");put("字段含义", "业务id");put("数据类型", "VARCHAR");put("长度", "64");put("主键", "是");put("主码", "");}});add(new HashMap<String, String>(){{put("字段编号", "2");put("字段代码", "PROC_INST_ID");put("字段含义", "流程实例编号");put("数据类型", "VARCHAR");put("长度", "64");put("主键", "");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "3");put("字段代码", "PROC_STATE");put("字段含义", "流程状态");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "4");put("字段代码", "APPLICANT");put("字段含义", "申请⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "5");put("字段代码", "LEAVE_TYPE");put("字段含义", "请假类型");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "6");put("字段代码", "REASON");put("字段含义", "请假事因");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "7");put("字段代码", "BEGIN_TIME");put("字段含义", "起始时间");put("数据类型", "TIMESTAMP");put("长度", "");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "8");put("字段代码", "END_TIME");put("字段含义", "结束时间");put("数据类型", "TIMESTAMP");put("长度", "");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "9");put("字段代码", "INSERT_PERSON");put("字段含义", "登记⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "10");put("字段代码", "APPROVEDBY");put("字段含义", "批准⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});}};//构建数据源中的key值String[] keysStrings={"字段编号","字段代码","字段含义","数据类型","长度","主键","主码"};//每页的名称String [] sheetNameStrings={"Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6"};String modelURLString="D:\\model\\model.xls";try {ExcelUtil.ExcelByModel("测试模板导出", modelURLString, dataSourceList, response, sheetNameStrings, keysStrings, 6);} catch (Exception e) {e.printStackTrace();}}以上就是关于Excel报表根据模板导出并⽣成多个Sheet也的⼩⼯具了,需要的可以参考代码,根据实际业务需求进⾏代码调整。
POI中文API文档

POI中⽂API⽂档⼀、 POI简介Apache POI是Apache软件基⾦会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
⼆、 HSSF概况HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以⽤纯Java代码来读取、写⼊、修改Excel⽂件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“⽤户模型”和“事件-⽤户模型”。
三、 POI EXCEL⽂档结构类HSSFWorkbook excel⽂档对象HSSFSheet excel的sheet HSSFRow excel的⾏HSSFCell excel的单元格 HSSFFont excel字体HSSFName 名称 HSSFDataFormat ⽇期格式HSSFHeader sheet头HSSFFooter sheet尾HSSFCellStyle cell样式HSSFDateUtil ⽇期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表四、 EXCEL常⽤操作⽅法1、得到Excel常⽤对象[c-sharp]1. POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));2. //得到Excel⼯作簿对象3. HSSFWorkbook wb = new HSSFWorkbook(fs);4. //得到Excel⼯作表对象5. HSSFSheet sheet = wb.getSheetAt(0);6. //得到Excel⼯作表的⾏7. HSSFRow row = sheet.getRow(i);8. //得到Excel⼯作表指定⾏的单元格9. HSSFCell cell = row.getCell((short) j);10. cellStyle = cell.getCellStyle();//得到单元格样式2、建⽴Excel常⽤对象[c-sharp]1. HSSFWorkbook wb = new HSSFWorkbook();//创建Excel⼯作簿对象2. HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel⼯作表对象3. HSSFRow row = sheet.createRow((short)0); //创建Excel⼯作表的⾏4. cellStyle = wb.createCellStyle();//创建单元格样式5. row.createCell((short)0).setCellStyle(cellStyle); //创建Excel⼯作表指定⾏的单元格6. row.createCell((short)0).setCellValue(1); //设置Excel⼯作表的值3、设置sheet名称和单元格内容[c-sharp]1. wb.setSheetName(1, "第⼀张⼯作表",HSSFCell.ENCODING_UTF_16);2. cell.setEncoding((short) 1);3. cell.setCellValue("单元格内容");4、取得sheet的数⽬[c-sharp]1. wb.getNumberOfSheets()5、根据index取得sheet对象[c-sharp]1. HSSFSheet sheet = wb.getSheetAt(0);6、取得有效的⾏数[c-sharp]1. int rowcount = sheet.getLastRowNum();7、取得⼀⾏的有效单元格个数[c-sharp]1. row.getLastCellNum();8、单元格值类型读写[c-sharp]1. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型2. cell.getNumericCellValue();//读取为数值类型的单元格内容9、设置列宽、⾏⾼[c-sharp]1. sheet.setColumnWidth((short)column,(short)width);2. row.setHeight((short)height);10、添加区域,合并单元格[c-sharp]1. Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo2. ,(short)columnTo);//合并从第rowFrom⾏columnFrom列3. sheet.addMergedRegion(region);// 到rowTo⾏columnTo的区域4. //得到所有区域5. sheet.getNumMergedRegions()11、保存Excel⽂件[c-sharp]1. FileOutputStream fileOut = new FileOutputStream(path);2. wb.write(fileOut);12、根据单元格不同属性返回字符串数值[c-sharp]1. public String getCellStringValue(HSSFCell cell) {2. String cellValue = "";3. switch (cell.getCellType()) {4. case HSSFCell.CELL_TYPE_STRING://字符串类型5. cellValue = cell.getStringCellValue();6. if(cellValue.trim().equals("")||cellValue.trim().length()<=0)7. cellValue=" ";8. break;9. case HSSFCell.CELL_TYPE_NUMERIC: //数值类型10. cellValue = String.valueOf(cell.getNumericCellValue());11. break;12. case HSSFCell.CELL_TYPE_FORMULA: //公式13. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);14. cellValue = String.valueOf(cell.getNumericCellValue());15. break;16. case HSSFCell.CELL_TYPE_BLANK:17. cellValue=" ";18. break;19. case HSSFCell.CELL_TYPE_BOOLEAN:20. break;21. case HSSFCell.CELL_TYPE_ERROR:22. break;23. default:24. break;25. }26. return cellValue;27. }13、常⽤单元格边框格式[c-sharp]1. HSSFCellStyle style = wb.createCellStyle();2. style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框3. style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框4. style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框5. style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框14、设置字体和内容位置[c-sharp]1. HSSFFont f = wb.createFont();2. f.setFontHeightInPoints((short) 11);//字号3. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗4. style.setFont(f);5. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中6. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中7. style.setRotation(short rotation);//单元格内容的旋转的⾓度8. HSSFDataFormat df = wb.createDataFormat();9. style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式10. cell.setCellFormula(string);//给单元格设公式11. style.setRotation(short rotation);//单元格内容的旋转的⾓度15、插⼊图⽚[c-sharp]1. //先把读进来的图⽚放到⼀个ByteArrayOutputStream中,以便产⽣ByteArray2. ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();3. BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));4. ImageIO.write(bufferImg,"jpg",byteArrayOut);5. //读进⼀个excel模版6. FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");7. fs = new POIFSFileSystem(fos);8. //创建⼀个⼯作薄9. HSSFWorkbook wb = new HSSFWorkbook(fs);10. HSSFSheet sheet = wb.getSheetAt(0);11. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();12. HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);13. patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));16、调整⼯作表位置[c-sharp]1. HSSFWorkbook wb = new HSSFWorkbook();2. HSSFSheet sheet = wb.createSheet("format sheet");3. HSSFPrintSetup ps = sheet.getPrintSetup();4. sheet.setAutobreaks(true);5. ps.setFitHeight((short)1);6. ps.setFitWidth((short)1);17、设置打印区域[c-sharp]1. HSSFSheet sheet = wb.createSheet("Sheet1");2. wb.setPrintArea(0, "$A$1:$C$2");18、标注脚注[c-sharp]1. HSSFSheet sheet = wb.createSheet("format sheet");2. HSSFFooter footer = sheet.getFooter()3. footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );19、在⼯作单中清空⾏数据,调整⾏位置[c-sharp]1. HSSFWorkbook wb = new HSSFWorkbook();2. HSSFSheet sheet = wb.createSheet("row sheet");3. // Create various cells and rows for spreadsheet.4. // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)5. sheet.shiftRows(5, 10, -5);20、选中指定的⼯作表[c-sharp]1. HSSFSheet sheet = wb.createSheet("row sheet");2. heet.setSelected(true);21、⼯作表的放⼤缩⼩[c-sharp]1. HSSFSheet sheet1 = wb.createSheet("new sheet");2. sheet1.setZoom(1,2); // 50 percent magnification22、头注和脚注[c-sharp]1. HSSFSheet sheet = wb.createSheet("new sheet");2. HSSFHeader header = sheet.getHeader();3. header.setCenter("Center Header");4. header.setLeft("Left Header");5. header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +6. HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");23、⾃定义颜⾊[c-sharp]1. HSSFCellStyle style = wb.createCellStyle();2. style.setFillForegroundColor(HSSFColor.LIME.index);3. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);4. HSSFFont font = wb.createFont();5. font.setColor(HSSFColor.RED.index);6. style.setFont(font);7. cell.setCellStyle(style);24、填充和颜⾊设置[c-sharp]1. HSSFCellStyle style = wb.createCellStyle();2. style.setFillBackgroundColor(HSSFColor.AQUA.index);3. style.setFillPattern(HSSFCellStyle.BIG_SPOTS);4. HSSFCell cell = row.createCell((short) 1);5. cell.setCellValue("X");6. style = wb.createCellStyle();7. style.setFillForegroundColor(HSSFColor.ORANGE.index);8. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);9. cell.setCellStyle(style);25、强⾏刷新单元格公式[c-sharp]1. HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);2. private static void updateFormula(Workbook wb,Sheet s,int row){3. Row r=s.getRow(row);4. Cell c=null;5. FormulaEcaluator eval=null;6. if(wb instanceof HSSFWorkbook)7. eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);8. else if(wb instanceof XSSFWorkbook)9. eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);10. for(int i=r.getFirstCellNum();i11. c=r.getCell(i);12. if(c.getCellType()==Cell.CELL_TYPE_FORMULA)13. eval.evaluateFormulaCell(c);14. }15. }说明:FormulaEvaluator提供了evaluateFormulaCell(Cell cell)⽅法,计算公式保存结果,但不改变公式。
文件上传Demo

InputStreaminp=ExcelUtil.class.getResourceAsStream("/com/java1234/template/"+templateFileName);POIFSFileSystem fs=new POIFSFileSystem(inp);Workbook wb=new HSSFWorkbook(fs);Sheet sheet=wb.getSheetAt(0);// 获取列数int cellNums=sheet.getRow(0).getLastCellNum();int rowIndex=1;while(rs.next()){Row row=sheet.createRow(rowIndex++);for(int i=0;i<cellNums;i++){row.createCell(i).setCellValue(rs.getObject(i+1).toString());}}return wb;}public static void export(HttpServletResponse response,Workbook wb,String fileName)throws Exception{response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));response.setContentType("application/ynd.ms-excel;charset=UTF-8");OutputStream out=response.getOutputStream();wb.write(out);out.flush();out.close();}//文件上传的实例import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;public class ExampleFrame_09 extends JFrame {/****/private static final long serialVersionUID = 1L;private JTextField textField;public static void main(String args[]) {ExampleFrame_09 frame = new ExampleFrame_09();frame.setVisible(true);}public ExampleFrame_09() {super();setTitle("文件选择对话框");setBounds(100, 100, 500, 375);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JPanel panel = new JPanel();getContentPane().add(panel, BorderLayout.NORTH);final JLabel label = new JLabel();label.setText("文件:");panel.add(label);textField = new JTextField();textField.setColumns(20);panel.add(textField);final JButton button = new JButton();button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {JFileChooser fileChooser = new JFileChooser();// 创建文件选择对话框// 显示文件选择对话框int i = fileChooser.showOpenDialog(getContentPane());// 判断用户单击的是否为“打开”按钮if (i == JFileChooser.APPROVE_OPTION) {// 获得选中的文件对象File selectedFile = fileChooser.getSelectedFile();// 显示选中文件的名称textField.setText(selectedFile.getName());System.out.println(selectedFile.getName());int len = 0;byte []byt = new byte[1024];try {FileInputStream fileInputStream = new FileInputStream(selectedFile);while((len = fileInputStream.read(byt)) != -1){System.out.println(new String(byt));}} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch(IOException e2){e2.printStackTrace();}}}});button.setText("上传");panel.add(button);//}}import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.filechooser.*;import javax.swing.filechooser.FileFilter;public class ExampleFrame_10 extends JFrame {/****/private static final long serialVersionUID = 1L;public static void main(String args[]) {ExampleFrame_10 frame = new ExampleFrame_10();frame.setVisible(true);}public ExampleFrame_10() {super();setTitle("选择照片对话框");setBounds(100, 100, 500, 375);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JLabel label = new JLabel("<双击选择照片>", SwingConstants.CENTER);label.addMouseListener(new MouseAdapter() {JFileChooser fileChooser;{// 创建文件选择对话框fileChooser = new JFileChooser();// 设置文件过滤器,只列出JPG或GIF格式的图片FileFilter filter = new FileNameExtensionFilter("图像文件(JPG/GIF)", "JPG", "JPEG", "GIF");fileChooser.setFileFilter(filter);}public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {// 显示文件选择对话框int i = fileChooser.showOpenDialog(getContentPane());// 判断用户单击的是否为“打开”按钮if (i == JFileChooser.APPROVE_OPTION) {// 获得选中的图片对象File selectedFile = fileChooser.getSelectedFile();label.setIcon(new ImageIcon(selectedFile.getAbsolutePath()));// 将图片显示到标签上label.setText(null);}}}});getContentPane().add(label, BorderLayout.CENTER);}}。
easypoi,模板导出

竭诚为您提供优质文档/双击可除easypoi,模板导出篇一:poiexcel导出样式设计hssFcell设置样式1、遍历workbook//load源文件poiFsFilesystemfs=newpoiFsFilesystem(newFileinputst ream(filepath));hssFworkbookwb=newhssFworkbook(fs);for(inti=0;i hssFsheetsheet=wb.getsheetat(i);for(intj=sheet.getFirstRownum();jeasypoi,模板导出){hssFRowrow=sheet.getRow(j);if(row!=null){//。
操作}}}}//目标文件Fileoutputstreamfos=newFileoutputstream(objectpath);//写文件wb.write(fos);fos.close();2、得到列和单元格hssFRowrow=sheet.getRow(i);hssFcellcell=row.getcell((short)j);3、设置sheet名称和单元格内容为中文wb.setsheetname(n,"中文",hssFcell.encoding_utF_16);cell.setencoding((short)1);cell.setcellValue("中文");4、单元格内容未公式或数值,可以这样读写cell.setcelltype(hssFcell.cell_type_numeRic);cell.getnumericcellValue();5、设置列宽、行高sheet.setcolumnwidth((short)column,(short)width);row.setheight((short)height);6、添加区域,合并单元格Regionregion=Region((short)rowFrom,(short)columnFrom,(short)rowt o,(short)columnto);sheet.addmergedRegion(region);//得到所有区域sheet.getnummergedRegions();7、常用方法根据单元格不同属性返回字符串数值publicstringgetcellstringValue(hssFcellcell){ stringcellValue="";switch(cell.getcelltype()){casehssFcell.cell_type_stRing:cellValue=cell.getstringcellValue();if(cellValue.trim().equals("")||cellValue.trim().le ngth() cellValue="";break;casehssFcell.cell_type_numeRic:cellValue=string.valueof(cell.getnumericcellValue() );break;casehssFcell.cell_type_FoRmula:cell.setcelltype(hssFcell.cell_type_numeRic);cellValue=string.valueof(cell.getnumericcellValue() );break;casehssFcell.cell_type_blank:cellValue="";break;casehssFcell.cell_type_boolean:break;casehssFcell.cell_type_eRRoR:break;default:break;}returncellValue;}8、常用单元格边框格式虚线hssFcellstyle.boRdeR_dotted实线hssFcellstyle.boRdeR_thinpublicstatichssFcellstylegetcellstyle(shorttype){ne whssFworkbookwb=newhssFworkbook();hssFcellstylestyle=wb.createcellstyle();style.setborderbottom(type);//下边框style.setborderleft(type);//左边框style.setborderRight(type);//右边框style.setbordertop(type);//上边框returnstyle;}设置字体和内容位置hssFFontf=wb.createFont();f.setFontheightinpoints((short)11);//字号f.setboldweight(hssFFont.boldweight_noRmal);//加粗style.setFont(f);style.setalignment(hssFcellstyle.align_centeR);//左右居中style.setVerticalalignment(hssFcellstyle.VeRtical_centeR);//上下居中style.setRotation(shortrotation);//单元格内容的旋转的角度hssFdataFormatdf=wb.createdataFormat();style1.setdataFormat(df.getFormat("0.00%"));//设置单元格数据格式cell.setcellFormula(string);//给单元格设公式style.setRotation(shortrotation);//单元格内容的旋转的角度cell.setcellstyle(style);10、插入图片//先把读进来的图片放到一个bytearrayoutputstream 中,以便产生bytearraybytearrayoutputstreambytearrayout=newbytea rrayoutputstream();bufferedimagebufferimg=imageio.read(newFile("ok.jpg "));imageio.write(bufferimg,"jpg",bytearrayout);//读进一个excel模版Fileinputstreamfos=newFileinputstream(filepathname+"/stencil.xlt");fs=newpoiFsFilesystem(fos);//创建一个工作薄hssFworkbookwb=newhssFworkbook(fs);hssFsheetsheet=wb.getsheetat(0);hssFpatriarchpatriarch=sheet.createdrawingpatriarch ();hssFclientanchoranchor=newhssFclientanchor(0,0,1023 ,255,(short)0,0,(short)10,10);patriarch.createpictu re(anchor,wb.addpicture(bytearrayout.tobytearray(), hssFworkbook.pictuRe_type_jpeg));java操作excel(hssF样式一)importjava.io.ioexception;importjava.io.printwriter;importjava.util.arraylist;importjava.util.hashmap;importjava.util.iterator;importjava.util.list;importjavax.servlet.servletexception;importjavax.servlet.servletoutputstream;importjavax.servlet.http.httpservlet;importjavax.servlet.http.httpservletRequest;importjavax.servlet.http.httpservletResponse;ermodel.hssFcell;ermodel.hssFcellstyle;importorg.apache.poi.hssf.util.hssFcolor;importorg.apache.poi.hssf.util.Region;ermodel.hssFFont;ermodel.hssFRow;ermodel.hssFsheet;ermodel.hssFworkbook;hssFcellstyle类代表一种单元格样式。
使用POI来处理Excel和Word文件格式

// 文件二进制输入流private InputStream is = null;// 当前的Sheetprivate int currSheet;// 当前位置private int currPosition;// Sheet数量private int numOfSheets;// HSSFWorkbookHSSFWorkbook workbook = null;// 设置Cell之间以空格分割private static String EXCEL_LINE_DELIMITER = " ";// 设置最大列数private static int MAX_EXCEL_COLUMNS = 64;// 构造函数创建一个ExcelReaderpublic ExcelReader(String inputfile) throws IOException, Exception { // 判断参数是否为空或没有意义if (inputfile == null || inputfile.trim().equals("")) {throw new IOException("no input file specified");}// 取得文件名的后缀名赋值给filetypethis.filetype = inputfile.substring(stIndexOf(".") + 1);// 设置开始行为0currPosition = 0;// 设置当前位置为0currSheet = 0;// 创建文件输入流is = new FileInputStream(inputfile);// 判断文件格式if (filetype.equalsIgnoreCase("txt")) {// 如果是txt则直接创建BufferedReader读取reader = new BufferedReader(new InputStreamReader(is));}else if (filetype.equalsIgnoreCase("xls")) {// 如果是Excel文件则创建HSSFWorkbook读取workbook = new HSSFWorkbook(is);// 设置Sheet数numOfSheets = workbook.getNumberOfSheets();}else {throw new Exception("File Type Not Supported");}}// 函数readLine读取文件的一行public String readLine() throws IOException {// 如果是txt文件则通过reader读取if (filetype.equalsIgnoreCase("txt")) {String str = reader.readLine();// 空行则略去,直接读取下一行while (str.trim().equals("")) {str = reader.readLine();}return str;}// 如果是XLS文件则通过POI提供的API读取文件else if (filetype.equalsIgnoreCase("xls")) {// 根据currSheet值获得当前的sheetHSSFSheet sheet = workbook.getSheetAt(currSheet);// 判断当前行是否到但前Sheet的结尾if (currPosition > sheet.getLastRowNum()) {// 当前行位置清零currPosition = 0;// 判断是否还有Sheetwhile (currSheet != numOfSheets - 1) {// 得到下一张Sheetsheet = workbook.getSheetAt(currSheet + 1);// 当前行数是否已经到达文件末尾if (currPosition == sheet.getLastRowNum()) {// 当前Sheet指向下一张SheetcurrSheet++;continue;} else {// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}}return null;}// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}return null;}// 函数getLine返回Sheet的一行数据private String getLine(HSSFSheet sheet, int row) {// 根据行数取得Sheet的一行HSSFRow rowline = sheet.getRow(row);// 创建字符创缓冲区StringBuffer buffer = new StringBuffer();// 获取当前行的列数int filledColumns = rowline.getLastCellNum(); HSSFCell cell = null;// 循环遍历所有列for (int i = 0; i < filledColumns; i++) {// 取得当前Cellcell = rowline.getCell((short) i);String cellvalue = null;if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_NUMERIC: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,取得该Cell的Date值Date date = cell.getDateCellValue();// 把Date转换成本地格式的字符串cellvalue = cell.getDateCellValue().toLocaleString();}// 如果是纯数字else {// 取得当前Cell的数值Integer num = new Integer((int) cell.getNumericCellValue());cellvalue = String.valueOf(num);}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getStringCellValue().replaceAll("'", "''");break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}// 在每个字段之间插入分割符buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);}// 以字符串返回该行的数据return buffer.toString();}// close函数执行流的关闭操作public void close() {// 如果is不为空,则关闭InputSteam文件输入流if (is != null) {try {is.close();} catch (IOException e) {is = null;}}// 如果reader不为空则关闭BufferedReader文件输入流if (reader != null) {try {reader.close();} catch (IOException e) {reader = null;}}}}7.3.2 ExcelReader的运行效果下面创建一个main函数,用来测试上面的ExcelReader类,代码如下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
poifsfilesystem pdf
POIFSFileSystem PDF,是一种采用POI技术对PDF文件进行访问的文件系统。
POI技术是一种Java类库,可用于读写Microsoft Office文档。
而POIFSFileSystem PDF则是该技术延伸到PDF文档上的应用。
POI技术在读写Microsoft Office文件方面已经颇有成果,但是对于PDF文件,其读写能力并不足够。
因此,POIFSFileSystem PDF就应运而生。
该技术采用POI的资源库,封装了如读取、写入PDF、创建新PDF文件、读取和写入PDF中的文本、元数据等功能。
具体来说,POIFSFileSystem PDF包括如下功能:
1. 读取PDF文件并将其转换为POIFSFileSystem对象
2. 可用于读取PDF文件的各种元数据
3. 将文本和二进制数据写入PDF文件
4. 创建PDF文件并将其保存至POIFSFileSystem对象中
5. 向现有PDF文件中添加新内容(如文本、图像等)
6. 整合POI技术和Apache PDFBox技术,使得POIFSFileSystem PDF 能够处理PDF文件中的图片、页面和书签等元素。
POIFSFileSystem PDF还有一些优点:
1. 采用POI技术,基于Java语言,可跨平台使用
2. 提供API文档,易于使用
3. 内置example程序,可作为学习和实践使用的模板
4. 对开源生态友好,有利于开源社区的发展。
然而,POIFSFileSystem PDF并不是完美的。
它存在一些缺点,如:
1. 无法处理加密PDF
2. 某些格式的PDF文件不兼容
3. 操作PDF文件速度较慢
4. 开发难度相对较高,对开发人员技术要求较高。
不管怎样,毋庸置疑的是,POIFSFileSystem PDF为Java开发者提供了从根本上处理PDF文件的绝佳机会。
随着PDF在工作和学习中的普及,POIFSFileSystem PDF的应用场景将更加广泛。