`
nicegege
  • 浏览: 588258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POI-JAVA读取excel生成word表格文档

 
阅读更多

平时,使用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;

 

 

分享到:
评论

相关推荐

    Java通过POI读取Excel遍历数据,批量生成word文档

    本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...

    POI-TL合并多个Word文档

    总结起来,"POI-TL合并多个Word文档"涉及到的关键技术有Apache POI的XWPF组件用于读写.docx文件,以及POI-TL库提供的模板处理功能,使得在Java程序中高效地合并和生成Word文档成为可能。这在处理批量报告、合同生成...

    android中poi生成word文档和excel文档

    总的来说,使用Apache POI在Android中生成Word和Excel文档涉及了多个步骤,包括数据读取、文件操作、文档结构构建以及格式化。这个过程需要对XML、Java I/O、Android文件系统权限管理和POI API有深入理解。开发者...

    poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad

    Apache POI是一个开源的Java库,专门用于读写Microsoft Office格式的文件,特别是Excel、Word和PowerPoint文档。在提供的描述中,我们看到的路径实际上是在指示Apache POI项目中的不同模块和示例代码的位置。 1. **...

    poi-3.9、poi-ooxml-3.9、poi-ooxml-schemas-3.9

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。在Java编程环境中,Apache POI 提供了API,让开发者能够方便地读取、写入和修改这些文件。标题提到的"poi-3.9、poi-...

    poi-tl引擎实现world模板内容替换(支持docx)

    总的来说,poi-tl库为Java开发者提供了一个强大的工具,能够便捷地处理Word模板,实现内容替换,尤其适用于需要自定义生成大量Word文档的场景。掌握并熟练使用poi-tl,可以极大地提升文档处理的效率和灵活性。

    poi-3.13读取word文档jar包

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在Java环境中,利用Apache POI库可以方便地读取、写入和操作这些文档。本教程主要关注的是使用...

    poi-3.10.1上传组件jar包 po poi-ooxml poi-ooxml-schemas

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个"poi-3.10.1上传组件jar包"包含了处理这些文档所需的Java库,使得开发者可以在Java应用中创建、读取和修改Office...

    使用poi根据模版生成word文档并转换成PDF文件

    本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...

    java poi 通过模板生成word文档

    总之,Java POI 提供了一种灵活且强大的方式来生成Word文档,通过模板和数据的结合,可以自动化创建定制化的报告、合同等文档,极大地提高了工作效率。正确理解和运用这一技术,能够满足各种业务场景下的文档生成...

    POI生成word文档

    在这个场景中,我们关注的是使用POI来生成Word文档。POI库提供了丰富的API,使得开发者能够轻松地创建、修改和读取Word文档,从而实现自动化报告、文档生成等需求。 首先,我们需要理解如何在Java中设置开发环境。...

    使用poi-3.9通过模板实现对word写入内容的demo

    Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。在本示例中,我们将重点讨论如何使用POI 3.9版本通过模板来...

    java POI生成word.zip

    在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成Word文档的示例代码。以下是基于这个主题的相关知识点: 1. **Java POI库介绍** - Java POI 是一套API,用于处理Microsoft Office格式的...

    poi-3.0.2 生成excel表工具

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint等。在Java环境中,Apache POI 提供了API,使得开发者能够方便地读取、写入和修改这些文件。标题提到的"poi-3.0.2 生成...

    poi-3.9靠谱好用word生成并且转html预览

    下面将详细介绍POI库和如何利用它来生成Word文档以及进行Word到HTML的转换。 1. **Apache POI简介** Apache POI是一个开源项目,由Apache软件基金会维护。它提供了API,使得开发者能够在Java环境中读取、写入和...

    springboot-poi-word-master_word_DEMO_POI_

    - 在Spring Boot应用中,可以通过Controller层的方法处理HTTP请求,然后调用Service层的业务逻辑,使用Apache POI生成Word文档。 - 可以将生成的Word文档作为HTTP响应的附件发送给客户端,或者保存到服务器,提供...

    poi-ooxml-schemas-3.9.jar_jb51_POI_

    开发者可以使用POI来创建、修改或分析Excel电子表格、Word文档和PowerPoint演示文稿,使得在服务器端或桌面应用中处理Office文档变得可能,无需依赖实际的Office软件。 【压缩包子文件的文件名称列表】中的: 1. ...

    poi合并多个word文档并设置页码

    Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在"poi合并多个word文档并设置页码"这个主题中,我们将深入探讨如何利用POI API来实现这两个功能。 首先,让...

    poi-bin-3.9-20121203附带使用说明文档

    - POI的HWPF(Horizontally Written Portable Format)API可以用来处理Word文档,包括创建、读取和修改文本、段落、表格、图片等内容。 - 支持合并多个文档,或者将内容插入到现有文档中。 3. **PowerPoint处理**...

    poi-3.8-20120326.jar 和 poi-excelant-3.8-20120326.jar

    这两个API允许开发者创建、修改和读取Excel电子表格。 2. **工作簿和工作表**:在POI中,一个Excel文件被抽象为一个工作簿对象,而工作簿包含多个工作表。开发者可以创建、删除和操作这些工作表。 3. **单元格类型和...

Global site tag (gtag.js) - Google Analytics