JAVA导出WORD与EXCEL
Java数据导入导出Excel
![Java数据导入导出Excel](https://img.taocdn.com/s3/m/168493c59ec3d5bbfd0a7481.png)
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import jxl.Workbook;import jxl.format.UnderlineStyle;import bel;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class ExcelOpt {/*** 生成一个Excel文件jxl* @param fileName 要生成的Excel文件名* @jxl.jar 版本:2.6*/public static void writeExcel(String fileName){WritableWorkbook wwb = null;try {//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象wwb = Workbook.createWorkbook(new File(fileName));} catch (IOException e) {e.printStackTrace();}if(wwb!=null){//创建一个可写入的工作表//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置WritableSheet ws = wwb.createSheet("工作表名称", 0);//下面开始添加单元格for(int i=0;i<10;i++){for(int j=0;j<5;j++){//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");try {//将生成的单元格添加到工作表中ws.addCell(labelC);} catch (RowsExceededException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}try {//从内存中写入文件中wwb.write();//关闭资源,释放内存wwb.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}/*** 生成一个Excel文件POI* @param inputFile 输入模板文件路径* @param outputFile 输入文件存放于服务器路径* @param dataList 待导出数据* @throws Exception* @roseuid:*/public static void exportExcelFile(String inputFile,String outputFile,List dataList) throws Exception{//用模板文件构造poiPOIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));//创建模板工作表HSSFWorkbook templatewb = new HSSFWorkbook(fs);//直接取模板第一个sheet对象HSSFSheet templateSheet = templatewb.getSheetAt(1);//得到模板的第一个sheet的第一行对象为了得到模板样式HSSFRow templateRow = templateSheet.getRow(0);//HSSFSheet timplateSheet = templatewb.getSheetAt(1);//取得Excel文件的总列数int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();// Debug.println("columns is : " + columns); //========================= //创建样式数组HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];//一次性创建所有列的样式放在数组里for (int s = 0; s < columns; s++) {//得到数组实例styleArray[s] = templatewb.createCellStyle();} 循环对每一个单元格进行赋值//定位行for (int rowId = 1; rowId < dataList.size(); rowId++) {//依次取第rowId行数据每一个数据是valueListList valueList = (List) dataList.get(rowId - 1);//定位列for (int columnId = 0; columnId < columns; columnId++) {//依次取出对应与colunmId列的值//每一个单元格的值String dataValue = (String) valueList.get(columnId);//取出colunmId列的的style//模板每一列的样式HSSFCellStyle style = styleArray[columnId];//取模板第colunmId列的单元格对象//模板单元格对象HSSFCell templateCell = templateRow.getCell((short) columnId);//创建一个新的rowId行行对象//新建的行对象HSSFRow hssfRow = templateSheet.createRow(rowId);//创建新的rowId行columnId列单元格对象//新建的单元格对象HSSFCell cell = hssfRow.createCell((short) columnId);//如果对应的模板单元格样式为非锁定if (templateCell.getCellStyle().getLocked() == false) {//设置此列style为非锁定style.setLocked(false);//设置到新的单元格上cell.setCellStyle(style);}//否则样式为锁定else {//设置此列style为锁定style.setLocked(true);//设置到新单元格上cell.setCellStyle(style);}//设置编码cell.setEncoding(HSSFCell.ENCODING_UTF_16);//Debug.println("dataValue : " + dataV alue);//设置值统一为Stringcell.setCellValue(dataV alue);}}//设置输入流FileOutputStream fOut = new FileOutputStream(outputFile);//将模板的内容写到输出文件上templatewb.write(fOut);fOut.flush();//操作结束,关闭文件fOut.close();}/*** 导出数据为XLS格式* @param fos 生成Excel文件Path* @param bo 要导入的数据*/public static void writeExcelBo(String fos, java.util.List ve) {jxl.write.WritableWorkbook wwb;try{wwb= Workbook.createWorkbook(new File(fos));jxl.write.WritableSheet ws= wwb.createSheet("上市新书", 10);ws.addCell(new bel(0, 1, "书名"));ws.addCell(new bel(1, 1, "作者"));ws.addCell(new bel(2, 1, "定价"));ws.addCell(new bel(3, 1, "出版社"));int bookSize=ve.size();BookVO book = new BookVO();for (int i= 0; i < bookSize; i++){book= (BookVO)ve.get(i);ws.addCell(new bel(0, i + 2, "" + book.getBookName()));ws.addCell(new bel(1, i + 2, book.getBookAuthor()));ws.addCell(new bel(2, i + 2, "" + book.getBookPrice()));ws.addCell(new bel(3, i + 2, book.getBookConcern()));}// jxl.write.WritableFont wfc=//newjxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_U NDERLINE,jxl.format.Colour.BLACK);//jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);ws.addCell(new bel(0, 0, "2007年07月即将上市新书!"));wwb.write();// 关闭Excel工作薄对象wwb.close();} catch (IOException e){} catch (RowsExceededException e){} catch (WriteException e){}}public static void main(String[] args) {writeExcel("c:\\Test测试Excel.xls");System.out.println("OK");ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {BookVO book = new BookVO();book.setBookName("WebWork in action+"+i);book.setBookAuthor("唐勇+"+i);book.setBookPrice("39元+"+i);book.setBookConcern("飞思科技+"+i);list.add(book);}writeExcelBo("c:\\上市新书.xls",list);System.err.println("Book OK!!!");}}=================摘要=====================java如何操作Excel(数据导入导出)(转)jxl.jar,可以到下载。
easypoi的用法
![easypoi的用法](https://img.taocdn.com/s3/m/92f91c1fcdbff121dd36a32d7375a417866fc1ca.png)
easypoi的用法Easypoi是一个基于Apache POI的Java库,用于快速生成Excel、Word和PowerPoint等文档。
以下是Easypoi的简单用法示例:1. 导入Easypoi库的依赖包:```xml<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>1.11.3</version></dependency>```2. 创建一个Excel文档并添加数据:```java// 创建一个Excel导出工具类ExcelExportUtil exportUtil = newExcelExportUtil(YourModelClass.class);// 创建数据列表List<YourModelClass> dataList = new ArrayList<>(); dataList.add(new YourModelClass("John", 25));dataList.add(new YourModelClass("Mike", 30));// 添加数据到Excel文档exportUtil.setDatas(dataList);// 导出Excel文档exportUtil.write(response, "output.xlsx");```3. 创建一个Word文档并添加数据:```java// 创建一个Word导出工具类WordExportUtil exportUtil = new WordExportUtil();// 创建一个Word模板文件String templatePath = "path/to/your/template.docx"; exportUtil.initTemplate(templatePath);// 添加数据到Word文档exportUtil.put("name", "John");exportUtil.put("age", 25);// 导出Word文档exportUtil.write(response, "output.docx");```4. 创建一个PowerPoint文档:```java// 创建一个PowerPoint导出工具类PowerPointExportUtil exportUtil = new PowerPointExportUtil();// 创建一个空白的PowerPoint文档exportUtil.createPresentation();// 添加一页幻灯片exportUtil.createSlide();// 添加文本框到幻灯片exportUtil.createTextBox(x, y, width, height, "Hello World!");// 导出PowerPoint文档exportUtil.write(response, "output.pptx");```以上是Easypoi的简单用法示例,可以根据需求灵活调整和扩展。
java自定义注解在excel导出时的使用
![java自定义注解在excel导出时的使用](https://img.taocdn.com/s3/m/8480dc2d6fdb6f1aff00bed5b9f3f90f76c64da3.png)
java自定义注解在excel导出时的使用在Java中,自定义注解是一种用于在程序中进行标记的机制。
通过定义自己的注解,可以为类、方法、字段等元素添加元数据,用于描述它们的特性和行为。
在Excel导出时,自定义注解可以用来定义导出的字段和格式,并且可以通过反射机制来读取注解信息,实现自动导出的功能。
下面是一个简单的自定义注解示例:```javaimport ng.annotation.*;String name( default ""; // 导出字段的名称int width( default 20; // 导出字段的宽度String format( default ""; // 导出字段的格式```定义了注解之后,可以在需要导出的类中使用该注解对字段进行标记。
例如:```javapublic class Userprivate String name;private int age;//其他字段和方法...```接下来,可以编写一个用于导出Excel的工具类。
该类可以使用反射来读取类的字段和注解信息,并根据注解信息生成相应的Excel文件。
以下是一个简单的Excel导出工具类示例:```javapublic class ExcelExportUtilpublic static <T> void exportToExcel(List<T> data, Class<T> clazz, String filePath)//创建工作簿和工作表Workbook workbook = new HSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");//获取类的字段和注解信息Field[] fields = clazz.getDeclaredFields(;for (int i = 0; i < fields.length; i++)Field field = fields[i];ExcelField excelField =field.getAnnotation(ExcelField.class);if (excelField != null)//获取注解信息String fieldName = (;int width = excelField.width(;//设置列宽sheet.setColumnWidth(i, width * 256);//创建表头单元格Row headerRow = sheet.getRow(0);if (headerRow == null)headerRow = sheet.createRow(0);}Cell headerCell = headerRow.createCell(i); headerCell.setCellValue(fieldName);}}//创建数据行for (int i = 0; i < data.size(; i++)T item = data.get(i);Row dataRow = sheet.getRow(i + 1);if (dataRow == null)dataRow = sheet.createRow(i + 1);}for (int j = 0; j < fields.length; j++)Field field = fields[j];if (field.isAccessible()try//获取字段值Object value = field.get(item);//创建数据单元格并填充数据Cell dataCell = dataRow.createCell(j); if (value instanceof String) dataCell.setCellValue((String) value); } else if (value instanceof Integer) dataCell.setCellValue((int) value);} else if (value instanceof Double) dataCell.setCellValue((double) value); }} catch (IllegalAccessException e)e.printStackTrace(;}}}}// 保存Excel文件try (FileOutputStream outputStream = newFileOutputStream(filePath))workbook.write(outputStream);} catch (IOException e)e.printStackTrace(;}}```在上面的示例中,exportToExcel方法接收一个泛型列表和类的字节码对象,通过反射来读取类的字段和注解信息,并根据注解信息生成Excel文件。
Java使用Poi-tlword模板导出word
![Java使用Poi-tlword模板导出word](https://img.taocdn.com/s3/m/f69f73d051e2524de518964bcf84b9d528ea2cdd.png)
Java使⽤Poi-tlword模板导出word 1.导⼊依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.3</version></dependency>2.新建⼀个word,制作导出模板模板放⼊ resource/static/word/template⽂件夹下3.编写⼯具类⼯具类--WordExportServer.javapublic class WordExportServer {/*** 导出word**/public static void export(WordExportData wordExportData) throws IOException {HttpServletResponse response=wordExportData.getResponse();OutputStream out = response.getOutputStream();;XWPFTemplate template =null;try{ClassPathResource classPathResource = new ClassPathResource(wordExportData.getTemplateDocPath());String resource = classPathResource.getURL().getPath();resource= PdfUtil1.handleFontPath(resource);//渲染表格HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();Configure config = Configure.newBuilder().bind(wordExportData.getTableDataField(), policy).build();template = pile(resource, config).render(wordExportData.getWordData());String fileName=getFileName(wordExportData);/** ===============⽣成word到设置浏览默认下载地址=============== **/// 设置强制下载不打开response.setContentType("application/force-download");// 设置⽂件名response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);template.write(out);}catch (Exception e){e.printStackTrace();}finally {out.flush();out.close();template.close();}}/*** 获取导出下载的word名称* @param wordExportData* @return ng.String**/public static String getFileName(WordExportData wordExportData){if(null !=wordExportData.getFileName()){return wordExportData.getFileName()+".docx";}return System.currentTimeMillis()+".docx";}}word数据包装类--WordExportData .java@Datapublic class WordExportData {/*** word模板路径(static/wordTemplate/dealerListDocTemplate.docx)**/private String templateDocPath;/*** word填充数据(key值与模板中的key值要保持⼀致)**/private Map<String,Object> wordData;/*** word表格数据key值**/private String tableDataField;/*** word导出后的⽂件名(不填则⽤当前时间代替)**/private String fileName;private HttpServletResponse response;}4.controller层调⽤@RequestMapping("/printWord")public void printWord(HttpServletRequest request, HttpServletResponse response) throws IOException{String[] ids=request.getParameter("ids").split(";");List<DealerDto> goodsDataList=goodsService.getDealerListByIds(ids);Map<String,Object> docData=new HashMap<>(3);docData.put("detailList",goodsDataList);docData.put("title",标题);docData.put("subTitle",副标题);WordExportData wordExportData=new WordExportData();wordExportData.setResponse(response);wordExportData.setTableDataField("detailList");wordExportData.setTemplateDocPath(DEALER_DOC_TEMPLATE_PATH);//副本存放路径wordExportData.setWordData(docData);WordExportServer.export(wordExportData);}5.前端调⽤var ids = [];for (var index in checkData) {ids.push(checkData[index].id);}var batchIds = ids.join(";");layer.confirm('确定下载选中的数据吗?', function (index) {layer.close(index);window.location.href ='/goods/printWord?ids=' + batchIds;});6.总结优点:使⽤⽅法很简单,使⽤⼯具类的⽅法,⽅便复⽤于其他模块。
java实现导出Excel(跨行跨列)
![java实现导出Excel(跨行跨列)](https://img.taocdn.com/s3/m/17dba80911661ed9ad51f01dc281e53a59025165.png)
java实现导出Excel(跨行跨列)在Java中,可以使用Apache POI库来实现导出Excel文件,并且可以实现跨行和跨列的功能。
Apache POI是一个开源的Java库,可以处理Microsoft Office格式的文档,包括Excel。
以下是使用Apache POI库实现导出Excel文件的步骤:1. 首先,需要引入Apache POI依赖。
可以在Maven或Gradle中添加以下依赖项:```xml<!-- Apache POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>2. 创建一个Workbook对象,该对象代表一个Excel文件:```javaWorkbook workbook = new XSSFWorkbook(;```3. 创建一个Sheet对象,该对象代表Excel文件中的一个工作表:```javaSheet sheet = workbook.createSheet("Sheet1");```4. 创建行和单元格,根据需要设置跨行和跨列的属性。
可以使用CellRangeAddress类来实现跨行和跨列的功能:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);5. 将数据写入Excel文件中的单元格:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("Hello");```6. 将Workbook对象写入到文件中:```javaFileOutputStream fileOutputStream = new FileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;```完整的示例代码如下所示:```javaimport ermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;public class ExcelExporterpublic static void main(String[] args) throws IOExceptionWorkbook workbook = new XSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);FileOutputStream fileOutputStream = newFileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;System.out.println("Excel文件导出成功!");}```执行该代码后,会在项目的根目录下生成一个名为`output.xlsx`的Excel文件,其中包含一个跨行和跨列的单元格。
java导出excel浏览器直接下载或者或以文件形式导出
![java导出excel浏览器直接下载或者或以文件形式导出](https://img.taocdn.com/s3/m/455c1af8541810a6f524ccbff121dd36a32dc435.png)
java导出excel浏览器直接下载或者或以⽂件形式导出看代码吧~/*** excel表格直接下载*/public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse httpServletResponse,String fileName) throws Exception {//响应类型为application/octet- stream情况下使⽤了这个头信息的话,那就意味着不想直接显⽰内容httpServletResponse.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);//attachment为以附件⽅式下载httpServletResponse.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName + ".xls","utf-8"));/*** 代码⾥⾯使⽤Content-Disposition来确保浏览器弹出下载对话框的时候。
* response.addHeader("Content-Disposition","attachment");⼀定要确保没有做过关于禁⽌浏览器缓存的操作*/httpServletResponse.setHeader("Cache-Control", "No-cache");httpServletResponse.flushBuffer();wb.write(httpServletResponse.getOutputStream());wb.close();}/*** excel以⽂件的形式导出* @throws Exception*/public static void exportExcelByFile(HSSFWorkbook wb,String fileName,String path) throws Exception{ByteArrayOutputStream stream = new ByteArrayOutputStream();wb.write(stream);FileOutputStream outputStream = new FileOutputStream(path + fileName);outputStream.write(stream.toByteArray());stream.close();outputStream.close();}java查询数据导出excel并返回给浏览器下载效果图:1.点击导出表按钮2.接着就会出现下图3.点击上图中的确定按钮再接着就会出现下图4.点击上图中的保存按钮接着就会出现下图,浏览器下载完成后的提⽰5.打开下载好的⽂件如下图好了,废话不多少,上代码jsp前端代码<div style="height:30px;"><a>时间:</a><input id="startDateConsume" type="text" class="easyui-datebox"> <a>-</a><input id="endDateConsume" type="text" class="easyui-datebox"><a>消费类型:</a><select id="consumesType" name=""><option value="0" selected="selected">所有</option><option value="1">报名费</option><option value="2">酒⽔零⾷类</option></select><a>⽀付状态:</a><select id="conPaymentStatus" name=""><option value="0" selected="selected">所有</option><option value="1">未⽀付</option><option value="2">已⽀付</option></select><a id="btnConsumesSearch" class="easyui-linkbutton"data-options="iconCls:'icon-search'" style="margin-left:10px">查询</a><a>(查询出来的数据可统计)</a><a id="consumesOutExcel" class="easyui-linkbutton" style="" data-options="iconCls:'icon-redo'">导出表</a></div>js前端代码$(function() {//导出excel表$('#consumesOutExcel').on('click',function(){exportExcel();});});function exportExcel() {$.messager.confirm('确认', '确认把该搜索结果导出Excel表格?', function(r) {if (r) {var startTime = $('#startDateConsume').val();var endTime = $('#endDateConsume').val();var consumesType = $('#consumesType').val();var conPaymentStatus = $('#conPaymentStatus').val();$.messager.progress({title : '处理中',msg : '请稍后',});$.messager.progress('close');location.href="web/vip/exportExcel.xlsx?startTime=" rel="external nofollow" +startTime+"&endTime="+endTime+"&consumesType="+consumesType+"&conPaymentStatus="+conPaymentStatus; }});}java后端代码@Controller@RequestMapping("/vip")public class VipController {//⽂件下载:导出excel表@RequestMapping(value = "/exportExcel.xlsx",method = RequestMethod.GET)@ResponseBodypublic void exportExcel(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException{//⼀、从后台拿数据if (null == request || null == response){return;}List<VipConsumes> list = null;String startTime = request.getParameter("startTime");String endTime = request.getParameter("endTime");int consumesType = Integer.parseInt(request.getParameter("consumesType"));int conPaymentStatus =Integer.parseInt(request.getParameter("conPaymentStatus"));VipConsumesExample example = new VipConsumesExample();if(consumesType!=0 && conPaymentStatus!=0){example.createCriteria().andTimeBetween(startTime, endTime).andConsumeTypeEqualTo(consumesType).andStatusEqualTo(conPaymentStatus);}else if(consumesType ==0 && conPaymentStatus!=0) {example.createCriteria().andTimeBetween(startTime, endTime).andStatusEqualTo(conPaymentStatus);}else if(consumesType!=0 && conPaymentStatus==0){example.createCriteria().andTimeBetween(startTime, endTime).andConsumeTypeEqualTo(consumesType);}else {example.createCriteria().andTimeBetween(startTime, endTime);}list = this.vipConsumesDao.selectByExample(example);//⼆、数据转成excelrequest.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("application/x-download");String fileName = "消费记录.xlsx";fileName = URLEncoder.encode(fileName, "UTF-8");response.addHeader("Content-Disposition", "attachment;filename=" + fileName); // 第⼀步:定义⼀个新的⼯作簿XSSFWorkbook wb = new XSSFWorkbook();// 第⼆步:创建⼀个Sheet页XSSFSheet sheet = wb.createSheet("startTimeendTime");sheet.setDefaultRowHeight((short) (2 * 256));//设置⾏⾼sheet.setColumnWidth(0, 4000);//设置列宽sheet.setColumnWidth(1,5500);sheet.setColumnWidth(2,5500);sheet.setColumnWidth(3,5500);sheet.setColumnWidth(11,3000);sheet.setColumnWidth(12,3000);sheet.setColumnWidth(13,3000);XSSFFont font = wb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 16);XSSFRow row = sheet.createRow(0);XSSFCell cell = row.createCell(0);cell.setCellValue("流⽔号 ");cell = row.createCell(1);cell.setCellValue("微信名 ");cell = row.createCell(2);cell.setCellValue("微信订单号");cell = row.createCell(3);cell.setCellValue("消费时间");cell = row.createCell(4);cell.setCellValue("消费类型");cell = row.createCell(5);cell.setCellValue("剩余积分 ");cell = row.createCell(6);cell.setCellValue("新增积分 ");cell = row.createCell(7);cell.setCellValue("扣除积分 ");cell = row.createCell(8);cell.setCellValue("消费⾦额");cell = row.createCell(9);cell.setCellValue("⽀付⽅式");cell = row.createCell(10);cell.setCellValue("⽀付状态 ");cell = row.createCell(11);cell.setCellValue("钱包原始⾦额");cell = row.createCell(12);cell.setCellValue("钱包扣除⾦额");cell = row.createCell(13);cell.setCellValue("钱包剩余⾦额");XSSFRow rows;XSSFCell cells;for (int i = 0; i < list.size(); i++) {// 第三步:在这个sheet页⾥创建⼀⾏rows = sheet.createRow(i+1);// 第四步:在该⾏创建⼀个单元格cells = rows.createCell(0);// 第五步:在该单元格⾥设置值cells.setCellValue(list.get(i).getConsumeId());cells = rows.createCell(1);cells.setCellValue(list.get(i).getName());cells = rows.createCell(2);cells.setCellValue(list.get(i).getOrderNumber());cells = rows.createCell(3);cells.setCellValue(list.get(i).getTime());cells = rows.createCell(4);if (list.get(i).getConsumeType() == 2) {cells.setCellValue("酒⽔零⾷费");} else {cells.setCellValue("报名费");}cells = rows.createCell(5);cells.setCellValue(list.get(i).getIntegral());cells = rows.createCell(6);cells.setCellValue(list.get(i).getIntegralIn());cells = rows.createCell(7);cells.setCellValue(list.get(i).getIntegralOut());cells = rows.createCell(8);cells.setCellValue(list.get(i).getMoney());cells = rows.createCell(9);if (list.get(i).getPayment() == 2) {cells.setCellValue("积分抵现");} else if (list.get(i).getPayment() == 3) {cells.setCellValue("微信⽀付");} else if (list.get(i).getPayment() == 4) {cells.setCellValue("现⾦");} else if (list.get(i).getPayment() == 1) {cells.setCellValue("钱包");}cells = rows.createCell(10);if (list.get(i).getStatus() == 2) {cells.setCellValue("已⽀付");} else if (list.get(i).getStatus() == 1) {cells.setCellValue("未⽀付");}cells = rows.createCell(11);cells.setCellValue(list.get(i).getWalletOriginal());cells = rows.createCell(12);cells.setCellValue(list.get(i).getWalletOut());cells = rows.createCell(13);cells.setCellValue(list.get(i).getWalletSurplus());}try {OutputStream out = response.getOutputStream();wb.write(out);out.close();wb.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
JAVA不使用POI,用PageOffice动态导出Word文档
![JAVA不使用POI,用PageOffice动态导出Word文档](https://img.taocdn.com/s3/m/8d694510227916888486d7bf.png)
JAVA不使用POI,用PageOffice动态导出Word文档很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功能即可实现。
但若是用户想动态生成一个没有固定模版的公文时,换句话说,没有办法事先准备一个固定格式的模板时,就需要开发人员在后台用代码实现Word文档的从零到图文并茂的动态生成功能了。
这里的“零”指的是Word空白文档。
那如何实现Word文档的从无到有呢,下面我就把自己实现这一功能的过程介绍一下。
例如,我想打开一个Word文档,里面的内容为:标题(粗体、黑体、字体大小为20、居中显示)、第一段内容(内容(略)、字体倾斜、字体大小为10、中文“楷体”、英文“Times New Roman”、红色、最小行间距、左对齐、首行缩进)、第二段内容(内容(略)、字体大小为12、黑体、1.5倍行间距、左对齐、首行缩进、插入图片)、第三段内容(内容(略)、字体大小为14、华文彩云、2倍行间距、左对齐、首行缩进)第一步:请先安装PageOffice的服务器端的安装程序,之后在WEB项目下的“WebRoot/WEB-INF/lib”路径中添加pageoffice.cab和pageoffice.jar(在网站的“下载中心”中可下载相应的压缩包,解压之后直接将pageoffice.cab和pageoffice.jar文件拷贝到该目录下就可以了)文件。
第二步:修改WEB项目的配置文件,将如下代码添加到配置文件中:<!-- PageOffice Begin --><servlet><servlet-name>poserver</servlet-name><servlet-class>com.zhuozhengsoft .pageoffice.poserver.Server</servlet-class></servlet><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/poserver.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pageoffice.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/popdf.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/sealsetup.exe</url-pattern></servlet-mapping><servlet><servlet-name>adminseal</servlet-name><servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal </servlet-class></servlet><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/adminseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/loginseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/sealimage.do</url-pattern></servlet-mapping><mime-mapping><extension>mht</extension><mime-type>message/rfc822</mime-type></mime-mapping><context-param><param-name>adminseal-password</param-name><param-value>123456</param-value></context-param><!-- PageOffice End -->第三步:在WEB项目的WebRoot目录下添加文件夹存放word模板文件,在此命名为“doc”,将要打开的空白Word文件拷贝到该文件夹下,我要打开的Word文件为“test.doc”。
文件导入导出Word、Excel
![文件导入导出Word、Excel](https://img.taocdn.com/s3/m/ac8821c126fff705cc170abf.png)
第三方jar简介1. POI 简介POI 是Apache 下的Jakata 项目的一个子项目,主要用于提供java 操作MicrosoftOffice 办公套件如Excel,Word,Powerpoint 等文件的API.微软的Office 办公软件在企业的日常办公中占据着重要的地位,人们已经非常熟悉Office 的使用。
在我们开发的应用系统中,常常需要将数据导出到Excel 文件中,或者Word 文件中进行打印。
比如移动的话费查询系统中就提供了将话费清单导入到excel 表格中的功能。
这样在web 应用中,我们在浏览器中看到的数据可以被导出到Excel 中了。
Excel 文件: xls 格式文件对应POI API 为HSSF 。
xlsx 格式为office 2007 的文件格式,POI 中对应的API 为XSSFWord 文件:doc 格式文件对应的POI API 为HWPF。
docx 格式为XWPF powerPoint 文件:ppt 格式对应的POI API 为HSLF。
pptx 格式为XSLFoutlook :对应的API 为HSMFVisio: 对应的API 为HDGFPublisher : 对应的API 为HPBF2. iText简介iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java 类库。
通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH 中加入iText.jar的路径,在程序中就可以使用iText类库了。
用处一般情况下,iText使用在有以下一个要求的项目中:∙内容无法提前利用:取决于用户的输入或实时的数据库信息。
∙由于内容,页面过多,PDF文档不能手动生成。
∙文档需在无人参与,批处理模式下自动创建。
Java实现用Freemarker完美导出word文档(带图片)
![Java实现用Freemarker完美导出word文档(带图片)](https://img.taocdn.com/s3/m/434590ea951ea76e58fafab069dc5022aaea469f.png)
Java实现⽤Freemarker完美导出word⽂档(带图⽚)前⾔最近在项⽬中,因客户要求,将页⾯内容(如合同协议)导出成word,在⽹上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题。
准备材料1.word原件2.编辑器(推荐Firstobject free XML editor)实现步骤1.⽤Microsoft Office Word打开word原件;2.把需要动态修改的内容替换成***,如果有图⽚,尽量选择较⼩的图⽚⼏⼗K左右,并调整好位置;3.另存为,选择保存类型Word 2003 XML ⽂档(*.xml)【这⾥说⼀下为什么⽤Microsoft Office Word打开且要保存为Word2003XML,本⼈亲测,⽤WPS找不到Word 2003XML选项,如果保存为Word XML,会有兼容问题,避免出现导出的word⽂档不能⽤Word 2003打开的问题】;4.⽤Firstobject free XML editor打开⽂件,选择Tools下的Indent【或者按快捷键F8】格式化⽂件内容。
左边是⽂档结构,右边是⽂档内容;5. 将⽂档内容中需要动态修改内容的地⽅,换成freemarker的标识。
其实就是Map<String, Object>中key,如${landName};6.在加⼊了图⽚占位的地⽅,会看到⼀⽚base64编码后的代码,把base64替换成${image},也就是Map<String, Object>中key,值必须要处理成base64;代码如:<w:binData w:name="wordml://⾃定义.png" xml:space="preserve">${image}</w:binData>注意:“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换⾏等符号。
java实现数据的Excel导出,自定义导出字段,转换字典值
![java实现数据的Excel导出,自定义导出字段,转换字典值](https://img.taocdn.com/s3/m/6ecbbf0fa66e58fafab069dc5022aaea998f4115.png)
java实现数据的Excel导出,⾃定义导出字段,转换字典值第⼀版代码:基础功能跳转此⽂章:简介新增功能:1. 添加⾃定义字段导出功能, ⽤户可以选择字段进⾏导出2. 将字典类型数据进⾏转换(如:0=⼥,1=男, 将0转换为⼥, 1转换为男)3. 添加表头格式4. 随机⽂件名称, 防⽌多次导出时⽂件覆盖问题实现代码Excel注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Excel {/*** 导出到Excel中的名字*/String name() default "";/*** ⽇期格式, 如: yyyy-MM-dd*/String dateFormat() default "";/*** 字典的key值*/String dictKey() default "";/*** 读取内容转表达式 (如: 0=男,1=⼥,2=未知)*/String dictExp() default "";}123456789101112131415161718192021222324public class ExcelUtil<T> {/*** ⼯作薄*/private Workbook wb;/*** ⼯作表*/private Sheet sheet;/*** 需要导出的数据*/private List<T> exportList;/*** 对象的class对象*/private Class<T> clazz;/*** 被选中需要导出的字段名称*/private Map<String, Object> checkedFieldsName;/*** 被选中需要导出的字段对象*/private List<Field> checkedFields;/*** 包含需要字典转换的字段对象*/private List<Field> fieldsContainDict;/*** 对象中的字典值*/private Map<String, Map<String, String>> dicts;private ExcelUtil(){}public ExcelUtil(Class<T> clazz){this.clazz = clazz;}/**** @param list* @param sheetName* @param fieldsName*/public void exportExcel(List<T> list, Map<String, Object> fieldsName, String sheetName){ // 初始化数据init(list, sheetName, fieldsName);// 转换字典值try {convertDict();} catch (IllegalAccessException e) {e.printStackTrace();}// sheet第⼀⾏加⼊名称数据createTopRow();// sheet其他⾏,添加⽬标数据try {createOtherRow();} catch (IllegalAccessException e) {e.printStackTrace();}// 导出wbtry(OutputStream outFile = new FileOutputStream(generateFileName())){wb.write(outFile);} catch (IOException e) {e.printStackTrace();}}}/*** 添加导出数据*/private void createOtherRow() throws IllegalAccessException {for (int rowNum = 1; rowNum <= exportList.size(); rowNum++) {Row row = sheet.createRow(rowNum);T t = exportList.get(rowNum - 1);for (int colNum = 0; colNum < checkedFields.size(); colNum++) {Cell cell = row.createCell(colNum);Field field = checkedFields.get(colNum);field.setAccessible(true);// 单元格设置值addCell(cell, field, t);}}}/*** 单元格中添加数据** @param cell 单元格* @param field 字段* @param t list中的⼀条数据*/private void addCell(Cell cell, Field field, T t) throws IllegalAccessException {Class<?> fieldType = field.getType();if (String.class == fieldType) {cell.setCellValue((String) field.get(t));} else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {cell.setCellValue((Integer) field.get(t));} else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {cell.setCellValue((Long) field.get(t));} else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) {cell.setCellValue((Double) field.get(t));} else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {cell.setCellValue((Float) field.get(t));} else if (Date.class == fieldType) {String dateFormat = field.getAnnotation(Excels.class).dateFormat();cell.setCellValue(dateFormat((Date) field.get(t), dateFormat));}}/*** 时间格式转换* @param date ⽇期* @param dateFormat ⽇期格式* @return*/private String dateFormat(Date date, String dateFormat) {if (dateFormat == null || "".equals(dateFormat)) {dateFormat = "yyyy-MM-dd HH:mm:ss";}SimpleDateFormat df = new SimpleDateFormat(dateFormat);return df.format(date);}/*** sheet第⼀⾏加⼊名称数据*/private void createTopRow() {Row row = sheet.createRow(0);Map<String, CellStyle> styles = createStyles(wb);for (int index = 0; index < checkedFields.size(); index++) {Cell cell = row.createCell(index);cell.setCellValue(checkedFields.get(index).getAnnotation(Excels.class).name()); System.out.println(styles.get("header"));cell.setCellStyle(styles.get("header"));}}private void convertDict() throws IllegalAccessException {for (Field field : fieldsContainDict) {Excels annotation = field.getAnnotation(Excels.class);String dictKey = annotation.dictKey();field.setAccessible(true);for (T t : exportList) {// 获取字段值String o = (String) field.get(t);field.set(t, dicts.get(dictKey).get(o));}}}/*** 将数据导出Excel** @param list 需要导出的数据* @param sheetName ⼯作表名称*/public void exportExcel(List<T> list, String sheetName){exportExcel(list, null, sheetName);}/*** 将数据导出Excel** @param list 需要导出的数据*/public void exportExcel(List<T> list) {exportExcel(list, null, "sheet");}/*** 初始化*/public void init(List<T> list ,String sheetName, Map<String, Object> fieldsName){ this.checkedFieldsName = fieldsName;this.exportList = list;// 初始化导出数据initExportList();// 初始化⼯作薄initWorkbook();// 初始化⼯作表initSheet(sheetName);// 初始化checkedFields, fieldsContainDictinitFields();// 根据注解⽣成⽣成字典generateObjDict();}/*** 初始化导出数据*/private void initExportList(){// 防⽌导出过程中出现空指针if(Objects.isNull(this.exportList)) {this.exportList = new ArrayList<>();}}/*** 初始化⼯作簿*/private void initWorkbook(){this.wb = new SXSSFWorkbook();}/*** 初始化⼯作表*/private void initSheet(String sheetName){this.sheet = wb.createSheet(sheetName);}* 1.如果checkedFieldsName没有定义(未⾃定义导出字段),所有字段全部导出 * 2.如果checkedFieldsName进⾏了定义,根据定义字段进⾏导出*/private void initFields(){// 获取对象所有字段对象Field[] fields = clazz.getDeclaredFields();// 过滤出checkedFieldsthis.checkedFields = Arrays.asList(fields).stream().filter(item -> {if(!Objects.isNull(this.checkedFieldsName)) {if (item.isAnnotationPresent(Excel.class)) {return checkedFieldsName.containsKey(item.getName());}} else {return item.isAnnotationPresent(Excel.class);}return false;}).collect(Collectors.toList());// 过滤出fieldsContainDictthis.fieldsContainDict = Arrays.asList(clazz.getDeclaredFields()).stream().filter(item -> !"".equals(item.getAnnotation(Excel.class).dictExp())).collect(Collectors.toList(}/*** 通过扫描字段注解⽣成字典数据*/private void generateObjDict(){if(fieldsContainDict.size() == 0) {return;}if(dicts == null) {dicts = new HashMap<>(); // Map<String, List<Map<String, String>>>}for (Field field : fieldsContainDict) {String dictKey = field.getAnnotation(Excel.class).dictKey();String exps = field.getAnnotation(Excel.class).dictExp();String[] exp = exps.split(",");Map<String, String> keyV = new HashMap<>();dicts.put(dictKey, keyV);for (String s : exp) {String[] out = s.split("=");keyV.put(out[0], out[1]);}System.out.println("字典值:"+ dicts);}}/*** 创建表格样式** @param wb ⼯作薄对象* @return 样式列表*/private Map<String, CellStyle> createStyles(Workbook wb){Map<String, CellStyle> styles = new HashMap<String, CellStyle>();// 数据格式CellStyle style = wb.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setBorderRight(BorderStyle.THIN);style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setBorderLeft(BorderStyle.THIN);style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setBorderTop(BorderStyle.THIN);dataFont.setFontHeightInPoints((short) 10);style.setFont(dataFont);styles.put("data", style);// 表头格式style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data"));style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font headerFont = wb.createFont();headerFont.setFontName("Arial");headerFont.setFontHeightInPoints((short) 10);headerFont.setBold(true);headerFont.setColor(IndexedColors.WHITE.getIndex());style.setFont(headerFont);styles.put("header", style);return styles;}/*** ⽣成随机名称,防⽌⽂件复写* @return*/private String generateFileName(){return "D:\\" + UUID.randomUUID().toString().replace("-", "") + ".xlsx";}}12345678910111213141516171819202122232425262728293031323334353637383948 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369使⽤⽅法将对象加上⼯具类需要的注解: @Data@NoArgsConstructor@AllArgsConstructorpublic class Student {@Excel(name = "姓名")private String name;@Excel(name = "年龄")private Integer age;@Excel(name = "出⽣⽇期", dateFormat = "yyyy-MM-dd")private Date birthday;@Excel(name = "性别", dictKey = "sex", dictExp = "1=男,2=⼥")private String sex;}1234567891011121314151617测试字典转换public static void main(String[] args) {ArrayList<Student> data = new ArrayList<>();Student student = new Student();student.setName("tom");student.setAge(19);student.setSex("1");student.setBirthday(new Date());data.add(student);ExcelUtil<Student> util = new ExcelUtil<>(Student.class);util.exportExcel(data, "⼈员信息表");}123456789101112输出结果:结果可以看出, 已将1转换为男了测试选择字段导出:若不⾃定义导出的字段, ⼯具将会把所有带有Excel注解的字段进⾏导出, 如上⽅所⽰。
Java导出Excel使用POI之SXSSFWorkbook方式
![Java导出Excel使用POI之SXSSFWorkbook方式](https://img.taocdn.com/s3/m/629c02a4d0f34693daef5ef7ba0d4a7302766cd1.png)
package avicit.mms.mes.mesexceptionbillz.service;
import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.List; import java.util.Map;
import ermodel.HSSFCellStyle; import org.apache.poi.hssf.util.HSSFColor; import ermodel.Cell; import ermodel.CellStyle; import ermodel.Font; import ermodel.Row; import ermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
easypoi常用的一些指令和其作用
![easypoi常用的一些指令和其作用](https://img.taocdn.com/s3/m/2537a29151e2524de518964bcf84b9d528ea2c25.png)
easypoi常用的一些指令和其作用标题:easypoi常用指令及其作用Easypoi是一款基于Java语言开发的简单易用的Excel和Word文档操作工具,可以帮助开发人员快速生成和操作Excel和Word文档。
下面将介绍一些常用的easypoi指令及其作用。
1. 导出Excel文档:使用easypoi的`ExcelExportUtil.exportExcel`方法,可以将数据导出为Excel文档。
通过指定模板,可以实现自定义样式和格式。
2. 导入Excel文档:使用easypoi的`ExcelImportUtil.importExcel`方法,可以将Excel文档导入为Java对象,方便后续的数据处理和操作。
3. 导出Word文档:使用easypoi的`WordExportUtil.exportWord07`方法,可以将数据导出为Word文档。
可以根据需求设置模板和样式,实现个性化的文档导出。
4. 数据校验:easypoi提供了数据校验的功能,可以通过`@ExcelVerify`注解对导入的Excel数据进行校验,确保数据的准确性和有效性。
5. 图片导出:通过easypoi,可以将图片导出到Excel或Word文档中。
使用`ExcelExportUtil.exportBigExcel`方法时,可以使用`@Excel`注解的`type`属性将图片导出到Excel中。
6. 表格样式设置:easypoi提供了丰富的表格样式设置功能,可以通过`@Excel`注解的`style`属性设置单元格的样式,包括字体、颜色、对齐方式等。
7. 数据格式化:easypoi支持对数据进行格式化,可以通过`@Excel`注解的`format`属性设置数据的格式,如日期格式、数值格式等。
8. 列排序和隐藏:easypoi支持对导出的Excel列进行排序和隐藏。
通过`@Excel`注解的`sort`属性可以设置列的排序顺序,通过`@Excel`注解的`isColumnHidden`属性可以设置列的隐藏状态。
javaexcel动态字段导出的方法
![javaexcel动态字段导出的方法](https://img.taocdn.com/s3/m/2415f2052f3f5727a5e9856a561252d380eb203c.png)
javaexcel动态字段导出的方法### Java Excel动态字段导出的方法在Java应用程序中,Excel文件的动态字段导出是一项常见需求,尤其是在报表生成和数据分析的场景下。
以下将详细介绍如何使用Java实现动态字段导出到Excel的方法。
#### 1.准备工作- 确保你的项目中引入了Apache POI库,这是一个强大的Java库,用于处理Microsoft Office文档。
- 创建一个Excel模板,如果你需要固定某些表头或者样式。
#### 2.实现动态字段导出的步骤##### 步骤1:定义数据模型首先,定义一个Java对象来表示Excel表中的数据模型。
```javapublic class DataModel {private String fieldName1;private int fieldNumber2;// 其他字段...// 省略getter和setter方法}```##### 步骤2:创建Excel工作簿```javaimport ermodel.*;import ermodel.XSSFWorkbook; Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("数据");Row headerRow = sheet.createRow(0);```##### 步骤3:设置表头动态设置表头,可以根据实际需求添加或减少字段。
```javaString[] headers = {"字段1", "字段2", "字段3"};for (int i = 0; i < headers.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(headers[i]);}```##### 步骤4:填充数据```javaList<DataModel> dataModels = // 假设这是你的数据源int rowNum = 1;for (DataModel model : dataModels) {Row row = sheet.createRow(rowNum++);row.createCell(0).setCellValue(model.getFieldName1());row.createCell(1).setCellValue(model.getFieldNumber2());// 其他字段...}```##### 步骤5:设置样式(可选)根据需要,可以为单元格设置样式。
java导出word的6种方式(复制来的文章)
![java导出word的6种方式(复制来的文章)](https://img.taocdn.com/s3/m/85307c6059fafab069dc5022aaea998fcc22406d.png)
java导出word的6种⽅式(复制来的⽂章)来⾃:最近做的项⽬,需要将⼀些信息导出到word中。
在⽹上找了好多解决⽅案,现在将这⼏天的总结分享⼀下。
⽬前来看,java导出word⼤致有6种解决⽅案:1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建⼀座桥梁。
使⽤Jacob⾃带的DLL动态链接库,并通过JNI的⽅式实现了在Java平台上对COM程序的调⽤。
DLL动态链接库的⽣成需要windows平台的⽀持。
该⽅案只能在windows平台实现,是其局限性。
2:Apache POI包括⼀系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式⽂件,可以通过这些API在Java中读写Excel、Word等⽂件。
他的excel处理很强⼤,对于word还局限于读取,⽬前只能实现⼀些简单⽂件的操作,不能设置样式。
3:Java2word是⼀个在java程序中调⽤ MS Office Word ⽂档的组件(类库)。
该组件提供了⼀组简单的接⼝,以便java程序调⽤他的服务操作Word ⽂档。
这些服务包括:打开⽂档、新建⽂档、查找⽂字、替换⽂字,插⼊⽂字、插⼊图⽚、插⼊表格,在书签处插⼊⽂字、插⼊图⽚、插⼊表格等。
填充数据到表格中读取表格数据,1.1版增强的功能:指定⽂本样式,指定表格样式。
如此,则可动态排版word⽂档。
是⼀种不错的解决⽅案。
4:iText是著名的开放源码的站点sourceforge⼀个项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。
通过iText不仅可以⽣成PDF或rtf的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
功能强⼤。
5:JSP输出样式,该⽅案实现简单,但是处理样式有点缺陷,简单的导出可以使⽤。
6:⽤XML做就很简单了。
Word从2003开始⽀持XML格式,⼤致的思路是先⽤office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后⽤java来解析FreeMarker模板并输出Doc。
HutoolJava工具类库导出Excel,超级简单!
![HutoolJava工具类库导出Excel,超级简单!](https://img.taocdn.com/s3/m/6d26628c03d276a20029bd64783e0912a2167c73.png)
HutoolJava⼯具类库导出Excel,超级简单!⾸先在POM.xml中加⼊GAV<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.0.7</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version></dependency>Excel写⼊实体类import lombok.AllArgsConstructor;import lombok.Data;import java.util.Date;@Data@AllArgsConstructorpublic class User {private String name;private int age;private Date birthday;}然后在控制层使⽤就⾏@RequestMapping("/export")@ResponseBodypublic void export(HttpServletResponse response) {List<User> list = new ArrayList<>();list.add(new User("zhangsan0", "1231", new Date()));list.add(new User("zhangsan1", "1232", new Date()));list.add(new User("zhangsan2", "1233", new Date()));list.add(new User("zhangsan3", "1234", new Date()));list.add(new User("zhangsan4", "1235", new Date()));list.add(new User("zhangsan5", "1236", new Date()));// 通过⼯具类创建writer,默认创建xls格式ExcelWriter writer = ExcelUtil.getWriter();//⾃定义标题别名writer.addHeaderAlias("name", "姓名");writer.addHeaderAlias("age", "年龄");writer.addHeaderAlias("birthDay", "⽣⽇");// 合并单元格后的标题⾏,使⽤默认标题样式writer.merge(2, "申请⼈员信息");// ⼀次性写出内容,使⽤默认样式,强制输出标题writer.write(list, true);//out为OutputStream,需要写出到的⽬标流//response为HttpServletResponse对象response.setContentType("application/vnd.ms-excel;charset=utf-8");//test.xls是弹出下载对话框的⽂件名,不能为中⽂,中⽂请⾃⾏编码String name = StringUtils.toUtf8String("申请学院");response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls");ServletOutputStream out = null;try {out = response.getOutputStream();writer.flush(out, true);} catch (IOException e) {e.printStackTrace();} finally {// 关闭writer,释放内存writer.close();}//此处记得关闭输出Servlet流IoUtil.close(out);}Excel读取1.读取Excel中所有⾏和列,都⽤列表表⽰ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");List<List<Object>> readAll = reader.read();2.读取为Map列表,默认第⼀⾏为标题⾏,Map中的key为标题,value为标题对应的单元格值。
javaweb页面导出word
![javaweb页面导出word](https://img.taocdn.com/s3/m/fc385b4cbf23482fb4daa58da0116c175f0e1ea7.png)
javaweb页⾯导出word①我做了⼀个word模板,定义好了书签为listyd,书签是在⼀个表格中,在书签位置动态的⽣成表格,例⼦代码如下:var ole = new ActiveXObject("Word.Application");var url=c:\nsqktzs_fm.doc"var doc =ole.documents.open(url,false,false);ole.V isible = true;ole.selection.find.forward =true;var rg=ole.selection.goto(true,0,0,"listyd");var tab=doc.Tables.Add(rg, 2,2) ;for(var i=1;i<=2;i++){for(var j=1;j<=2;j++){var rgcell=tab.Cell(i,j).Range;rgcell.InsertAfter(i+j);}}⽣成的表格嵌套在以前的表格中,很难看,如何能让⽣成的表格和外边的表格看上去是⼀个整体。
rgcell.InsertAfter(i+j);可以⽤insertBefore么。
也可以考虑⽤java语⾔做word模板。
③.⼩弟最近在做JSP页⾯内容导出到Word,但遇到了很多困难,望各位⼤侠急救需求:1.将JSP页⾯中的内容导出到Word⽂件中。
2.JSP页⾯中包含图⽚,图⽚的数据是从数据库中加载出来,实时⽣成的。
⼩弟在⽹上看过N个例⼦,也测试了,就是⽆法解决,问题如下:1.通过window.document.location.href='test.action'的链接⽅式,访问加⼀个JSP页⾯,⽂件头为:<%@ page contentType="application/msword;charset=gbk"%>当点击“导出”按钮时,可以⽣成Word⽂件,但是图⽚⽆法在Word中⽣成.2.直接在页⾯中加JS脚本:var oWD = new ActiveXObject("Word.Application");oWD.WindowState = 2;var oDC = oWD.Documents.Add("",0,1);var oRange =oDC.Range(0,1);var sel = document.body.createTextRange();sel.moveToElementText(PrintA);sel.select();sel.execCommand("Copy");oRange.Paste();oWD.Application.Visible = true;在我的电脑上可以导出Word(我的office版本是2007)⽂件,并且可以显⽰图⽚。
java生成excel(多级表头)导出
![java生成excel(多级表头)导出](https://img.taocdn.com/s3/m/fcb94d6e5bcfa1c7aa00b52acfc789eb162d9e58.png)
java⽣成excel(多级表头)导出依赖⼯具包<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5</version></dependency></dependencies>该⼯具包是对 Apache POI包的分装private void export(HttpServletResponse response, String fileName, List<?> projects, List<SummarizeDownloadColumns> columns) throws IOException { ExcelWriter bigWriter = ExcelUtil.getBigWriter();//创建⼀⾏空表头占个位置bigWriter.writeHeadRow(new LinkedList());//创建需要展⽰的的⼆级表头,{filedName,中⽂名}int lastCol = 0;for (int i = 0; i < columns.size(); i++) {if (columns.get(i).getChildren() != null) {for (int j = 0; j < columns.get(i).getChildren().size(); j++) {bigWriter.addHeaderAlias(columns.get(i).getChildren().get(j).getProp(), columns.get(i).getChildren().get(j).getLabel() + columns.get(i).getProp()); bigWriter.setColumnWidth(lastCol++, 30);}}}//根据需要合并添加第⼀列表头bigWriter.merge(0, 1, 0, 0, columns.get(0).getLabel(), true);bigWriter.merge(0, 0, 1, 14, "第⼀类(个⼈)", true);bigWriter.merge(0, 0, 15, 28, "第⼀类(企业)", true);bigWriter.merge(0, 0, 29, 42, "第⼆类(个⼈)", true);bigWriter.merge(0, 0, 43, 56, "第⼆类(企业)", true);bigWriter.merge(0, 0, 57, 64, "总计项", true);// 只导出配置好的列名bigWriter.setOnlyAlias(true);bigWriter.write(projects, true);StyleSet styleSet = bigWriter.getStyleSet();styleSet.setWrapText();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("filename", URLEncoder.encode(fileName + ".xlsx", "UTF-8"));ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);}导出效果动态⽣成模板(只需要表头)String fileName = "sdjhds";try {ExcelWriter bigWriter = ExcelUtil.getBigWriter();List list = new ArrayList();list.add("表头1");list.add("表头2");bigWriter.writeHeadRow(list);response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("filename", URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("Pragma", "no-cache");response.setHeader("Content-type", "application/octet-stream;charset=UTF-8");ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);} catch (IOException e) {e.printStackTrace();}。
Java导出Excel文件,在Wps上可以打开但是Office上打不开的问题
![Java导出Excel文件,在Wps上可以打开但是Office上打不开的问题](https://img.taocdn.com/s3/m/02d6ac35cdbff121dd36a32d7375a417866fc1d0.png)
Java导出Excel⽂件,在Wps上可以打开但是Office上打不开的问题在做项⽬过程中,涉及到需要导出列表数据1.前端如果⽤xlsx格式接收表格后台⽤XSSFWorkbook workbook = new XSSFWorkbook();创建⼯作薄response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.addHeader("Content-Disposition", "attachment;filename=fileName" + ".xlsx");2.前端如果⽤⽤xls格式接收表格后台⽤HSSFWorkbook workbook = new HSSFWorkbook();创建⼯作薄response.setContentType("application/vnd.ms-excel");response.addHeader("Content-Disposition", "attachment;filename=fileName"+".xls");那么 xls 和 xlsx有什么区别?(根据⾃⾝情况选择使⽤)⽂件核⼼结构不同:xls核⼼结构是复合⽂档类型的;xlsx 的核⼼结构是 XML 类型的结构,并且基于XML进⾏压缩(占⽤空间更⼩),所以也可以看做zip⽂件,将⼀个“.xlsx”⽂件的后缀改为ZIP 后,⽤解压软件解压,可以看到⾥⾯有⼀个xml⽂件和⽂件的主要内容。
版本不同:xls是excel2003及以前版本所⽣成的⽂件格式xlsx是excel2007及以后版本所⽣成的⽂件格式(2007 是可以兼容2003的xls格式的)最⼤⾏列得数量不同:xls最⼤只有65536⾏、256列xlsx可以有1048576⾏、16384列。
java 导出 excel 高性能框架 iexcel 入门使用教程
![java 导出 excel 高性能框架 iexcel 入门使用教程](https://img.taocdn.com/s3/m/6b91d1fe8bd63186bcebbc95.png)
项目简介IExcel用于优雅地读取和写入 excel。
避免大 excel 出现 oom,简约而不简单。
特性•OO 的方式操作 excel,编程更加方便优雅。
•sax 模式读取,SXSS 模式写入。
避免 excel 大文件 OOM。
•基于注解,编程更加灵活。
•写入可以基于对象列表,也可以基于 Map,实际使用更加方便。
•设计简单,注释完整。
方便大家学习改造。
•可根据注解指定表头顺序•支持 excel 文件内容 bytes[] 内容获取,便于用户自定义操作。
v0.0.7 主要特性利用 cache 初步提升反射性能创作缘由实际工作和学习中,apache poi 操作 excel 过于复杂。
近期也看了一些其他的工具框架:•easypoi•easyexcel•hutool-poi都或多或少难以满足自己的实际需要,于是就自己写了一个操作excel 导出的工具。
快速开始环境要求jdk1.7+maven 3.x引入 jar使用 maven 管理。
<dependency><groupId>com.github.houbb</groupId><artifactId>iexcel</artifactId><version>${最新版本}</version></dependency>Excel 写入示例/***写入到 excel 文件*直接将列表内容写入到文件*/public void writeTest() {// 待生成的 excel 文件路径final String filePath = PathUtil.getAppTestResourcesPath()+"/excelW riter03.xls";// 对象列表List<User> models = User.buildUserList();// 直接写入到文件ExcelBs.newInstance(filePath).write(models);}其中:•User.javapublic class User {private String name;private int age;//fluent getter/setter/toString()}•buildUserList()构建对象列表方法如下:/***构建用户类表* @return 用户列表*@since 0.0.4*/public static List<User> buildUserList() {List<User> users = new ArrayList<>();users.add(new User().name("hello").age(20));users.add(new User().name("excel").age(19));return users;}写入效果excel 内容生成为:name agehello 20excel 19Excel 读取示例/***读取 excel 文件中所有信息*/public void readTest() {// 待生成的 excel 文件路径final String filePath = PathUtil.getAppTestResourcesPath()+"/excelW riter03.xls";List<User> userList = ExcelBs.newInstance(filePath).read(User.clas s);System.out.println(userList);}信息[User{name='hello', age=20}, User{name='excel', age=19}]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package ais.mytest.web;/*** 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28*/import ais.basic.service.BasicUtil;import mons.file.service.FileService; import ais.framework.web.BaseAction;import ais.mytest.model.Employeer;import ais.mytest.service.IemployeerService;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.text.DecimalFormat;import jxl.write.NumberFormat;import java.util.List;import javax.servlet.ServletOutputStream; import jxl.Cell;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.UnderlineStyle;import jxl.format.VerticalAlignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.BoldStyle;import jxl.format.Colour;import jxl.write.Blank;import jxl.write.DateFormat;import jxl.write.DateTime;import bel;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableImage;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;//import com.ibm.icu.text.SimpleDateFormat;//import com.lowagie.text.Cell;import com.lowagie.text.Document;import com.lowagie.text.Font;import com.lowagie.text.Image;import com.lowagie.text.PageSize;import com.lowagie.text.Paragraph;import com.lowagie.text.Table;import com.lowagie.text.pdf.BaseFont;import com.lowagie.text.rtf.RtfWriter2;import java.awt.Color;import java.io.InputStream;import java.io.OutputStream;import org.apache.struts2.ServletActionContext;public class ExportAction extends BaseAction{/****/private static final long serialVersionUID = -3951404867065653031L;FileService fileService;BasicUtil basicUtil;IemployeerService iemployeerService;Employeer employeer;String filename=System.currentTimeMillis()+".doc";public ExportAction() {}/*** 功能:将数据库中的数据导出word* 日期:2008-2-29* @return*/// 复制一份新的RTF文件public String getNewFilePath() throws Exception {InputStream ins = ServletActionContext.getServletContext().getResourceAsStream("/empty.doc");byte[] b = new byte[ins.available()];ins.read(b);ins.close();String newFileName = ServletActionContext.getServletContext().getRealPath("")+ "/"+filename;OutputStream ous = new FileOutputStream(newFileName);ous.write(b);ous.close();return newFileName;}// 将二进制流写到客户端public void writeNewFile(String newFilePath, String downloadFileName)throws Exception {File f = new File(newFilePath);InputStream ins = new FileInputStream(f);byte[] b = new byte[ins.available()];ins.read(b);ins.close();/* <option value="image/bmp">BMP</option><option value="image/gif">GIF</option><option value="image/jpeg">JPEG</option><option value="image/tiff">TIFF</option><option value="image/x-dcx">DCX</option><option value="image/x-pcx">PCX</option><option value="text/html">HTML</option><option value="text/plain">TXT</option><option value="text/xml">XML</option><option value="application/afp">AFP</option><option value="application/pdf">PDF</option><option value="application/pdf">zip</option><option value="application/rtf">RTF</option><option value="application/msword">MSWORD</option><option value="application/vnd.ms-excel">MSEXCEL</option><option value="application/vnd.ms-powerpoint">MSPOWERPOINT</option><option value="application/wordperfect5.1">WORDPERFECT</option><option value="application/vnd.lotus-wordpro">WORDPRO</option><option value="application/vnd.visio">VISIO</option><option value="application/vnd.framemaker">FRAMEMAKER</option><option value="application/vnd.lotus-1-2-3">LOTUS123</option>*//*** 出现保存与打开对话框application/octet-stream,加上下面第二句是保存时能正确出现文件类型*///getResponse().setContentType("application/octet-stream");//getResponse().setHeader("Content-Disposition","attachment;filename=\""+ new String((downloadFileName).getBytes(),"ISO-8859-1") + "\";");/*** 直接打开word文档*/getResponse().setContentType("application/msword");ServletActionContext.getResponse().getOutputStream().write(b);//文件删除if (f != null) {f.delete();}}/*** @param em_name 姓名* @param em_sex 性别* @param em_age 年龄* @param em_duty 职务* @param em_pay 工资* @param em_polity 政治面貌* @param em_address 住址*/public void createWord(String eMname,String eMsex,int eMage,String eMduty, Double eMpay, String eMpolity,String eMaddress) throws Exception {// 创建word文档Document document = new Document(PageSize.A4);// 输入word文档String newFilePath = getNewFilePath();RtfWriter2.getInstance(document, new FileOutputStream(newFilePath));document.open();// 中文字体BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font fontChinese = new Font(bfChinese, 12, Font.BOLD);Table table = new Table(4, 4);Paragraph paragraph = new Paragraph("XX单位员工信息表", fontChinese);paragraph.setAlignment(Paragraph.ALIGN_CENTER);document.add(paragraph);table.setBorderWidth(2);table.setBorderColor(new Color(0, 0, 0));table.setPadding(5);table.setSpacing(0);table.setAutoFillEmptyCells(true);com.lowagie.text.Cell cell = new com.lowagie.text.Cell(new Paragraph("姓名", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(eMname);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("性别", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(eMsex);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("年龄", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(Integer.valueOf(eMage).toString());table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("政治面貌", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(eMpolity);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("职务", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(eMduty);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("工资", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(Double.valueOf(eMpay).toString());//cell.setColspan(5);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("住址", fontChinese));table.addCell(cell);cell = new com.lowagie.text.Cell(eMaddress);cell.setColspan(3);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n教育背景:\n\n\n", fontChinese));cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);table.addCell(cell);cell = new com.lowagie.text.Cell("");cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setColspan(3);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n工作经历\n\n\n",fontChinese));cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);table.addCell(cell);cell = new com.lowagie.text.Cell( "");cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setColspan(3);table.addCell(cell);cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n\n\t\t\t\t\t(盖章)年月日\n\n\n",fontChinese));cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);cell.setColspan(4);table.addCell(cell);document.add(table);// 在表格末尾添加图片Imagepng=Image.getInstance(ServletActionContext.getServletContext().getRealPath("")+"/png-0662.png");document.add(png);// 分页document.newPage();document.close();}public String exportword(){String eMname="李小明";String eMsex="男";int eMage=25;String eMduty="经理";Double eMpay=2580.78;String eMpolity="党员";String eMaddress="天津市清河县大柳营镇";try {String newFilePath1 = getNewFilePath();createWord(eMname,eMsex,eMage,eMduty,eMpay,eMpolity,eMaddress);writeNewFile(newFilePath1, filename);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/*** 功能:将数据库中的数据导出excel* 日期:2008-3-28*/public String exportexcel(){getResponse().setContentType("application/vnd.ms-excel");File f1 = null;//得到服务器路径String path = getRequest().getSession().getServletContext().getRealPath("")+File.separator;//文件名生成String filename="temp";filename=System.currentTimeMillis()+".xls";File f = new File(path+"Book2.xlt");// 定义一个模板,放在服务器相应路径下.Workbook workbook = null;WritableWorkbook writableWorkbook = null;String workwheet="工作表名";try {/*** 使用文件输入输出流读取Excel模板,重新写入新文件,就是为了读到其EXCEL格式.* 所以在服务器相应文件,必须有一个空Excel文件,如:Book1.xls*/FileInputStream fis = new FileInputStream(f);byte[] b = new byte[fis.available()];fis.read(b);fis.close();f1 = new File(path+filename);FileOutputStream fos = new FileOutputStream(f1);fos.write(b);fos.close();workbook = Workbook.getWorkbook(f1);ServletOutputStream os = getResponse().getOutputStream();//.createWorkbook(os, workbook);writableWorkbook = Workbook.createWorkbook(f1);WritableSheet ws = writableWorkbook.getSheet(0);//添加第四个工作表WritableSheet sheet = writableWorkbook.createSheet(workwheet,4);//定义样式:包括字体样式WritableFont wf1 = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Co lour.RED);WritableCellFormat wcf1 = new WritableCellFormat(wf1);//背景样式wcf1.setBackground(Colour.YELLOW2);//对齐方式wcf1.setAlignment(Alignment.CENTRE);wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);WritableFont wf2 = new WritableFont(WritableFont.TIMES,11,WritableFont.NO_BOLD);;WritableCellFormat wcf2 = new WritableCellFormat(wf2);wcf2.setAlignment(Alignment.CENTRE);//边框线设置wcf2.setBorder(Border.ALL,BorderLineStyle.THIN);WritableFont wf3 = new WritableFont(WritableFont.TIMES,12,WritableFont.BOLD);WritableCellFormat wcf3 = new WritableCellFormat(wf3);wcf3.setAlignment(Alignment.CENTRE);wcf3.setBorder(Border.ALL,BorderLineStyle.THIN);//显示数字形式NumberFormat wf5=new NumberFormat("#0.00");WritableCellFormat wcf5 = new WritableCellFormat(wf5);wcf5.setAlignment(Alignment.CENTRE);wcf5.setBorder(Border.ALL,BorderLineStyle.THIN);//添加带有formatting的DateFormat对象DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");WritableCellFormat wcfdf = new WritableCellFormat(df);wcfdf.setAlignment(Alignment.CENTRE);wcfdf.setBorder(Border.ALL,BorderLineStyle.THIN);//数字格式显示两位小数DecimalFormat dfformat = new DecimalFormat("###,##0.00");//输出表头Label l = null;int k = 0;//ws.mergeCells(0,k,7,k); //合并单元格,表示合并第0行第0列到第0行第7列/*** 功能:下面5句实现在模板中任何单元格定义名称EM_name,通过findCellByName查找* 如果找到,则将获取标记单元格的位置,并将内容填入,找不到,不管.* 实现了程序充许可以任何定义有限范围的模板定义.* 日期:2008-2-28**/Cell cl=writableWorkbook.findCellByName("EM_name");if(cl!=null){//System.out.println(cl.getContents()+"找到了"+cl.getColumn()+"---"+cl.getRow());l = new Label(cl.getColumn(),cl.getRow(), "网通审计人员统计报表", wcf1); //将内容填入ws.addCell(l);ws.setRowView(k,700); //设置单元格宽度,k表示行,500表示高度}k++;ws.mergeCells(0,k,1,k);l = new Label(0,k, "填报单位:", wcf3);ws.addCell(l);ws.mergeCells(2,k,5,k);l = new Label(2,k, "审计部一处", wcf3);ws.addCell(l);l = new Label(6,k, "日期:", wcf3);ws.addCell(l);//l = new Label(7,k, "2008-03-15", wcfdf);DateTime lt = new DateTime(7,k,new java.util.Date(),wcfdf);ws.addCell(lt);k++;l = new Label(0,k, "序号", wcf3);ws.addCell(l);l = new Label(1,k, "姓名", wcf3);ws.addCell(l);l = new Label(2,k, "性别", wcf3);ws.addCell(l);l = new Label(3,k, "年龄", wcf3);ws.addCell(l);l = new Label(4,k, "职务", wcf3);ws.addCell(l);l = new Label(5,k, "工资", wcf3);ws.addCell(l);l = new Label(6,k, "政治面貌", wcf3);ws.addCell(l);l = new Label(7,k, "地址", wcf3);ws.addCell(l);ws.setColumnView(7,30); //设置单元格宽度,7表示列,30表示宽度//输出内容List<Employeer> emlist=iemployeerService.getEmployeerAll("from Employeer");for(int i=0;i<emlist.size();i++){k++;l = new Label(0,k, Integer.valueOf(emlist.get(i).getId()).toString(), wcf2);ws.addCell(l);l = new Label(1,k, emlist.get(i).getEm_name(), wcf2);ws.addCell(l);l = new Label(2,k, emlist.get(i).getEm_sex(), wcf2);ws.addCell(l);l = new Label(3,k, Integer.valueOf(emlist.get(i).getEm_age()).toString(), wcf2);ws.addCell(l);l = new Label(4,k, emlist.get(i).getEm_duty(), wcf2);ws.addCell(l);l = new Label(5,k, dfformat.format(emlist.get(i).getEm_pay()).toString(), wcf5);ws.addCell(l);l = new Label(6,k, emlist.get(i).getEm_polity(), wcf2);ws.addCell(l);l = new Label(7,k, emlist.get(i).getEm_address(), wcf2);ws.addCell(l);}//添加图片,只支持png格式,注意在服务器启动时,第一次将png图片放进去,读取时是不显示的.需得启服务器.ws.mergeCells(5, 5, 6, 10);WritableImage wbi=new WritableImage(5, 5, 6, 10, new File(path+"png-0662.png"));ws.addImage(wbi);writableWorkbook.write();//得到工作表行数int cnt = ws.getRows();System.out.println("表行数有:"+cnt);//工作表某一单元格内容Cell cell = ws.getCell(0,0);System.out.println("0行0列内容是:" + cell.getContents());} catch (Exception e) {e.printStackTrace();} finally {if (writableWorkbook != null)try {writableWorkbook.close();} catch (Exception e) {// Exception}if (f1.exists()) {f1.delete();System.out.println("文件已经删除!");} else {/*try {f1.createNewFile();} catch (IOException e) {e.printStackTrace();}System.out.println("文件已经创建!");*/}}return null;}public BasicUtil getBasicUtil() {return basicUtil;}public void setBasicUtil(BasicUtil basicUtil) {this.basicUtil = basicUtil;}public FileService getFileService() {return fileService;}public void setFileService(FileService fileService) {this.fileService = fileService;}public IemployeerService getIemployeerService() {return iemployeerService;}public void setIemployeerService(IemployeerService iemployeerService) { this.iemployeerService = iemployeerService;}public Employeer getEmployeer() {return employeer;}public void setEmployeer(Employeer employeer) {this.employeer = employeer;} }。