java关于Excle表格的操作

目录

1.使用poi工具

2.读取Excel源标题、源数据、总行数、总列数

3.导出excel表格

4.创建新的excel表格

5.判断Excel文件版本

6.其他


1.使用poi工具

pom.xml中添加依赖

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
</dependency>

2.读取Excel源标题、源数据、总行数、总列数

/**
 * 读Excel的方法readExcel,该方法的入口参数为一个File对象
 * @param file
 * @return
 */
public static Map readExcel(File file) {
    Map map = new HashMap();
    try {
        // 创建输入流,读取Excel
        InputStream is = new FileInputStream(file.getAbsolutePath());
        // jxl提供的Workbook类
        jxl.Workbook wb = jxl.Workbook.getWorkbook(is);
        // Excel的页签数量
        int sheet_size = wb.getNumberOfSheets();
        if(sheet_size > 1){
            return null;
        }
        //获取原标题
        List oldTitleRow = new ArrayList();
        List<Object> outerList = new ArrayList<Object>();
        // 每个页签创建一个Sheet对象
        jxl.Sheet sheet = wb.getSheet(0);

        //sheet.getRows()返回该页的总行数
        for (int i = 0; i < sheet.getRows(); i++) {
            Map innerMap = new HashMap();
            String cellinfo = "";
            // sheet.getColumns()返回该页的总列数
            for (int j = 0; j < sheet.getColumns(); j++) {
                cellinfo = sheet.getCell(j, i).getContents();
                //如果是第3行,取出数据作为oldTitleRow行
                if(i == 2){
                    oldTitleRow.add(cellinfo);
                }
                if(i > 2){
                    innerMap.put(j, cellinfo);
                }
            }
            //只取出第3行以及第三之后的数据
            if(i > 2){
                outerList.add(innerMap);
            }
        }
        //保存源标题、源数据、总行数、总列数
        map.put("oldTitleRow", oldTitleRow);
        map.put("dataList", outerList);
        map.put("rowNum", sheet.getRows()-3);
        map.put("columnNum", sheet.getColumns());
        return map;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (BiffException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

3.导出excel表格

/**
 * 导出excel表格
 * @param dataList 被导出的数据
 * @param cloumnCount 总列数
 * @param newTitleRow 标题行
 * @param finalXlsxPath 导出路径
 */
public static void writeExcel(List<Map> dataList, int cloumnCount,List newTitleRow, String finalXlsxPath) {
    OutputStream out = null;
    try {
        // 获取总列数
        int columnNumCount = cloumnCount;
        // 创建空的Excel文档,并加上title
        createExcel(finalXlsxPath,"Template", newTitleRow);
        File finalXlsxFile = new File(finalXlsxPath);
        Workbook workBook = getWorkbok(finalXlsxFile);

        // sheet 对应一个工作页
        Sheet sheet = workBook.getSheetAt(0);
        // 创建文件输出流,输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
        out = new FileOutputStream(finalXlsxPath);
        workBook.write(out);
        /**
         * 往Excel中写新数据
         */
        for (int j = 0; j < dataList.size(); j++) {
            // 创建一行:从第二行开始,跳过属性列
            Row row = sheet.createRow(j + 1);
            // 得到要插入的每一条记录
            Map dataMap = dataList.get(j);

            for (int k = 0; k < columnNumCount; k++) {
                String data = dataMap.get(k).toString();
                // 在一行内循环
                Cell cell = row.createCell(k);
                cell.setCellValue(data);
            }
        }
        // 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
        out = new FileOutputStream(finalXlsxPath);
        workBook.write(out);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    System.out.println("数据导出成功");
}

4.创建新的excel表格

/**
 * 创建新excel
 * @param fileDir  excel的路径
 * @param sheetName 要创建的表格索引
 * @param newTitleRow 要创建的表格标题
 */
public static void createExcel(String fileDir,String sheetName, List<String> newTitleRow){
    //判断文件是否存在
    if(fileExist(fileDir)){
        deleteExcel(fileDir);
    }
    //创建workbook
    HSSFWorkbook workbook = new HSSFWorkbook();
    //添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
    HSSFSheet sheet1 = workbook.createSheet(sheetName);
    //新建文件
    FileOutputStream out = null;
    try {
        //添加表头
        HSSFRow row = workbook.getSheet(sheetName).createRow(0);    //创建第一行
        for(int i = 0;i < newTitleRow.size();i++){
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(newTitleRow.get(i));
        }
        out = new FileOutputStream(fileDir);
        workbook.write(out);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5.判断Excel文件版本

/**
 * 判断Excel的版本,获取Workbook
 * @param file
 * @return
 */
public static Workbook getWorkbok(File file) {
    Workbook wb = null;

    try {
        FileInputStream in = new FileInputStream(file);
        if (file.getName().endsWith(EXCEL_XLS)) {     //Excel&nbsp;2003
            wb = new HSSFWorkbook(in);
        } else if (file.getName().endsWith(EXCEL_XLSX)) {    // Excel 2007/2010
            wb = new XSSFWorkbook(in);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return wb;
}

6.其他

/**
 * 判断文件是否存在.
 * @param fileDir  文件路径
 * @return
 */
public static boolean fileExist(String fileDir){
    boolean flag = false;
    File file = new File(fileDir);
    flag = file.exists();
    return flag;
}

/**
 * 删除文件.
 * @param fileDir  文件路径
 */
public static boolean deleteExcel(String fileDir) {
    boolean flag = false;
    File file = new File(fileDir);
    // 判断目录或文件是否存在
    if (!file.exists()) {  // 不存在返回 false
        return flag;
    } else {
        // 判断是否为文件
        if (file.isFile()) {  // 为文件时调用删除文件方法
            file.delete();
            flag = true;
        }
    }
    return flag;
}

OK, GAME OVER!

发布了131 篇原创文章 · 获赞 1663 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/qq_26230421/article/details/89886075
今日推荐