Java使用POI(一)

51 篇文章 3 订阅

poi下载地址:https://archive.apache.org/dist/poi/release/bin/

基本开发所需要的jar包如下(版本号根据自己使用情况选择):

一、基本操作

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Iterator;

/**
 * poi通用公共类
 */
public class BaseUtils {

    /**
     * 读doc
     * @param name 文件所在路径
     */
    public static String readWord(String name){
        FileInputStream in;
        String text = null;
        try {
            in = new FileInputStream(name);
            WordExtractor extractor = new WordExtractor(in);
            text = extractor.getText();
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(text);
        return text;
    }

    /**
     * 读docx
     * @param path 文件所在路径
     */
    public static String readDocx(String path){
        String text = null;
        try {
            InputStream in = new FileInputStream(path);
            XWPFDocument doc = new XWPFDocument(in);
            XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
            text = extractor.getText();
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(text);
        return text;
    }

    /**
     * 读xls
     * @param path 文件所在路径
     */
    public static String readXls(String path){
        String text = "";
        try {
            FileInputStream is = new FileInputStream(path);
            HSSFWorkbook excel = new HSSFWorkbook(is);
            //获取第一个sheet
            HSSFSheet sheet0 = excel.getSheetAt(0);
            for (Iterator rowIterator=sheet0.iterator();rowIterator.hasNext();){
                HSSFRow row = (HSSFRow) rowIterator.next();
                for (Iterator iterator=row.cellIterator();iterator.hasNext();){
                    HSSFCell cell = (HSSFCell) iterator.next();
                    //根据单元的类型,读取相应的结果
                    if(cell.getCellType()== CellType.STRING) text+=cell.getStringCellValue()+"\t";
                    else if(cell.getCellType()==CellType.NUMERIC) text+=cell.getNumericCellValue()+"\t";
                    else if(cell.getCellType()==CellType.FORMULA) text+=cell.getCellFormula()+"\t";
                }
                text +="\n";
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(text);
        return text;
    }

    /**
     * 读xlsx
     * @param path 文件所在路径
     */
    public static String readXlsx(String path){
        String text = "";
        try {
            OPCPackage pkg = OPCPackage.open(path);
            XSSFWorkbook excel = new XSSFWorkbook(pkg);
            //获取第一个sheet
            XSSFSheet sheet0 = excel.getSheetAt(0);
            for (Iterator rowIterator=sheet0.iterator();rowIterator.hasNext();){
                XSSFRow row = (XSSFRow) rowIterator.next();
                for (Iterator iterator=row.cellIterator();iterator.hasNext();)
                {
                    XSSFCell cell=(XSSFCell) iterator.next();
                    //根据单元的的类型 读取相应的结果
                    if(cell.getCellType()==CellType.STRING) text+=cell.getStringCellValue()+"\t";
                    else if(cell.getCellType()==CellType.NUMERIC) text+=cell.getNumericCellValue()+"\t";
                    else if(cell.getCellType()==CellType.FORMULA) text+=cell.getCellFormula()+"\t";
                }
                text+="\n";
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return text;
    }

    public static void main(String[] args) {
//        readXls("D:\\poi\\excel\\计算单元新增(油).xls");
//        readXlsx("D:\\poi\\excel\\数据模板.xlsx");
        readDocx("D:\\poi\\excel\\PG库简介.docx");
        readWord("D:\\poi\\excel\\工作证明.doc");
    }

}

二、对Excel的分步操作

import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.FileOutputStream;
import java.util.Date;
import static org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined.*;

/**
 * 对于EXCEL的分步操作
 */
public class ExcelTest {

    //文件路径
    static String filePath = "D:\\poi\\excel\\test.xls";

    /**
     * 创建一个什么内容都没有的excel
     */
    public static void createSheetExcel() {
        //创建excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表
        HSSFSheet sheet = workbook.createSheet();//该步执行,则创建的excel就已经存在一个默认的sheet
        //创建工作表sheet
        sheet = workbook.createSheet("Test");   //在已经存在的sheet基础上再新建一个sheet,名字叫test
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * excel内创建单元格
     */
    public static void createCellExcel() {
        //创建excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表
        HSSFSheet sheet = workbook.createSheet("test");
        //创建行,从0开始
        HSSFRow row = sheet.createRow(0);
        //创建行的单元格,也是从0开始
        HSSFCell cell = row.createCell(0);
        //设置单元格内容
        cell.setCellValue("李白");
        row.createCell(1).setCellValue(false);
        row.createCell(2).setCellValue(new Date());
        row.createCell(3).setCellValue(12.345);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建Excel,携带文档摘要信息
     */
    public static void createSimpleExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表
        workbook.createSheet("test");
        //创建文档信息
        workbook.createInformationProperties();
        //摘要信息
        DocumentSummaryInformation dsi = workbook.getDocumentSummaryInformation();
        //类别
        dsi.setCategory("类别:Excel文件");
        //管理者
        dsi.setManager("管理者:李白");
        //公司
        dsi.setCompany("公司:唐朝科技");
        //摘要信息
        SummaryInformation si = workbook.getSummaryInformation();
        //主题
        si.setSubject("主题:唐");
        //标题
        si.setTitle("标题:测试文档");
        //作者
        si.setAuthor("李白");
        //备注
        si.setComments("备注:POI测试文档");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建批注
     */
    public static void createPostilExcel() {
        //创建excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFPatriarch patr = sheet.createDrawingPatriarch();
        //创建批注位置(dx1 第1个单元格中x轴的偏移量;dy1 第1个单元格中y轴的偏移量;dx2 第2个单元格中x轴的偏移量;dy2 第2个单元格中y轴的偏移量;col1 第1个单元格的列号;row1 第1个单元格的行号;col2 第2个单元格的列号;row2 第2个单元格的行号)
        HSSFClientAnchor anchor = patr.createAnchor(0, 0, 0, 0, 5, 1, 8, 3);
        //创建批注
        HSSFComment comment = patr.createCellComment(anchor);
        //设置批注内容
        comment.setString(new HSSFRichTextString("这是一个批注段落"));
        //设置批注作者
        comment.setAuthor("李白");
        //设置批注默认显示
        comment.setVisible(true);
        HSSFCell cell = sheet.createRow(2).createCell(1);
        cell.setCellValue("测试");
        //把批注复制给单元格
        cell.setCellComment(comment);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建页眉和页脚
     */
    public static void createHeadAndFooterExcel() {
        //创建excel
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建sheet
        HSSFSheet sheet = workbook.createSheet("test");
        //得到页眉
        HSSFHeader header = sheet.getHeader();
        header.setLeft("页眉左边");
        header.setRight("页眉右边");
        header.setCenter("页眉中间");
        //得到页脚
        HSSFFooter footer = sheet.getFooter();
        footer.setLeft("页脚左边");
        footer.setRight("页脚右边");
        footer.setCenter("页脚中间");
        //除上述方式外,可以使用Office自带的标签定义,通过HSSFHeader或者HSSFFooter访问他们
        HSSFHeader.tab();   //表名
        HSSFHeader.file();  //文件名
        HSSFHeader.startBold();  //粗体开始
        HSSFHeader.endBold();   //粗体结束
        HSSFHeader.startUnderline();    //下划线开始
        HSSFHeader.endUnderline();  //下划线结束
        HSSFHeader.startDoubleUnderline();  //双下划线开始
        HSSFHeader.endDoubleUnderline();    //双下划线结束
        HSSFHeader.time();  //时间
        HSSFHeader.date();  //日期
        HSSFHeader.numPages();  //总页面数
        HSSFHeader.page();  //当前页号
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置格式
     * HSSFDataFormat.getFormat和HSSFDataFormat.getBuiltinFormat的区别: 
     * 当使用Excel内嵌的(或者说预定义)的格式时,直接用HSSFDataFormat.getBuiltinFormat静态方法即可。
     * 当使用自己定义的格式时,必须先调用HSSFWorkbook.createDataFormat(),
     * 因为这时在底层会先找有没有匹配的内嵌FormatRecord,如果没有就会新建一个FormatRecord,所以必须先调用这个方法,
     * 然后你就可以用获得的HSSFDataFormat实例的getFormat方法了,当然相对而言这种方式比较麻烦,
     * 所以内嵌格式还是用HSSFDataFormat.getBuiltinFormat静态方法更加直接一些。
     */
    public static void creaFontExcel() {
        //创建excel
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        //设置日期格式——使用Excel内嵌的格式
        HSSFCellStyle style = workbook.createCellStyle();

        HSSFCell cell = row.createCell(0);
        cell.setCellValue(new Date());
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
        cell.setCellStyle(style);
        //设置保留2位小数——使用Excel内嵌的格式
        cell = row.createCell(1);
        cell.setCellValue(12.3456789);
        style = workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
        cell.setCellStyle(style);
        //设置货币格式——使用自定义的格式
        cell = row.createCell(2);
        cell.setCellValue(12345.6789);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));
        cell.setCellStyle(style);
        //设置百分比格式——使用自定义格式
        cell = row.createCell(3);
        cell.setCellValue(0.123456789);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));
        cell.setCellStyle(style);
        //设置中文大写格式——使用自定义格式
        cell = row.createCell(4);
        cell.setCellValue(12345);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));
        cell.setCellStyle(style);
        //设置科学计数法格式——使用自定义格式
        cell = row.createCell(5);
        cell.setCellValue(12345);
        style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));
        cell.setCellStyle(style);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 合并单元格
     */
    public static void createMargeExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        //合并列
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("合并列");
        /**
         * firstRow 区域中第一个单元格的行号
         * lastRow 区域中最后一个单元格的行号
         * firstCol 区域中第一个单元格的列号
         * lastCol 区域中最后一个单元格的列号
         */
        CellRangeAddress region = new CellRangeAddress(0, 4, 0, 5);
        sheet.addMergedRegion(region);
        //合并行
        cell = row.createCell(6);
        cell.setCellValue("合并行");
        region = new CellRangeAddress(0, 5, 6, 6);
        sheet.addMergedRegion(region);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 单元格对齐
     * 水平对齐相关参数:
     * 如果是左侧对齐就是 HSSFCellStyle.ALIGN_FILL;
     * 如果是居中对齐就是 HSSFCellStyle.ALIGN_CENTER;
     * 如果是右侧对齐就是 HSSFCellStyle.ALIGN_RIGHT;
     * 如果是跨列举中就是 HSSFCellStyle.ALIGN_CENTER_SELECTION;
     * 如果是两端对齐就是 HSSFCellStyle.ALIGN_JUSTIFY;
     * 如果是填充就是 HSSFCellStyle.ALIGN_FILL;
     * 垂直对其相关参数:
     * 如果是靠上就是 HSSFCellStyle.VERTICAL_TOP;
     * 如果是居中就是 HSSFCellStyle.VERTICAL_CENTER;
     * 如果是靠下就是 HSSFCellStyle.VERTICAL_BOTTOM;
     * 如果是两端对齐就是 HSSFCellStyle.VERTICAL_JUSTIFY;
     */
    public static void createAlignExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("单元格对其");
        HSSFCellStyle style = workbook.createCellStyle();
        //水平居中
        style.setAlignment(HorizontalAlignment.CENTER);
        //垂直居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //自动换行
        style.setWrapText(true);
        //缩进
        style.setIndention((short) 5);
        //文本旋转,这里的取值是从-90到90,而不是0到180
        style.setRotation((short) 60);
        cell.setCellStyle(style);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用边框:边框和其它单元格设置一样也是调用CellStyle接口,CellStyle有2种和边框相关的属性,分别是:
     * BorderStyle+方向  代表边框类型,例如:BorderStyleLeft, BorderStyleRight 等
     * 方向 +BorderColor  代表边框颜色,例如:TopBorderColor,BottomBorderColor 等
     */
    public static void createBorderExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        HSSFCellStyle style = workbook.createCellStyle();
        //上边框
        style.setBorderTop(BorderStyle.DOTTED);
        //下边框
        style.setBorderBottom(BorderStyle.THICK);
        //左边框
        style.setBorderLeft(BorderStyle.DOUBLE);
        //右边框
        style.setBorderRight(BorderStyle.SLANTED_DASH_DOT);
        //上边框颜色
        style.setTopBorderColor(RED.getIndex());
        //下边框颜色
        style.setBottomBorderColor(BLUE.getIndex());
        //左边框颜色
        style.setLeftBorderColor(GREEN.getIndex());
        //右边框颜色
        style.setRightBorderColor(PINK.getIndex());
        cell.setCellStyle(style);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置字体
     * 下划线选值
     * 单下划线 FontFormatting.U_SINGLE
     * 双下划线 FontFormatting.U_DOUBLE
     * 会计用单下划线 FontFormatting.U_SINGLE_ACCOUNTING
     * 会计用双下划线 FontFormatting.U_DOUBLE_ACCOUNTING
     * 无下划线 FontFormatting.U_NONE
     * 上标下标选项值:
     * 上标 FontFormatting.SS_SUPER
     * 下标 FontFormatting.SS_SUB
     * 普通,默认值 FontFormatting.SS_NONE
     */
    public static void createfontExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        cell.setCellValue("设置字体");
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        //设置字体名称
        font.setFontName("华文行楷");
        //设置字号
        font.setFontHeightInPoints((short) 28);
        //设置字体颜色
        font.setColor(RED.getIndex());
        //设置下划线
        font.setUnderline(Font.U_SINGLE);
        //设置上标下标
        font.setTypeOffset(Font.SS_SUPER);
        //设置删除线
        font.setStrikeout(true);
        style.setFont(font);
        cell.setCellStyle(style);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("ok");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 背景和纹理
     */
    public static void createForeExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        HSSFCellStyle style = workbook.createCellStyle();
        //设置图案颜色
        style.setFillForegroundColor(GREEN.getIndex());
        //设置图案背景色
        style.setFillBackgroundColor(RED.getIndex());
        //设置图案样式
        style.setFillPattern(FillPatternType.SQUARES);
        cell.setCellStyle(style);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置宽度和高度
     */
    public static void createWidthExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        cell.setCellValue("1234567898765432112354789982315412412123");
        //设置第一列的宽度是31个字符宽度
        sheet.setColumnWidth(1, 31 * 256);
        //设置行的高度是50个点
        row.setHeightInPoints(50);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 判断单元格是否位日期
     */
    public static void createDateExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(1);
        //设置日期数据
        cell.setCellValue(new Date());
        System.out.println(DateUtil.isCellDateFormatted(cell));

        HSSFCellStyle style = workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
        //设置日期格式
        cell.setCellStyle(style);
        System.out.println(DateUtil.isCellDateFormatted(cell));
    }


    public static void main(String[] args) {
//        createSheetExcel(); //创建sheet
//        createCellExcel();    //创建cell
//        createSimpleExcel();    //创建摘要
//        createPostilExcel();    //创建批注
//        createHeadAndFooterExcel(); //页脚页眉
//        creaFontExcel();    //格式设置
//        createMargeExcel();     //单元格合并
//        createAlignExcel();     //单元格对齐
//        createBorderExcel();    //边框设置
//        createfontExcel();  //设置字体
//        createForeExcel();    //设置背景和纹理
//        createWidthExcel();     //设置单元格宽度和高度
        createDateExcel();  //判断单元格是否位日期
    }

}

三、Excel使用公式

import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
import java.util.Calendar;

/**
 * 使用EXCEL公式
 */
public class SecondTest {

    static String filePath = "D:\\poi\\excel\\test.xls";

    /**
     * 简单计算
     */
    public static void baseFormula() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        //设置公式
        cell.setCellFormula("2+3*4");
        cell = row.createCell(1);
        cell.setCellValue(10);
        cell = row.createCell(2);
        //设置公式
        cell.setCellFormula("A1*B1");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * sum函数
     */
    public static void sumExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(1);
        row.createCell(1).setCellValue(2);
        row.createCell(2).setCellValue(3);
        row.createCell(3).setCellValue(4);
        row.createCell(4).setCellValue(5);
        row = sheet.createRow(1);
        //等价于A1+C1
        row.createCell(0).setCellFormula("sum(A1,C1)");
        //等价于B1+C1+D1
        row.createCell(1).setCellFormula("sum(B1:D1)");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 日期函数
     */
    public static void dataExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        HSSFCellStyle style = workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("yyyy-MM-dd"));
        //日历对象
        Calendar date = Calendar.getInstance();
        date.set(2011, 2, 7);
        cell.setCellValue(date.getTime());
        cell.setCellStyle(style);

        cell = row.createCell(1);
        date.set(2014, 4, 25);
        cell.setCellValue(date.getTime());
        cell.setCellStyle(style);

        cell = row.createCell(3);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"y\"),\"年\")");
        cell = row.createCell(4);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"m\"),\"月\")");
        cell = row.createCell(5);
        cell.setCellFormula("CONCATENATE(DATEDIF(A1,B1,\"d\"),\"日\")");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 字符串相关函数
     */
    public static void charExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue("abcdefg");
        row.createCell(1).setCellValue("aa bb cc dd ee fF GG");
        //UPPER(String)将文本转换成大写形式
        row.createCell(3).setCellFormula("UPPER(A1)");
        //PROPER(String)将文字串的首字母及任何非字母字符之后的字符转换成大写。将其余的字母转换成小写
        row.createCell(4).setCellFormula("PROPER(B1)");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * IF函数
     */
    public static void ifExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(12);
        row.createCell(1).setCellValue(23);
        row.createCell(3).setCellFormula("IF(A1>B1,\"A1大于B1\",\"A1小于等于B1\")");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * CountIf和SumIf函数
     */
    public static void countifAndsunifExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(57);
        row.createCell(1).setCellValue(89);
        row.createCell(3).setCellValue(56);
        row.createCell(4).setCellValue(67);
        row.createCell(5).setCellValue(60);
        row.createCell(6).setCellValue(73);
        //COUNTIF(range,criteria):满足某条件的计数的函数。参数range:需要进行读数的计数;参数criteria:条件表达式,只有当满足此条件时才进行计数。
        row.createCell(7).setCellFormula("COUNTIF(A1:F1,\">=60\")");
        //SumIF(criteria_range, criteria,sum_range):用于统计某区域内满足某条件的值的求和。参数criteria_range:条件测试区域,第二个参数Criteria中的条件将与此区域中的值进行比较;参数criteria:条件测试值,满足条件的对应的sum_range项将进行求和计算;参数sum_range:汇总数据所在区域,求和时会排除掉不满足Criteria条件的对应的项
        row.createCell(8).setCellFormula("SUMIF(A1:F1,\">=60\",A1:F1)");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * Lookup函数
     */
    public static void lookupExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue(0);
        row.createCell(1).setCellValue(59);
        row.createCell(2).setCellValue("不及格");
        row = sheet.createRow(1);
        row.createCell(0).setCellValue(60);
        row.createCell(1).setCellValue(69);
        row.createCell(2).setCellValue("及格");
        row = sheet.createRow(2);
        row.createCell(0).setCellValue(70);
        row.createCell(1).setCellValue(79);
        row.createCell(2).setCellValue("良好");
        row = sheet.createRow(3);
        row.createCell(0).setCellValue(80);
        row.createCell(1).setCellValue(100);
        row.createCell(2).setCellValue("优秀");
        row = sheet.createRow(4);
        row.createCell(0).setCellValue(75);
        row.createCell(1).setCellFormula("LOOKUP(A5,$A$1:$A$4,$C$1:$C$4)");
        row.createCell(2).setCellFormula("VLOOKUP(A5,$A$1:$C$4,3,true)");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 随机函数
     * CHAR函数用来将ASCII码换为字母,INT函数用来取整
     * INT函数不会四舍五入,无论小数点后是多少都会被舍去
     */
    public static void formulaExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellFormula("RAND()");//取0-1之间的随机数
        row.createCell(1).setCellFormula("int(RAND()*100)");//取0-100之间的随机整数
        row.createCell(2).setCellFormula("rand()*10+10");//取10-20之间的随机实数
        row.createCell(3).setCellFormula("CHAR(INT(RAND()*26)+97)");//随机小写字母
        row.createCell(4).setCellFormula("CHAR(INT(RAND()*26)+65)");//随机大写字母
        //随机大小写字母
        row.createCell(5).setCellFormula("CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,97,65))");
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//        baseFormula();  //简单计算
//        sumExcel(); //sum计算
//        dataExcel();    //日期函数
//        charExcel();    //字符串相关函数
//        ifExcel();  //IF函数
//        countifAndsunifExcel(); //CountIf和SumIf函数
//        lookupExcel();  //lookup函数
        formulaExcel(); //随机函数
    }

}

四、Excel使用图形

import org.apache.poi.hssf.usermodel.*;
import java.io.*;
import java.util.List;

/**
 * Excel使用图形
 */
public class ThirdTest {

    static String filePath = "D:\\poi\\excel\\test.xls";

    /**
     * 画线
     * 通常,利用POI画图主要有以下几个步骤:
     * 1. 创建一个Patriarch(注意,一个sheet中通常只创建一个Patriarch对象);
     * 2. 创建一个Anchor,以确定图形的位置;
     * 3. 调用Patriarch创建图形;
     * 4. 设置图形类型(直线,矩形,圆形等)及样式(颜色,粗细等)
     * <p>
     * HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
     * dx1:起始单元格的x偏移量,如例子中的0表示直线起始位置距B1单元格左侧的距离;
     * dy1:起始单元格的y偏移量,如例子中的0表示直线起始位置距B1单元格上侧的距离;
     * dx2:终止单元格的x偏移量,如例子中的0表示直线起始位置距E5单元格左侧的距离;
     * dy2:终止单元格的y偏移量,如例子中的0表示直线起始位置距E5单元格上侧的距离;
     * col1:起始单元格列序号,从0开始计算;
     * row1:起始单元格行序号,从0开始计算,如例子中col1=1,row1=0就表示起始单元格为B1;
     * col2:终止单元格列序号,从0开始计算;
     * row2:终止单元格行序号,从0开始计算
     */
    public static void lineExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 0, (short) 4, 4);
        HSSFSimpleShape line = patriarch.createSimpleShape(anchor);
        //设置图形类型
        line.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
        //设置图形样式
        line.setLineStyle(HSSFShape.LINESTYLE_SOLID);
        //在POI中线的宽度12700表示1pt,所以这里是0.5pt粗的线条。
        line.setLineWidth(6350);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 画矩形
     */
    public static void jxExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = new HSSFClientAnchor(255, 122, 255, 122, (short) 1, 0, (short) 4, 3);
        HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
        rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
        rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL);//设置边框样式
        rec.setFillColor(255, 0, 0);//设置填充色
        rec.setLineWidth(25400);//设置边框宽度
        rec.setLineStyleColor(0, 0, 255);//设置边框颜色
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 画Grid
     * 在POI中,本身没有画Grid(网格)的方法。
     * 但我们知道Grid其实就是由横线和竖线构成的,
     * 所在我们可以通过画线的方式来模拟画Grid
     */
    public static void gridExcel() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(2);
        row.createCell(1);
        row.setHeightInPoints(240);
        sheet.setColumnWidth(2, 9000);
        int linesCount = 20;
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        //因为HSSFClientAnchor中dx只能在0-1023之间,dy只能在0-255之间,这里采用比例的方式
        double xRatio = 1023.0 / (linesCount * 10);
        double yRatio = 255.0 / (linesCount * 10);
        //画竖线
        int x1 = 0;
        int y1 = 0;
        int x2 = 0;
        int y2 = 200;
        for (int i = 0; i < linesCount; i++) {
            HSSFClientAnchor a2 = new HSSFClientAnchor();
            a2.setAnchor((short) 2, 2, (int) (x1 * xRatio), (int) (y1 * yRatio),
                    (short) 2, 2, (int) (x2 * xRatio),
                    (int) (y2 * yRatio));
            HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
            shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
            x1 += 10;
            x2 += 10;
        }
        //画横线
        x1 = 0;
        y1 = 0;
        x2 = 200;
        y2 = 0;
        for (int i = 0; i < linesCount; i++) {
            HSSFClientAnchor a2 = new HSSFClientAnchor();
            a2.setAnchor((short) 2, 2, (int) (x1 * xRatio),
                    (int) (y1 * yRatio), (short) 2, 2,
                    (int) (x2 * xRatio), (int) (y2 * yRatio));
            HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
            shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
            y1 += 10;
            y2 += 10;
        }
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 插入图片
     */
    public static void pictureExcel(){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        try {
            FileInputStream stream = new FileInputStream("D:\\poi\\excel\\2.png");   //插入图片的地址
            byte[] bytes = new byte[(int)stream.getChannel().size()];
            stream.read(bytes);

            int pictureIdx = workbook.addPicture(bytes,HSSFWorkbook.PICTURE_TYPE_PNG);
            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short)0, 0, (short)5, 5);
            HSSFPicture pict = patriarch.createPicture(anchor,pictureIdx);
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 从excel文件提取图片
     */
    public static void pullPictureExcel(){
        try {
            InputStream inp = new FileInputStream(filePath);
            //读取现有的excel文件
            HSSFWorkbook workbook = new HSSFWorkbook(inp);
            List<HSSFPictureData> pictures = workbook.getAllPictures();
            for (int i=0;i<pictures.size();i++){
                HSSFPictureData pic=pictures.get(i);
                String ext = pic.suggestFileExtension();
                if (ext.equals("png")){//判断文件格式
                    FileOutputStream png=new FileOutputStream("D:\\poi\\excel\\Apache.png");
                    png.write(pic.getData());
                    png.close();//保存图片
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//        lineExcel();    //画线
//        jxExcel();  //画矩形
//        gridExcel();    //画Grid
//        pictureExcel(); //插入图片
        pullPictureExcel(); //从Excel文件中读取图片
    }

}

五、Excel表操作

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import java.io.FileInputStream;

/**
 * EXCEL表操作
 */
public class FourTest {

    static String filePath = "D:\\poi\\excel\\test.xls";

    /**
     * 设置默认工作表
     */
    public static void deme() {
        //创建Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        workbook.createSheet("Test0");// 创建工作表(Sheet)
        workbook.createSheet("Test1");// 创建工作表(Sheet)
        workbook.createSheet("Test2");// 创建工作表(Sheet)
        workbook.createSheet("Test3");// 创建工作表(Sheet)
        workbook.setActiveSheet(2);//设置默认工作表
    }

    /**
     * 重命名工作表
     */
    public static void demo1() {
        HSSFWorkbook workbook = new HSSFWorkbook();// 创建Excel文件(Workbook)
        workbook.createSheet("Test0");// 创建工作表(Sheet)
        workbook.createSheet("Test1");// 创建工作表(Sheet)
        workbook.createSheet("Test2");// 创建工作表(Sheet)
        workbook.createSheet("Test3");// 创建工作表(Sheet)
        workbook.setSheetName(2, "1234");//重命名工作表
    }

    /**
     * 调整表单显示比例
     */
    public static void demo2() {
        HSSFWorkbook workbook = new HSSFWorkbook();// 创建Excel文件(Workbook)
        HSSFSheet sheet1 = workbook.createSheet("Test0");// 创建工作表(Sheet)
        HSSFSheet sheet2 = workbook.createSheet("Test1");// 创建工作表(Sheet)
        HSSFSheet sheet3 = workbook.createSheet("Test2");// 创建工作表(Sheet)
        sheet1.setZoom(1, 2);//50%显示比例
        sheet2.setZoom(2, 1);//200%显示比例
        sheet3.setZoom(1, 10);//10%显示比例
    }

    /**
     * 显示、隐藏网格线
     */
    public static void demo3() {
        HSSFWorkbook workbook = new HSSFWorkbook();// 创建Excel文件(Workbook)
        HSSFSheet sheet1 = workbook.createSheet("Test0");// 创建工作表(Sheet)
        HSSFSheet sheet2 = workbook.createSheet("Test1");// 创建工作表(Sheet)
        sheet1.setDisplayGridlines(false);//隐藏Excel网格线,默认值为true
        sheet2.setGridsPrinted(true);//打印时显示网格线,默认值为false
    }

    /**
     * 遍历sheet
     */
    public static void demo4() {
        FileInputStream stream = null;
        try {
            stream = new FileInputStream(filePath);
            HSSFWorkbook workbook = new HSSFWorkbook(stream);//读取现有的Excel
            HSSFSheet sheet = workbook.getSheet("Test0");//得到指定名称的Sheet
            for (Row row : sheet) {
                for (Cell cell : row) {
                    System.out.print(cell + "\t");
                }
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 组合行列
     */
    public static void demo5() {
        HSSFWorkbook workbook = new HSSFWorkbook();// 创建Excel文件(Workbook)
        HSSFSheet sheet = workbook.createSheet("Test0");// 创建工作表(Sheet)
        sheet.groupRow(1, 3);//组合行
        sheet.groupRow(2, 4);//组合行
        sheet.groupColumn(2, 7);//组合列
    }

    /**
     * 锁定列(冻结)
     * HSSFSheet sheet= workbook.createSheet("Test0");// 创建工作表(Sheet)
     * sheet.createFreezePane(2, 3, 15, 25);//冻结行列
     * 第一个参数表示要冻结的列数;
     * 第二个参数表示要冻结的行数;
     * 第三个参数表示右边区域可见的首列序号,从1开始计算;
     * 第四个参数表示下边区域可见的首行序号,也是从1开始计算;
     */

    /**
     * 上下移动行
     * FileInputStream stream = new FileInputStream(filePath);
     * HSSFWorkbook workbook = new HSSFWorkbook(stream);
     * HSSFSheet sheet = workbook.getSheet("Test0");
     * sheet.shiftRows(2, 4, 2);//把第3行到第4行向下移动两行
     *
     *  HSSFSheet.shiftRows(startRow, endRow, n)参数说明
     *  startRow:需要移动的起始行;
     *  endRow:需要移动的结束行;
     *  n:移动的位置,正数表示向下移动,负数表示向上移动;
     */

}

六、Excel其它功能

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * Excel其它功能
 */
public class FiveExcel {

    static String filePath = "D:\\poi\\excel\\test.xls";

    /**
     * 设置密码
     */
    public static void demo1() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test0");// 创建工作表(Sheet)
        HSSFRow row = sheet.createRow(1);
        HSSFCell cell = row.createCell(1);
        cell.setCellValue("已锁定");
        HSSFCellStyle locked = workbook.createCellStyle();
        locked.setLocked(true);//设置锁定
        cell.setCellStyle(locked);
        cell = row.createCell(2);
        cell.setCellValue("未锁定");
        HSSFCellStyle unlocked = workbook.createCellStyle();
        unlocked.setLocked(false);//设置不锁定
        cell.setCellStyle(unlocked);
        sheet.protectSheet("password");//设置保护密码
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 数据有限性
     */
    public static void demo2() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("日期列");
        //选定一个区域.开始行,结束行,开始列,结束列
        CellRangeAddressList regions = new CellRangeAddressList(1, 65535, 0, 0);
        DVConstraint constraint = DVConstraint.createDateConstraint(DVConstraint.OperatorType.BETWEEN
                , "1993-01-01", "2014-12-31", "yyyy-MM-dd");
        HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
        dataValidate.createErrorBox("错误", "你必须输入一个时间!");
        sheet.addValidationData(dataValidate);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 生成下拉才昂
     */
    public static void demo3() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("test");
        CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);
        DVConstraint constraint = DVConstraint.createExplicitListConstraint(new String[]{"C++", "Java", "C#"});
        HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
        sheet.addValidationData(dataValidate);
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 打印基本设置
     */
    public static void demo4() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test0");// 创建工作表(Sheet)
        HSSFPrintSetup print = sheet.getPrintSetup();//得到打印对象
        print.setLandscape(false);//true,则表示页面方向为横向;否则为纵向
        print.setScale((short) 80);//缩放比例80%(设置为0-100之间的值)
        print.setFitWidth((short) 2);//设置页宽
        print.setFitHeight((short) 4);//设置页高
        print.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//纸张设置
        print.setUsePage(true);//设置打印起始页码不使用"自动"
        print.setPageStart((short) 6);//设置打印起始页码
        sheet.setPrintGridlines(true);//设置打印网格线
        print.setNoColor(true);//值为true时,表示单色打印
        print.setDraft(true);//值为true时,表示用草稿品质打印
        print.setLeftToRight(true);//true表示“先行后列”;false表示“先列后行”
        print.setNotes(true);//设置打印批注
        sheet.setAutobreaks(false);//Sheet页自适应页面大小
        try {
            FileOutputStream out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
            System.out.println("OK");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * poi创建word的简单示例
     */
    public static void writeWord() {
        XWPFDocument doc = new XWPFDocument();// 创建Word文件
        XWPFParagraph p = doc.createParagraph();// 新建一个段落
        p.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
        p.setBorderBottom(Borders.DOUBLE);//设置下边框
        p.setBorderTop(Borders.DOUBLE);//设置上边框
        p.setBorderRight(Borders.DOUBLE);//设置右边框
        p.setBorderLeft(Borders.DOUBLE);//设置左边框
        XWPFRun r = p.createRun();//创建段落文本
        r.setText("POI创建的Word段落文本");
        r.setBold(true);//设置为粗体
        r.setColor("FF0000");//设置颜色
        p = doc.createParagraph();// 新建一个段落
        r = p.createRun();
        r.setText("POI读写Excel功能强大、操作简单。");
        XWPFTable table = doc.createTable(3, 3);//创建一个表格
        table.getRow(0).getCell(0).setText("表格1");
        table.getRow(1).getCell(1).setText("表格2");
        table.getRow(2).getCell(2).setText("表格3");
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("D:\\poi\\sample.doc");
            doc.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * poi读取word文档里面的文字
     */
    public static void readWord() {
        try {
            FileInputStream stream = new FileInputStream("D:\\poi\\sample.doc");
            XWPFDocument doc = new XWPFDocument(stream);// 创建Word文件
            for (XWPFParagraph p : doc.getParagraphs())//遍历段落
            {
                System.out.print(p.getParagraphText());
            }
            for (XWPFTable table : doc.getTables())//遍历表格
            {
                for (XWPFTableRow row : table.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        System.out.print(cell.getText());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//        demo1();
//        demo2();
//        demo3();
//        demo4();
//        writeWord();
        readWord();
    }

}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

one_smail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值