poi导出WORD表格居中

合集下载

JavaPOI操作word文档内容、表格

JavaPOI操作word文档内容、表格

JavaPOI操作word⽂档内容、表格⼀、pom<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.0</version></dependency>⼆、直接上代码word模板中${content} 注意我只有在.docx⽤XWPFDocument才有效2.1/*** 获取document**/XWPFDocument document = null;try {document = new XWPFDocument(inputStream);} catch (IOException ioException) {ioException.printStackTrace();}/*** 替换段落⾥⾯的变量** @param doc 要替换的⽂档* @param params 参数*/private void replaceInPara(XWPFDocument doc, Map<String, String> params) {for (XWPFParagraph para : doc.getParagraphs()) {replaceInPara(para, params);}}/*** 替换段落⾥⾯的变量** @param para 要替换的段落* @param params 参数*/private void replaceInPara(XWPFParagraph para, Map<String, String> params) {List<XWPFRun> runs;Matcher matcher;replaceText(para);//如果para拆分的不对,则⽤这个⽅法修改成正确的if (matcher(para.getParagraphText()).find()) {runs = para.getRuns();for (int i = 0; i < runs.size(); i++) {XWPFRun run = runs.get(i);String runText = run.toString();matcher = matcher(runText);if (matcher.find()) {while ((matcher = matcher(runText)).find()) {runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));}//直接调⽤XWPFRun的setText()⽅法设置⽂本时,在底层会重新创建⼀个XWPFRun,把⽂本附加在当前⽂本后⾯, para.removeRun(i);para.insertNewRun(i).setText(runText);}}}}/*** 替换⽂本内容* @param para* @return*/private List<XWPFRun> replaceText(XWPFParagraph para) {List<XWPFRun> runs = para.getRuns();String str = "";boolean flag = false;for (int i = 0; i < runs.size(); i++) {XWPFRun run = runs.get(i);String runText = run.toString();if (flag || runText.equals("${")) {str = str + runText;flag = true;para.removeRun(i);if (runText.equals("}")) {flag = false;para.insertNewRun(i).setText(str);str = "";}i--;}}return runs;}2.22.2.1XWPFTable table = document.getTableArray(0);//获取当前表格XWPFTableRow twoRow = table.getRow(2);//获取某⼀⾏XWPFTableRow nextRow = table.insertNewTableRow(3);//插⼊⼀⾏XWPFTableCell firstRowCellOne = firstRow.getCell(0);firstRowCellOne.removeParagraph(0);//删除默认段落,要不然表格内第⼀条为空⾏XWPFParagraph pIO2 =firstRowCellOne.addParagraph();XWPFRun rIO2 = pIO2.createRun();rIO2.setFontFamily("宋体");//字体rIO2.setFontSize(8);//字体⼤⼩rIO2.setBold(true);//是否加粗rIO2.setColor("FF0000");//字体颜⾊rIO2.setText("这是写⼊的内容");//rIO2.addBreak(BreakType.TEXT_WRAPPING);//软换⾏,亲测有效/*** 复制单元格和样式** @param targetRow 要复制的⾏* @param sourceRow 被复制的⾏*/public void createCellsAndCopyStyles(XWPFTableRow targetRow, XWPFTableRow sourceRow) {targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());List<XWPFTableCell> tableCells = sourceRow.getTableCells();if (CollectionUtils.isEmpty(tableCells)) {return;}for (XWPFTableCell sourceCell : tableCells) {XWPFTableCell newCell = targetRow.addNewTableCell();newCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());List sourceParagraphs = sourceCell.getParagraphs();if (CollectionUtils.isEmpty(sourceParagraphs)) {continue;}XWPFParagraph sourceParagraph = (XWPFParagraph) sourceParagraphs.get(0);List targetParagraphs = newCell.getParagraphs();if (CollectionUtils.isEmpty(targetParagraphs)) {XWPFParagraph p = newCell.addParagraph();p.getCTP().setPPr(sourceParagraph.getCTP().getPPr());XWPFRun run = p.getRuns().isEmpty() ? p.createRun() : p.getRuns().get(0);run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());} else {XWPFParagraph p = (XWPFParagraph) targetParagraphs.get(0);p.getCTP().setPPr(sourceParagraph.getCTP().getPPr());XWPFRun run = p.getRuns().isEmpty() ? p.createRun() : p.getRuns().get(0);if (sourceParagraph.getRuns().size() > 0) {run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());}}}}#### 2.2.3/*** 合并单元格** @param table 表格对象* @param beginRowIndex 开始⾏索引* @param endRowIndex 结束⾏索引* @param colIndex 合并列索引*/public void mergeCell(XWPFTable table, int beginRowIndex, int endRowIndex, int colIndex) { if (beginRowIndex == endRowIndex || beginRowIndex > endRowIndex) {return;}//合并⾏单元格的第⼀个单元格CTVMerge startMerge = CTVMerge.Factory.newInstance();startMerge.setVal(STMerge.RESTART);//合并⾏单元格的第⼀个单元格之后的单元格CTVMerge endMerge = CTVMerge.Factory.newInstance();endMerge.setVal(STMerge.CONTINUE);table.getRow(beginRowIndex).getCell(colIndex).getCTTc().getTcPr().setVMerge(startMerge); for (int i = beginRowIndex + 1; i <= endRowIndex; i++) {table.getRow(i).getCell(colIndex).getCTTc().getTcPr().setVMerge(endMerge);}}/*** insertRow 在word表格中指定位置插⼊⼀⾏,并将某⼀⾏的样式复制到新增⾏* @param copyrowIndex 需要复制的⾏位置* @param newrowIndex 需要新增⼀⾏的位置* */public static void insertRow(XWPFTable table, int copyrowIndex, int newrowIndex) {// 在表格中指定的位置新增⼀⾏XWPFTableRow targetRow = table.insertNewTableRow(newrowIndex);// 获取需要复制⾏对象XWPFTableRow copyRow = table.getRow(copyrowIndex);//复制⾏对象targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr());//或许需要复制的⾏的列List<XWPFTableCell> copyCells = copyRow.getTableCells();//复制列对象XWPFTableCell targetCell = null;for (int i = 0; i < copyCells.size(); i++) {XWPFTableCell copyCell = copyCells.get(i);targetCell = targetRow.addNewTableCell();targetCell.getCTTc().setTcPr(copyCell.getCTTc().getTcPr());if (copyCell.getParagraphs() != null && copyCell.getParagraphs().size() > 0) {targetCell.getParagraphs().get(0).getCTP().setPPr(copyCell.getParagraphs().get(0).getCTP().getPPr()); if (copyCell.getParagraphs().get(0).getRuns() != null&& copyCell.getParagraphs().get(0).getRuns().size() > 0) {XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();cellR.setBold(copyCell.getParagraphs().get(0).getRuns().get(0).isBold());}}}}/*** 正则匹配字符串** @param str* @return*/private Matcher matcher(String str) {Pattern pattern = pile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(str);return matcher;}。

文件导入导出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文档不能手动生成。

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

POI详细教程范文

POI详细教程范文

POI详细教程范文POI是一种非常常用的Java库,用于处理各种办公软件文件的读写操作。

它提供了丰富的API,可以操作Microsoft Excel、Word和PowerPoint等文件格式。

本文将介绍POI的基本概念和使用方法,以及一些常见应用场景。

一、POI的概念和基本使用方法1.POI的概念POI全称为Apache POI,是Apache软件基金会下的一个开源项目。

它提供了Java实现的Microsoft Office文件格式读写功能。

通过POI,我们可以读取和写入Excel、Word和PowerPoint等文件,实现数据的导入和导出、模板的生成等功能。

2.POI的引入首先,在Maven项目中引入POI的依赖:```<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>```3. Excel文件的读写操作(1)创建工作簿和工作表首先,我们需要创建一个工作簿对象,代表整个Excel文件:```Workbook workbook = new XSSFWorkbook(; // 创建一个新的工作簿```然后,创建一个工作表对象,代表Excel中的一个表格:```Sheet sheet = workbook.createSheet("Sheet1"); // 创建一个新的工作表```(2)添加数据到单元格接下来,我们可以向工作表中的单元格添加数据。

指定单元格所在的行和列,然后设置相应的值:```Row row = sheet.createRow(0); // 创建第一行Cell cell = row.createCell(0); // 创建第一列cell.setCellValue("Hello, World!"); // 设置单元格的值```(3) 保存Excel文件最后,我们需要将工作簿保存为一个Excel文件:```FileOutputStream fileOut = newFileOutputStream("workbook.xlsx"); // 创建输出流workbook.write(fileOut); // 写入文件fileOut.close(; // 关闭输出流workbook.close(; // 关闭工作簿```4. Word文件的读写操作(1)创建文档对象首先,我们需要创建一个文档对象,代表整个Word文件:```XWPFDocument document = new XWPFDocument(; // 创建一个新的文档```(2)添加段落和文本接下来,我们可以向文档中添加段落和文本。

javapoi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)

javapoi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)
1 2 3 4 5 6 7 8 9 10 11 12 13 4.导出的工具类 /** * 功能描述:word工具类 * * @author jynn *ห้องสมุดไป่ตู้@created 2019年8月15日 * @version 1.0.0 */ public class WordUtil {
/** * 功能描述:word下载 * * @param response * @param patientMap * @param list * @param itemList * @param file * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static final void DownloadWord(HttpServletResponse response, Map<String, Object> patientMap, List<Map<String, Object>> list, List<List<String>> itemList, String file) {
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
javapoi实现 word导出(包括 word模板的使用、复制表格、复制 行、插入图片的使用)
java poi实现数据的word导出(包括word模板的使用、复制表格、复制行、插入图片的使用) 1.实现的效果 实现病人基本信息、多条病历数据、多项检查项图片的动态插入(网络图片)
/** * 功能描述:复制段落,从source到target * * @param target * @param source * @param index * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static void copyParagraph(XWPFParagraph target, XWPFParagraph source, Integer index) { // 设置段落样式 target.getCTP().setPPr(source.getCTP().getPPr()); // 移除所有的run for (int pos = target.getRuns().size() - 1; pos >= 0; pos--) { target.removeRun(pos); } // copy 新的run for (XWPFRun s : source.getRuns()) { XWPFRun targetrun = target.createRun(); copyRun(targetrun, s, index); } }

javaPOI单元格格式设置居中

javaPOI单元格格式设置居中

javaPOI单元格格式设置居中设置颜⾊,设置前景⾊style.setFillForegroundColor(HSSFColor.HSSFColorPredefined.GREY_25_PERCENT.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);设置居中对齐//设置⽔平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);⾃适应宽度//⾃动设置⾏⾼int colLength = cell.getStringCellValue().getBytes().length*256; //sheet.setColumnWidth(col, colLength);package mon;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletResponse;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFFont;import ermodel.HSSFRichTextString;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.CellRangeAddress;import org.apache.poi.hssf.util.HSSFColor;/*** 导出Excel公共⽅法* @version 1.0** @author wangcp**/public class ExportExcel extends BaseAction {//显⽰的导出表的标题private String title;//导出表的列名private String[] rowName ;private List<Object[]> dataList = new ArrayList<Object[]>();HttpServletResponse response;//构造⽅法,传⼊要导出的数据public ExportExcel(String title,String[] rowName,List<Object[]> dataList){this.dataList = dataList;this.rowName = rowName;this.title = title;}/** 导出数据* */public void export() throws Exception{try{HSSFWorkbook workbook = new HSSFWorkbook(); // 创建⼯作簿对象HSSFSheet sheet = workbook.createSheet(title); // 创建⼯作表// 产⽣表格标题⾏HSSFRow rowm = sheet.createRow(0);HSSFCell cellTiltle = rowm.createCell(0);//sheet样式定义【getColumnTopStyle()/getStyle()均为⾃定义⽅法 - 在下⾯ - 可扩展】HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象HSSFCellStyle style = this.getStyle(workbook); //单元格样式对象sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));cellTiltle.setCellStyle(columnTopStyle);cellTiltle.setCellValue(title);// 定义所需列数int columnNum = rowName.length;HSSFRow rowRowName = sheet.createRow(2); // 在索引2的位置创建⾏(最顶端的⾏开始的第⼆⾏) // 将列头设置到sheet的单元格中for(int n=0;n<columnNum;n++){HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //设置列头单元格的数据类型HSSFRichTextString text = new HSSFRichTextString(rowName[n]);cellRowName.setCellValue(text); //设置列头单元格的值cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式}//将查询出的数据设置到sheet对应的单元格中for(int i=0;i<dataList.size();i++){Object[] obj = dataList.get(i);//遍历每个对象HSSFRow row = sheet.createRow(i+3);//创建所需的⾏数for(int j=0; j<obj.length; j++){HSSFCell cell = null; //设置单元格的数据类型if(j == 0){cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(i+1);}else{cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);if(!"".equals(obj[j]) && obj[j] != null){cell.setCellValue(obj[j].toString()); //设置单元格的值}}cell.setCellStyle(style); //设置单元格样式}}//让列宽随着导出的列长⾃动适应for (int colNum = 0; colNum < columnNum; colNum++) {int columnWidth = sheet.getColumnWidth(colNum) / 256;for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {HSSFRow currentRow;//当前⾏未被使⽤过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(colNum) != null) {HSSFCell currentCell = currentRow.getCell(colNum);if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length) {columnWidth = length;}}}}if(colNum == 0){sheet.setColumnWidth(colNum, (columnWidth-2) * 256);}else{sheet.setColumnWidth(colNum, (columnWidth+4) * 256);}}if(workbook !=null){try{String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls"; String headStr = "attachment; filename=\"" + fileName + "\"";response = getResponse();response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition", headStr);OutputStream out = response.getOutputStream();workbook.write(out);}catch (IOException e){e.printStackTrace();}}}catch(Exception e){e.printStackTrace();}}/** 列头单元格样式*/public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) { // 设置字体HSSFFont font = workbook.createFont();//设置字体⼤⼩font.setFontHeightInPoints((short)11);//字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字font.setFontName("Courier New");//设置样式;HSSFCellStyle style = workbook.createCellStyle();//设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜⾊;style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜⾊;style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜⾊;style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜⾊;style.setTopBorderColor(HSSFColor.BLACK.index);//在样式⽤应⽤设置的字体;style.setFont(font);//设置⾃动换⾏;style.setWrapText(false);//设置⽔平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style;}/** 列数据信息单元格样式*/public HSSFCellStyle getStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();//设置字体⼤⼩//font.setFontHeightInPoints((short)10);//字体加粗//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字font.setFontName("Courier New");//设置样式;HSSFCellStyle style = workbook.createCellStyle();//设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜⾊;style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜⾊;style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜⾊;style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜⾊;style.setTopBorderColor(HSSFColor.BLACK.index);//在样式⽤应⽤设置的字体;style.setFont(font);//设置⾃动换⾏;style.setWrapText(false);//设置⽔平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style;}}---------------------作者:艾伦蓝来源:CSDN原⽂:https:///lan12334321234/article/details/70049738 版权声明:本⽂为博主原创⽂章,转载请附上博⽂链接!。

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.总结优点:使⽤⽅法很简单,使⽤⼯具类的⽅法,⽅便复⽤于其他模块。

javaPOI往word文档中指定位置插入表格

javaPOI往word文档中指定位置插入表格

javaPOI往word⽂档中指定位置插⼊表格1.Service demoimport java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.math.BigInteger;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.poi.POIXMLDocument;import org.apache.poi.util.IOUtils;import ermodel.XWPFDocument;import ermodel.XWPFParagraph;import ermodel.XWPFRun;import ermodel.XWPFTable;import ermodel.XWPFTableCell;import ermodel.XWPFTableRow;import org.apache.xmlbeans.XmlCursor;import org.docx4j.TraversalUtil;import org.docx4j.dml.wordprocessingDrawing.Inline;import org.docx4j.finders.RangeFinder;import org.docx4j.openpackaging.packages.WordprocessingMLPackage;import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;import org.docx4j.wml.Body;import org.docx4j.wml.CTBookmark;import org.docx4j.wml.Document;import org.docx4j.wml.Drawing;import org.docx4j.wml.ObjectFactory;import org.docx4j.wml.P;import org.docx4j.wml.R;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.data.general.DefaultPieDataset;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;import org.springframework.stereotype.Service;import mon.collect.Lists;import mon.collect.Maps;public class ExportBgServiceImpl {private static final String bookmark = "tpBookmark";// 报告图⽚位置的书签名public void exportBg(OutputStream out) {String srcPath = "D:/tp/fx.docx";String targetPath = "D:/tp/fx2.docx";String key = "$key";// 在⽂档中需要替换插⼊表格的位置XWPFDocument doc = null;File targetFile = null;try {doc = new XWPFDocument(POIXMLDocument.openPackage(srcPath));List<XWPFParagraph> paragraphList = doc.getParagraphs();if (paragraphList != null && paragraphList.size() > 0) {for (XWPFParagraph paragraph : paragraphList) {List<XWPFRun> runs = paragraph.getRuns();for (int i = 0; i < runs.size(); i++) {String text = runs.get(i).getText(0).trim();if (text != null) {if (text.indexOf(key) >= 0) {runs.get(i).setText(text.replace(key, ""), 0);XmlCursor cursor = paragraph.getCTP().newCursor();// 在指定游标位置插⼊表格XWPFTable table = doc.insertNewTbl(cursor);CTTblPr tablePr = table.getCTTbl().getTblPr();CTTblWidth width = tablePr.addNewTblW();width.setW(BigInteger.valueOf(8500));this.inserInfo(table);break;}}}}}doc.write(out);out.flush();out.close();} catch (Exception e) {throw new SysException(MON_SYSTEM_ERROR, e);}}/*** 把信息插⼊表格* @param table* @param data*/private void inserInfo(XWPFTable table) {List<DTO> data = mapper.getInfo();//需要插⼊的数据XWPFTableRow row = table.getRow(0);XWPFTableCell cell = null;for (int col = 1; col < 6; col++) {//默认会创建⼀列,即从第2列开始// 第⼀⾏创建了多少列,后续增加的⾏⾃动增加列CTTcPr cPr =row.createCell().getCTTc().addNewTcPr();CTTblWidth width = cPr.addNewTcW();if(col==1||col==2||col==4){width.setW(BigInteger.valueOf(2000));}}row.getCell(0).setText("指标");row.getCell(1).setText("指标说明");row.getCell(2).setText("公式");row.getCell(3).setText("参考值");row.getCell(4).setText("说明");row.getCell(5).setText("计算值");for(DTO item : data){row = table.createRow();row.getCell(0).setText(item.getZbmc());cell = row.getCell(1);cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));cell.setText(item.getZbsm());cell = row.getCell(2);cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));cell.setText(item.getJsgs());if(item.getCkz()!=null&&!item.getCkz().contains("$")){row.getCell(3).setText(item.getCkz());}cell = row.getCell(4);cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));cell.setText(item.getSm());row.getCell(5).setText(item.getJsjg()==null?"⽆法计算":item.getJsjg());}}}2.Controllerpublic void exportBg(HttpServletResponse response) {try {response.setContentType("application/octet-stream");String name = "报告";response.addHeader("Content-Disposition", "attachment;filename="+new String(name.getBytes(),"iso-8859-1") +".docx"); OutputStream out = response.getOutputStream();export.exportBg(out,sblsh);} catch (Exception e) {}}3.maven<dependency><groupId>org.apache.poi</groupId><artifactId>poi-excelant</artifactId><version>3.12</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.12</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.8</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.8</version></dependency><!-- ⽣成图⽚--><dependency><groupId>org.jfree</groupId><artifactId>jfreechart</artifactId><version>1.0.19</version></dependency><dependency><!--⽀持插⼊图⽚--><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId><version>3.3.1</version></dependency>在⽂档中指定位置设置好关键字如 demo 中的 “$key”结果图如下:。

POI插入WORD表格

POI插入WORD表格

POI插入WORD表格篇一:poi操作wordpackage .haiyisoftmon.poi;import java.io.File;import java.io.;import java.io.;import java.io.;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.poi.POIXMLDocument;importorg.apache.poi.openxml4j.exceptions.InvalidFormatExcep tion;importermodel.ParagraphAlignment;import ermodel.XWPFDocument;import ermodel.XWPFParagraph;import ermodel.XWPFRun;import ermodel.XWPFTable;import ermodel.XWPFTableCell;import ermodel.XWPFTableRow;import org.apache.xmlbeans.XmlException;import org.apache.xmlbeans.XmlToken;importorg.openxmlformats.schemas.drawingml.x2006.main.CTNonV isualDrawingProps; importorg.openxmlformats.schemas.drawingml.x2006.main.CTPosi tiveSize2D;importorg.openxmlformats.schemas.drawingml.x2006.wordprocess ingDrawing.CTInline;public class PoiWordTemplate {private XWPFDocument document;public XWPFDocument getDocument() { } return document; public void setDocument(String templatePath) { try { this.document = newXWPFDocument( POIXMLDocument.openPackage(templatePath) ); } catch (IOException e) {} // TODO Auto-generated catch block e.printStackTrace();//this.document = document;}/*** 往模板中插入图片* @param document* @param mapImage* @param width* @param height*/public void replaceTextToImage(Map<String,String> mapImage,int width,int height){ List<XWPFParagraph> listParagraphs = this.document.getParagraphs();for(int i=0;i<listParagraphs.size();i++){for (Entry<String,String> entry : mapImage.entrySet()) {if(listParagraphs.get(i).getText().trim().indexOf(entry. getKey()) != -1) { CTInline inlinelistParagraphs.get(i).createRun().getCTR().addNewDrawi ng().addNewInline();try {insertPicture(entry.getValue(),inline,width,height);} catch (InvalidFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch ( e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}/*** 替换word中的文字* @param document* @param mapValue* @param newText*/public void replaceTextToText(Map<String,String> mapValue){List<XWPFRun> listRun;List<XWPFParagraph> listParagraphs =this.document.getParagraphs();for(int i=0;i<listParagraphs.size();i++){listRun = listParagraphs.get(i).getRuns();for(int j=0;j<listRun.size();j++){ =if(mapValue.get(listRun.get(j).getText(0)) != null || "null".equals(mapValue.get(listRun.get(j).getText(0))) ){listRun.get(j).setText(mapValue.get(listRun.get(j).get Text(0)),0); }}} } /*** 往表格中插入数据* @param document* @paramlist* @param position*/ public voidsetTablesValue(List<Map<String, Object>> list,int position,int columnNum) { Iterator<XWPFTable> it = this.document.getTablesIterator();int count = 0;Map<String,String> columnMap = newHashMap<String,String>();while (it.hasNext()) {XWPFTable table = (XWPFTable) it.next();if(count == position){XWPFTableRow firstRow = table.getRow(1);List<XWPFTableCell> rowCell = firstRow.getTableCells();for(int i=0;i<rowCell.size();i++){columnMap.put(i+"", rowCell.get(i).getText().trim()); } table.removeRow(1);//删除第二行 for(inti=0;i<list.size();i++){XWPFTableRow row =table.createRow();//创建新的一行时创建了第row.setHeight(30);/* for(int j=0;j<=columnNum-2;j++){row.addNewTableCell();}*/ 一个cell}int rcount = table.getNumberOfRows(); for (int i = 1;i < rcount; i++) {XWPFTableRow newRow =table.getRow(i);List<XWPFTableCell> cells =newRow.getTableCells();for(intj=0;j<cells.size();j++){cells.get(j).setText(list.get(i-1).get(columnMap.get(j+""))+"");//标题栏不用改变单元格的值}}}count++;}}/*** 设置用电建议书里的基本信息第一个表格*/public void setOfferBorkBasicInfo(Map<String, Object> map,List<Map<String, Object>> list,int position){Iterator<XWPFTable> it =this.document.getTablesIterator();int count = 0;Map<String,String> columnMap = newHashMap<String,String>();while (it.hasNext()) {XWPFTable table = (XWPFTable) it.next();if(count == position){int rcount = table.getNumberOfRows();for (int i = 0; i < rcount; i++){if(i<=4){ XWPFTableRow newRow = table.getRow(i);List<XWPFTableCell> cells = newRow.getTableCells(); for(intj=0;j<cells.size();j++){if(!"null".equals(map.get(cell s.get(j).getText().trim())+"")){String temp =cells.get(j).getText().trim()+"";cells.get(j).removePa ragraph(0);cells.get(j).setText(map.get(temp)+""); } } } } XWPFTableRow sixRow = table.getRow(6);List<XWPFTableCell> rowCell = sixRow.getTableCells(); for(int i=0;i<rowCell.size();i++){columnMap.put(i+"",rowCell.get(i).getText().trim()); } for(inti=0;i<list.size();i++){XWPFTableRow row = table.createRow();//创建新的一行时创建了第row.setHeight(35);for(int j=0;j<=6;j++){row.addNewTableCell();}一个cell} table.removeRow(6);//删除模板中的字段行 int rowCount = table.getNumberOfRows(); int k= 0; for (int i = 6; i < rowCount; i++) {XWPFTableRow tempRow =table.getRow(i);List<XWPFTableCell> cells = tempRow.getTableCells();for(intj=0;j<cells.size();j++){//cells.get(j).removeParagraph(0);cells.get(j).setText(list.get(k).get(columnMap.get(j+" "))+"");}k++;}}count++;}}/*** 生成用电分析结果与优化用电建议* @param list*@param position*/ public voidsetAnanlyResultTbl(List<String> list,intposition){Iterator<XWPFTable> it =this.document.getTablesIterator();int count = 0;while (it.hasNext()) {XWPFTable table = (XWPFTable) it.next(); if(count == position){ XWPFTableRow tempRow = table.getRow(1);List<XWPFTableCell> cellList = tempRow.getTableCells(); XWPFTableCell cell = cellList.get(0);List<XWPFParagraph> listGraph = cell.getParagraphs();篇二:poi导出WORD表格居中不废话,直接上代码XWPFDocument doc = newXWPFDocument(); XWPFTabletable = doc.createTable(5, 5);CTTblPrtablePr =table.getCTTbl().addNewTblPr();tablePr.addNewJc().setVal(STJc.CENTER);篇三:POI--WORD部分的示例Apache POI----Word部分最近在研究Apache POI,不过只研究了如何做word的部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档