JAVA导出WORD与EXCEL

合集下载

Java数据导入导出Excel

Java数据导入导出Excel

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();}&nbsp循环对每一个单元格进行赋值//定位行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的用法

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导出时的使用

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

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(跨行跨列)

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浏览器直接下载或者或以文件形式导出

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文档

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

第三方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文档不能手动生成。

∙文档需在无人参与,批处理模式下自动创建。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;} }。

相关文档
最新文档