导入到Excel_POI根据模板,如何生成可变表头的excel

问题:导入到Excel_POI根据模板,如何生成可变表头的excel。excel如何撤消表头锁定?

一、完毕效益:

壹、已毕效益:

POI根据模板(excel表头)导出excel
以下摘自:

回答:

  传入二个表头和数码,将数据导入到excel中。

  传入叁个表头和数量,将数据导入到excel中。

package com.cvt.smarthome.application.basedata.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.RichTextString;

/**
 * 共分为六部完成根据模板导出excel操作:<br/>
 * 第一步、设置excel模板路径(setSrcPath)<br/>
 * 第二步、设置要生成excel文件路径(setDesPath)<br/>
 * 第三步、设置模板中哪个Sheet列(setSheetName)<br/>
 * 第四步、获取所读取excel模板的对象(getSheet)<br/>
 * 第五步、设置数据(分为种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、
 * setCellRichTextStrValue)<br/>
 * 第六步、完成导出 (exportToNewFile)<br/>
 * 
 * @author Administrator
 * 
 */
public class ExcelUtil {
    private String  srcXlsPath  = "";   // // excel模板路径
    private String  desXlsPath  = "";
    private String  sheetName   = "";
    POIFSFileSystem fs          = null;
    HSSFWorkbook    wb          = null;
    HSSFSheet       sheet       = null;

    /**
     * 第一步、设置excel模板路径
     * 
     * @param srcXlsPath
     */
    public void setSrcPath(String srcXlsPath) {
        this.srcXlsPath = srcXlsPath;
    }

    /**
     * 第二步、设置要生成excel文件路径
     * 
     * @param desXlsPath
     */
    public void setDesPath(String desXlsPath) {
        this.desXlsPath = desXlsPath;
    }

    /**
     * 第三步、设置模板中哪个Sheet列
     * 
     * @param sheetName
     */
    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    /**
     * 第四步、获取所读取excel模板的对象
     */
    public void getSheet() {
        try {
            File fi = new File(srcXlsPath);
            if (!fi.exists()) {
                System.out.println("模板文件:" + srcXlsPath + "不存在!");
                return;
            }
            fs = new POIFSFileSystem(new FileInputStream(fi));
            wb = new HSSFWorkbook(fs);
            sheet = wb.getSheet(sheetName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 第五步、设置字符串类型的数据
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --字符串类型的数据
     */
    public void setCellStrValue(int rowIndex, int cellnum, String value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第五步、设置日期/时间类型的数据
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --日期/时间类型的数据
     */
    public void setCellDateValue(int rowIndex, int cellnum, Date value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第五步、设置浮点类型的数据
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --浮点类型的数据
     */
    public void setCellDoubleValue(int rowIndex, int cellnum, double value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第五步、设置Bool类型的数据
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --Bool类型的数据
     */
    public void setCellBoolValue(int rowIndex, int cellnum, boolean value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第五步、设置日历类型的数据
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --日历类型的数据
     */
    public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第五步、设置富文本字符串类型的数据。可以为同一个单元格内的字符串的不同部分设置不同的字体、颜色、下划线
     * 
     * @param rowIndex
     *            --行值
     * @param cellnum
     *            --列值
     * @param value
     *            --富文本字符串类型的数据
     */
    public void setCellRichTextStrValue(int rowIndex, int cellnum,
        RichTextString value) {
        HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
        cell.setCellValue(value);
    }

    /**
     * 第六步、完成导出
     */
    public void exportToNewFile() {
        FileOutputStream out;
        try {
            out = new FileOutputStream(desXlsPath);
            wb.write(out);
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

excel表格在锁定之后,觉得用不着这几个锁定作用了,能够直接收回,步骤也是点击左上角的“视图”菜单,然后点击“冻结窗格”上边包车型客车下拉框,最终在弹出来的功力菜单中,选拔“废除冻结窗格”就足以立时撤废excel表格的表头锁定了。(如下图)

  为了有利于项指标扩大,数据传入通过泛型集合传入,获取数据时,通过反射的主意获取,这样不管你的表头是多少项,作者都能很便宜的浮动。其它为了有利于数据的田管,作者每一日都会自动生成贰个文件夹,excel生成在对应的文书夹中。文件的根目录通过读取项目中的properties文件获取(详情可查阅:)。好啊,接下去直接进入代码开发吧。

  为了便利项目的扩张,数据传入通过泛型集合传入,获取数据时,通过反射的不贰秘籍取得,那样无论你的表头是有点项,笔者都能很方便的变迁。别的为了便利数据的保管,作者每一日都会自动生成3个文本夹,excel生成在对应的文书夹中。文件的根目录通过读取项目中的properties文件获取(详情可查看:)。好啊,接下去直接进去代码开发吧。

图片 1

2、所需jar包

2、所需jar包

回答:

  那里运用的是透过poi的方法将数据导入到excel中。

  那里运用的是经过poi的点子将数据导入到excel中。

相似是首行被冷冻了,撤销冻结窗口即可。图片 2

图片 3

图片 4

附赠个小知识,在急需固定特定列或行时,能够鼠标点击所需单元格,选拔”冻结拆分窗口”图片 5

3、代码设计

叁、代码设计

回答:

一)、properties文件内容

1)、properties文件内容

诚如表头都以第3行,锁定的话是因为安装了“冻结首行”,由此大家只要撤消“冻结首行”就能够收回表头锁定,具体操作如下:

filePath=E\:/appData
filePath=E\:/appData