java导出数据到excel文件

总体步骤

  1. 创建一个工作簿.
  2. 创建sheet表(在某个工作簿中创建,可创建多个).
  3. 创建行(在sheet中创建).
  4. 创建单元格(在行中创建).
  5. 填充单元格的值.
  6. 重复3,4,5的步骤填充数据.
  7. 保存到本地文件或者对该文件做其他处理.

相关说明

如果看不懂我所写的总体步骤,那么就需要了解一下excel的相关概念:excel是一个文件,那么这个文件就是一个工作簿,而一个工作簿下有很多的表(这些表就是sheet),一个表下有多行多列多个单元格.

代码展示

创建一个含有两个sheet表的excel.

maven依赖

  <dependencies>
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi</artifactId>
           <version>3.9</version>
       </dependency>
   </dependencies>

代码展示

  • data.java
package com.data;

import java.util.HashMap;
import java.util.Map;

public class Data {
    class User{
        private String name;
        private int age;

        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

    public Map getUserData(){
        Map map = new HashMap();
        for (int i = 1; i < 20; i++) {
            User user = new User(i+"--user", i+20);
           map.put(i, user);
        }
        return map;
    }
}
  • Data2Excel.java
package com.data;

import org.apache.poi.hssf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

public class Data2Excel {
    public static void main(String[] args) throws IOException {
        new Data2Excel().export();
    }

    public void export() throws IOException {
        Data data = new Data();
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet1 = workbook.createSheet("用户信息");
//        可以在同一个工作簿下创建多个sheet表
//        HSSFSheet sheet2 = workbook.createSheet("用户详情2");
//        HSSFSheet sheet3 = workbook.createSheet("用户详情3");
//        在sheet1中创建一行标题
        createScanTitle(workbook, sheet1);
//        对sheet1中填充数据
        fillUserData(workbook, sheet1, data.getUserData());
//        保存工作簿到本地
        save2file(workbook);
    }

    /**
     * 创建表头的工具
     * @param workbook
     * @param sheet
     */
    private void createScanTitle(HSSFWorkbook workbook, HSSFSheet sheet){
        HSSFRow row = sheet.createRow(0);
        sheet.setColumnWidth(1,12*256);
        sheet.setColumnWidth(3,17*256);

        //设置为居中加粗
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setFont(font);

        HSSFCell cell;
        cell = row.createCell(0);
        cell.setCellValue("编号");
        cell.setCellStyle(style);

        cell = row.createCell(1);
        cell.setCellValue("姓名");
        cell.setCellStyle(style);

        cell = row.createCell(2);
        cell.setCellValue("年龄");
        cell.setCellStyle(style);

    }

    /**
     * 填充数据
     */
    private void fillUserData(HSSFWorkbook workbook, HSSFSheet sheet, Map<Integer, Data.User> userMap){
//            编号从1开始,excel中的行是从0开始算的,所以这里就是非程序员的第二行
        for (int id:userMap.keySet()){

            HSSFRow row = sheet.createRow(id);
//            编号
            row.createCell(0).setCellValue(id);
//            姓名
            row.createCell(1).setCellValue(userMap.get(id).getName());
//            年龄
            row.createCell(2).setCellValue(userMap.get(id).getAge());
        }
    }

    /**
     * 把文件保存下来
     * @param workbook
     */
    private void save2file(HSSFWorkbook workbook) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("详情.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.flush();
        fileOutputStream.close();
    }
}

执行Data2Excel.java

在当前项目的路径下可以得到一个excel文件,效果如下:
在这里插入图片描述

发布了22 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38727626/article/details/102383919