平时,使用POI操作Excel,但是很少操作WORD。今天碰到操作WORD的需求,借鉴网上的文章,讲的非常透彻。
其中表格宽度设置,不起效果,代码以注释。通过每个单元格的宽度设置,间接放大宽度。
我的代码如下:
package sym_cpts.poi.docx; 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.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.junit.Test; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; public class DocTest { /** * 通过XWPFDocument对内容进行访问。对于XWPF文档而言,用这种方式进行读操作更佳。 * @throws Exception */ @Test public void testReadByDoc() throws Exception { InputStream is = new FileInputStream("D:\\table.docx"); XWPFDocument doc = new XWPFDocument(is); List<XWPFParagraph> paras = doc.getParagraphs(); } private static POIFSFileSystem fs; private static Workbook wb; private static Sheet sheet; private static Row row; public List<Row> readExcelToEntity(InputStream is,String ext) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { List<Row> list = new ArrayList<Row>(); try { if(ext.equals("xls")){ //fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(is); }else{ //fs = new POIFSFileSystem(is); wb = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } sheet = wb.getSheetAt(0); // 得到总行数 int rowNum = sheet.getLastRowNum(); row = sheet.getRow(0); // 正文内容应该从第二行开始,第一行为表头的标题 for (int i = 1; i <= rowNum; i++) { row = sheet.getRow(i); list.add(row); } return list; } /** * 获取单元格数据内容为字符串类型的数据 * * @param cell Excel单元格 * @return String 单元格数据内容 */ private static String getStringCellValue(Cell cell) { if(cell == null) return ""; String strCell = ""; cell.setCellType(CellType.STRING); switch (cell.getCellTypeEnum()) { case STRING: strCell = cell.getStringCellValue(); break; case NUMERIC: strCell = String.valueOf(cell.getNumericCellValue()); break; case BOOLEAN: strCell = String.valueOf(cell.getBooleanCellValue()); break; case BLANK: strCell = ""; break; default: strCell = ""; break; } if (strCell.equals("") || strCell == null || cell == null) { return ""; } return strCell; } //生成word表格,并插入表格 public XWPFTable createData(XWPFDocument doc,String tableName,List<Row> subList){ //创建一个段落 XWPFParagraph para = doc.createParagraph(); //添加表名 XWPFRun run = para.createRun(); run.setBold(true); //加粗 run.setText(tableName); XWPFTable table = null; if(table == null){ table = doc.createTable(1, 5); List<XWPFTableRow> rows = table.getRows(); XWPFTableRow firstRow = rows.get(0); List<XWPFTableCell> firstRowCells = firstRow.getTableCells(); //单元格属性 CTTcPr cellPr0 = firstRowCells.get(0).getCTTc().addNewTcPr(); cellPr0.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr1 = firstRowCells.get(1).getCTTc().addNewTcPr(); cellPr1.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr2 = firstRowCells.get(2).getCTTc().addNewTcPr(); cellPr2.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr3 = firstRowCells.get(3).getCTTc().addNewTcPr(); cellPr3.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr4 = firstRowCells.get(4).getCTTc().addNewTcPr(); cellPr4.addNewTcW().setW(BigInteger.valueOf(1500)); //cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); firstRowCells.get(0).setText("字段编码"); firstRowCells.get(1).setText("字段类型"); firstRowCells.get(2).setText("是否为空"); firstRowCells.get(3).setText("默认值"); firstRowCells.get(4).setText("字段描述"); //设置表格属性 // CTTblPr tablePr = table.getCTTbl().addNewTblPr(); // int width2 = table.getWidth(); //System.out.println(width2); // table.setWidth(60000); //System.out.println(table.getWidth()); //table.setWidth(width); //表格宽度 //CTTblWidth width = tablePr.addNewTblW(); // width.setW(BigInteger.valueOf(60000)); //BigInteger.valueOf("14.69") } for(int i=0;i<subList.size();i++){ XWPFTableRow newRow = table.createRow(); Row row = subList.get(i); String bianma = getStringCellValue(row.getCell(2)); String leixing = getStringCellValue(row.getCell(3)); String kong = getStringCellValue(row.getCell(4)); String moren = getStringCellValue(row.getCell(5)); String miaoshu = getStringCellValue(row.getCell(6)); List<XWPFTableCell> firstRowCells = newRow.getTableCells(); CTTcPr cellPr0 = firstRowCells.get(0).getCTTc().addNewTcPr(); cellPr0.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr1 = firstRowCells.get(1).getCTTc().addNewTcPr(); cellPr1.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr2 = firstRowCells.get(2).getCTTc().addNewTcPr(); cellPr2.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr3 = firstRowCells.get(3).getCTTc().addNewTcPr(); cellPr3.addNewTcW().setW(BigInteger.valueOf(1500)); CTTcPr cellPr4 = firstRowCells.get(4).getCTTc().addNewTcPr(); cellPr4.addNewTcW().setW(BigInteger.valueOf(1500)); firstRowCells.get(0).setText(bianma); firstRowCells.get(1).setText(leixing); firstRowCells.get(2).setText(kong); firstRowCells.get(3).setText(moren); firstRowCells.get(4).setText(miaoshu); } return table; } /*** * 写一个表格 * @throws Exception */ @Test public void testWriteTable() throws Exception { XWPFDocument doc = new XWPFDocument(); List<Row> rowList = readExcelToEntity(new FileInputStream("C:\\Users\\Administrator\\Desktop\\cod-columns.xlsx"),"xlsx"); boolean flag = false; List<Row> subList = null; String tableName = null; for(int i=0;i<rowList.size();i++){ Row row = rowList.get(i); String cellTableName = getStringCellValue(row.getCell(1)); if(tableName == null || "".equals(tableName.trim())){ tableName = cellTableName; subList = new ArrayList<Row>(); } if(tableName.equals(cellTableName)){ subList.add(row); }else{ //对前面的subList进行word表格 createData(doc,tableName,subList); tableName = cellTableName; subList = new ArrayList<Row>(); //对 } } //文件不存在时会自动创建 OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\table.docx"); //写入文件 doc.write(os); this.close(os); } /** * 关闭输出流 * @param os */ private void close(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } }
辅助SQL
SELECT table_schema,table_name,column_name,column_type,IS_NULLABLE,COLUMN_DEFAULT,column_comment FROM `information_schema`.`COLUMNS` WHERE table_schema LIKE 'pr_cod_%' ORDER BY table_schema ASC,table_name ASC,ORDINAL_POSITION ASC LIMIT 20000;
相关推荐
本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...
总结起来,"POI-TL合并多个Word文档"涉及到的关键技术有Apache POI的XWPF组件用于读写.docx文件,以及POI-TL库提供的模板处理功能,使得在Java程序中高效地合并和生成Word文档成为可能。这在处理批量报告、合同生成...
总的来说,使用Apache POI在Android中生成Word和Excel文档涉及了多个步骤,包括数据读取、文件操作、文档结构构建以及格式化。这个过程需要对XML、Java I/O、Android文件系统权限管理和POI API有深入理解。开发者...
Apache POI是一个开源的Java库,专门用于读写Microsoft Office格式的文件,特别是Excel、Word和PowerPoint文档。在提供的描述中,我们看到的路径实际上是在指示Apache POI项目中的不同模块和示例代码的位置。 1. **...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。在Java编程环境中,Apache POI 提供了API,让开发者能够方便地读取、写入和修改这些文件。标题提到的"poi-3.9、poi-...
总的来说,poi-tl库为Java开发者提供了一个强大的工具,能够便捷地处理Word模板,实现内容替换,尤其适用于需要自定义生成大量Word文档的场景。掌握并熟练使用poi-tl,可以极大地提升文档处理的效率和灵活性。
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在Java环境中,利用Apache POI库可以方便地读取、写入和操作这些文档。本教程主要关注的是使用...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个"poi-3.10.1上传组件jar包"包含了处理这些文档所需的Java库,使得开发者可以在Java应用中创建、读取和修改Office...
本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...
总之,Java POI 提供了一种灵活且强大的方式来生成Word文档,通过模板和数据的结合,可以自动化创建定制化的报告、合同等文档,极大地提高了工作效率。正确理解和运用这一技术,能够满足各种业务场景下的文档生成...
Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。在本示例中,我们将重点讨论如何使用POI 3.9版本通过模板来...
在这个场景中,我们关注的是使用POI来生成Word文档。POI库提供了丰富的API,使得开发者能够轻松地创建、修改和读取Word文档,从而实现自动化报告、文档生成等需求。 首先,我们需要理解如何在Java中设置开发环境。...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在这个例子中,我们将探讨如何使用POI库来处理Word文档,特别是利用模板文件循环输出表格行并导出新的Word文档...
在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成Word文档的示例代码。以下是基于这个主题的相关知识点: 1. **Java POI库介绍** - Java POI 是一套API,用于处理Microsoft Office格式的...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint等。在Java环境中,Apache POI 提供了API,使得开发者能够方便地读取、写入和修改这些文件。标题提到的"poi-3.0.2 生成...
下面将详细介绍POI库和如何利用它来生成Word文档以及进行Word到HTML的转换。 1. **Apache POI简介** Apache POI是一个开源项目,由Apache软件基金会维护。它提供了API,使得开发者能够在Java环境中读取、写入和...
- 在Spring Boot应用中,可以通过Controller层的方法处理HTTP请求,然后调用Service层的业务逻辑,使用Apache POI生成Word文档。 - 可以将生成的Word文档作为HTTP响应的附件发送给客户端,或者保存到服务器,提供...
开发者可以使用POI来创建、修改或分析Excel电子表格、Word文档和PowerPoint演示文稿,使得在服务器端或桌面应用中处理Office文档变得可能,无需依赖实际的Office软件。 【压缩包子文件的文件名称列表】中的: 1. ...
Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在"poi合并多个word文档并设置页码"这个主题中,我们将深入探讨如何利用POI API来实现这两个功能。 首先,让...
- POI的HWPF(Horizontally Written Portable Format)API可以用来处理Word文档,包括创建、读取和修改文本、段落、表格、图片等内容。 - 支持合并多个文档,或者将内容插入到现有文档中。 3. **PowerPoint处理**...