zoukankan      html  css  js  c++  java
  • Java使用poi进行对Excel的操作

    Java使用poi进行对Excel的操作

    废话不多说,直接进入正题

    先看看目录结构
    1
    一、将Excel表中的数据通过List集合打印在就控制台
    二、将数据库中的数据导入的Excel表中
    上述两条在这里统一进行实现

    1. 先导入对应的依赖
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
    
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
                <scope>compile</scope>
            </dependency>
            <!--druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.21</version>
            </dependency>
            <!--jdbcTemplate-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.4.RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.2.RELEASE</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
    1. 创建持久层接口及实现类
    public interface ProductDao {
    
        void save(Product product);
    
    
        List<Product> findAll();
    
    }
    
    public class ProductDaoImpl implements ProductDao {
            JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource());
    
        @Override
        public void save(Product product) {
            String sql="insert into product values(?,?,?,?)";
            jdbcTemplate.update(sql,product.getPid(),product.getPname(),product.getPrice(),product.getPstock());
    
        }
    
        @Override
        public List<Product> findAll() {
            String sql="select * from product";
            return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Product>(Product.class));
        }
    
    }
    
    1. 创建业务层接口及实现类
    public interface ProductService {
    
    
        void save(List<Product> productList);
    
    
        List<Product> findAll();
    
    }
    
    public class ProductServiceImpl implements ProductService {
        private  ProductDao productDao=new ProductDaoImpl();
    
        @Override
        public void save(List<Product> productList) {
            for (Product product : productList) {
                productDao.save(product);
            }
        }
    
        @Override
        public List<Product> findAll() {
            return productDao.findAll();
        }
    }
    
    
    1. 创建工具类
    public class JDBCUtils {
    
        private static DataSource ds ;
    
        static {
    
            try {
                //1.加载配置文件
                Properties pro = new Properties();
                //使用ClassLoader加载配置文件,获取字节输入流
                InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                pro.load(is);
    
                //2.初始化连接池对象
                ds = DruidDataSourceFactory.createDataSource(pro);
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接池对象
         */
        public static DataSource getDataSource(){
            return ds;
        }
    
    
        /**
         * 获取连接Connection对象
         */
        public static Connection getConnection() throws SQLException {
            return  ds.getConnection();
        }
    }
    
    
    1. 进行测试
     public static void write( List<Product> productList,String path) throws IOException {
            //1.创建一个工作薄
           XSSFWorkbook xssfWorkbook=new XSSFWorkbook();
           //2.创建工作表
           XSSFSheet sheet = xssfWorkbook.createSheet("商品");
           //单元格样式
           XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();
           cellStyle.setFillForegroundColor(IndexedColors.PINK.getIndex());
           //字体样式
           XSSFFont font = xssfWorkbook.createFont();
           font.setFontName("黑体");
           font.setColor(IndexedColors.BLUE.getIndex());
           cellStyle.setFont(font);
    
    
           //3.创建行
           XSSFRow row = sheet.createRow(0);
          /* row.createCell(0).setCellValue("商品编号");
           row.createCell(1).setCellValue("商品名称");
           row.createCell(2).setCellValue("商品价格(单位:元/斤)");
           row.createCell(3).setCellValue("商品库存(单位:吨)");*/
    
           XSSFCell cell = row.createCell(0);
           cell.setCellValue("商品编号");
           cell.setCellStyle(cellStyle);
    
           XSSFCell cell1 = row.createCell(1);
           cell1.setCellValue("商品名称");
           cell1.setCellStyle(cellStyle);
    
           XSSFCell cell2 = row.createCell(2);
           cell2.setCellValue("商品价格(单位:元/斤)");
           cell2.setCellStyle(cellStyle);
    
           XSSFCell cell3 = row.createCell(3);
           cell3.setCellValue("商品库存(单位:吨)");
           cell3.setCellStyle(cellStyle);
    
    
           for (int i = 0; i < productList.size(); i++) {
               XSSFRow row1 = sheet.createRow(i + 1);
               row1.createCell(0).setCellValue(productList.get(i).getPid());
               row1.createCell(1).setCellValue(productList.get(i).getPname());
               row1.createCell(2).setCellValue(productList.get(i).getPrice());
               row1.createCell(3).setCellValue(productList.get(i).getPstock());
           }
    
           FileOutputStream fileOutputStream=new FileOutputStream(path);
           xssfWorkbook.write(fileOutputStream);
           fileOutputStream.flush();
           fileOutputStream.close();
           xssfWorkbook.close();
           
    
       }
    

    三、对Excel表中进行添加数据
    四、将Excel表中的数据保存到数据库中
    上述两条在这里统一进行实现
    测试:

    public static  List<Product> read(String path) throws IOException {
    
        List<Product> productList=new ArrayList<>();
        //1.获取工作薄
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(path);
            //2.获取工作表
            XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
    
            int lastRowNum = sheet.getLastRowNum();
            for (int i = 1; i <=lastRowNum ; i++) {
                XSSFRow row = sheet.getRow(i);
                if(row!=null){
                    List<String> list=new ArrayList<>();
                    for (Cell cell : row) {
                        if(cell!=null){
                            cell.setCellType(Cell.CELL_TYPE_STRING);
                            String value = cell.getStringCellValue();//读取数据
                            if(value!=null&&!"".equals(value)) {
                                list.add(value);
                            }
                        }
                    }
                    if(list.size()>0) {
                        Product product = new Product(Integer.parseInt(list.get(0)), list.get(1), Double.parseDouble(list.get(2)), Integer.parseInt(list.get(3)));
                        productList.add(product);
                    }
                }
    
            }
            return productList;
    
        }
    

    可以通过键盘进行选择要执行的操作

     //通过键盘录入Scanner
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入你要选择的功能: 1.导入 2.导出");
            int num = sc.nextInt();
            ProductService productService=  new ProductServiceImpl();
            if(num==1){
                //1.导入
                //1.1读取excel表中的数据
                System.out.println("请输入您要读取的文件位置(不包含空格)");
                String path = sc.next();
                List<Product> productList = read(path);
                System.out.println(productList);
                //1.2将数据写入到数据库中
    
                productService.save(productList);
                System.out.println("数据已存入数据库中!");
            }else if(num==2){
                //2.导出
                //2.1 读取数据库中的数据
                List<Product> productList=    productService.findAll();
                System.out.println(productList);
                //2.2将数据写入到excel表格中
                System.out.println("请输入要写入的文件位置:");
                String path = sc.next();
                write(productList,path);
                System.out.println("写入成功!");
    
            }else {
                System.out.println("输入有误,请重新启动");
            }
        }
    

    已有文档
    2
    3

    4
    写入
    5
    表中的数据:
    6
    这里再说一下我的个人博客

    天涯志

  • 相关阅读:
    洛谷P3178 [HAOI2015]树上操作 题解 树链剖分+线段树
    洛谷P2590 [ZJOI2008]树的统计 题解 树链剖分+线段树
    2017年NOIP普及组复赛题解
    洛谷P3957 跳房子 题解 二分答案/DP/RMQ
    2016年NOIP普及组复赛题解
    2015年NOIP普及组复赛题解
    2014年NOIP普及组复赛题解
    洛谷P2258 子矩阵 题解 状态压缩/枚举/动态规划
    2013年NOIP普及组复赛题解
    第四章 选择结构(二)
  • 原文地址:https://www.cnblogs.com/cainiaoxiaoxie/p/12745743.html
Copyright © 2011-2022 走看看