• Java利用Apache POI将数据库数据导出为excel


    将数据库中的数据导出为excel文件,供其他人查看

    public class POITest {
    
        public static void main(String[] args) {
            POITest test = new POITest();
            
    //        test.readExcelToDB();
            
            test.writeExcelFromDB();
            
        }
        
        static class Book{
            public String title;
            public String author;
            public String date;
        }
        
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        ComboPooledDataSource dataSource;
        public POITest() {
            //初始化数据库连接池
            try {
                dataSource = new ComboPooledDataSource();
                dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
                dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?user=root&password=123456"
                        + "&characterEncoding=utf8&serverTimezone=UTC");
            } catch (PropertyVetoException e) {
                e.printStackTrace();
            }
        }
        
        //从数据库读取数据并保存为excel
        public void writeExcelFromDB(){
            List<Book> books = new ArrayList<POITest.Book>();
            try {
                Connection conn = dataSource.getConnection();
                Statement statement = conn.createStatement();
                ResultSet resultSet = statement.executeQuery("select * from book");
                while(resultSet.next()){
                    Book book = new Book();
                    //第一列是id
                    book.title = resultSet.getString(2);
                    book.author = resultSet.getString(3);
                    book.date = format.format(resultSet.getDate(4));
                    books.add(book);
                }
                
                writeExcel(books);
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
        
        //HSSF 写excel
        private void writeExcel(List<Book> books) throws IOException{
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建表
            HSSFSheet sheet = workbook.createSheet("书本");
            //创建首行
            HSSFRow topRow = sheet.createRow(0);
            //创建首行单元格样式
            HSSFCellStyle topCellStyle = workbook.createCellStyle();
            topCellStyle.setAlignment(HorizontalAlignment.CENTER);
            topCellStyle.setFillForegroundColor(HSSFColor.YELLOW.index);
            topCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            topCellStyle.setBorderBottom(BorderStyle.THIN);
            topCellStyle.setBorderLeft(BorderStyle.THIN);
            topCellStyle.setBorderTop(BorderStyle.THIN);
            topCellStyle.setBorderRight(BorderStyle.THIN);
            HSSFFont topFont = workbook.createFont();
            topFont.setColor(HSSFColor.BLACK.index);
            topCellStyle.setFont(topFont);
            
            HSSFCell topCell = topRow.createCell(0);
            topCell.setCellValue("书名");
            topCell.setCellStyle(topCellStyle);
            topCell = topRow.createCell(1);
            topCell.setCellValue("作者");
            topCell.setCellStyle(topCellStyle);
            topCell = topRow.createCell(2);
            topCell.setCellValue("出版日期");
            topCell.setCellStyle(topCellStyle);
            
            //设置普通行单元格样式
            HSSFCellStyle cellStyle = workbook.createCellStyle();
            cellStyle.cloneStyleFrom(topCellStyle);
            cellStyle.setFillForegroundColor(HSSFColor.WHITE.index);
            cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            HSSFFont font = workbook.createFont();
            font.setColor(HSSFColor.BLACK.index);
            cellStyle.setFont(font);
            
            for (int i=0; i<books.size(); i++) {
                HSSFRow row = sheet.createRow(i+1);
                Book book = books.get(i);
                HSSFCell cell = row.createCell(0);
                cell.setCellValue(book.title);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(1);
                cell.setCellValue(book.author);
                cell.setCellStyle(cellStyle);
                cell = row.createCell(2);
                cell.setCellValue(book.date);
                cell.setCellStyle(cellStyle);
            }
            
            FileOutputStream os = new FileOutputStream("d:/book.xls");
            workbook.write(os);
            os.flush();
            os.close();
        }
        
    
        //从本地读取excel数据插入数据库
        public void readExcelToDB(){
            try {
                List<Book> books = readExcel();
                Connection conn = dataSource.getConnection();
                String sql = "insert into book(title,author,submission_date) values(?,?,?)";
                PreparedStatement preparedStatement = conn.prepareStatement(sql);
                for (Book book : books) {
                    preparedStatement.setString(1, book.title);
                    preparedStatement.setString(2, book.author);
                    preparedStatement.setDate(3, new Date(format.parse(book.date).getTime()));
                    preparedStatement.addBatch();
                }
                preparedStatement.executeBatch();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            }
            
        }
        
        //HSSF 读excel
        private List<Book> readExcel() throws IOException{
            List<Book> books = new ArrayList<POITest.Book>();
            InputStream is = new FileInputStream(new File("d:/book_2.xls"));
            //得到工作薄
            HSSFWorkbook workbook = new HSSFWorkbook(is);
            //得到工作表
            Sheet sheet = workbook.getSheetAt(0);
            //得到行数
            int rowNum = sheet.getLastRowNum();
            //首行是标题行
            for(int i=1; i<=rowNum; i++){
                Book book = new Book();
                Row row = sheet.getRow(i);
                Cell cell = row.getCell(0);
                book.title = cell.getStringCellValue();
                cell = row.getCell(1);
                book.author = cell.getStringCellValue();
                cell = row.getCell(2);
                book.date = format.format(cell.getDateCellValue());
                books.add(book);
            }
            
            return books;
        }
        
    }

    book建表语句

    CREATE TABLE `book` (
      `id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
      `title` varchar(100) DEFAULT NULL,
      `author` varchar(40) DEFAULT NULL,
      `submission_date` date DEFAULT NULL
    ) 

    设置列宽(index表示第几列,从0开始)

    sheet.setColumnWidth(index, 30*256);

    设置表格内容自动换行

    CellStyle wrapStyle = workBook.createCellStyle();
    wrapStyle.setWrapText(true);
    
    wrapCell.setCellStyle(wrapStyle);
    wrapCell.setCellValue("第一行
    第二行");
  • 相关阅读:
    用Python写春联:抒写最真诚的祝福和最美好的祈愿
    python 注册表操作
    python 多参数
    arcgis tin版本转换使用复制tin
    python基础知识
    模型免费学习地址https://space.bilibili.com/378493128?spm_id_from=333.788
    在Python中用turtle函数画同心圆
    solr系统query检索词特殊字符的处理
    C#winform抓取百度,Google搜索关键词结果
    理解Solr缓存及如何设置缓存大小
  • 原文地址:https://www.cnblogs.com/wenhui92/p/7449155.html
Copyright © 2020-2023  润新知