POI导出excel文件样式

需求:

  公司业务和银行挂钩,各种形式的数据之间交互性比较强,这就涉及到了存储形式之间的转换

  比如数据库数据与excel文件之间的转换


解决:

  我目前使用过的是POI转换数据库和文件之间的数据,下边上代码

package org.triber.portal.model.area;

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

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class AreaExcelUtil {

    /**
     * 导出excel
     * @param tableTileCH 表中文字段数组
     * @param fileName 文件全路径名
     * @param list 数据集
     * @param tableTileEN 映射字段集
     */
    public void exportExcel (String[] tableTileCH, String fileName, List<?> list, String[] tableTileEN){
        //文件不存在则创建文件
        File file=new File(fileName);
        if(!file.exists())
        {
            try {
                file.createNewFile();
            } catch (IOException e) {
                System.out.println("failed to create file.");
                e.printStackTrace();
            }
        }
        OutputStream out= null;
        try {
            out = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();

        }
        //创建工作簿
        HSSFWorkbook workbook=new HSSFWorkbook();
        HSSFFont f=workbook.createFont();
        f.setBold(true);
        f.setFontName("宋体");
        f.setColor((short)100);
        HSSFCellStyle style = workbook.createCellStyle();
        // 设置这些样式
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
        // 背景色
        style.setFillForegroundColor(HSSFColor.YELLOW.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setFillBackgroundColor(HSSFColor.YELLOW.index);
        // 设置边框
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 自动换行
        style.setWrapText(true);
        HSSFSheet sheet=workbook.createSheet("shoot1");
        sheet.setDefaultColumnWidth((short) 15); //这里很关键,不设置这里导出的列宽窄,数据不正确
        /**
         * 写入数据
         */
        HSSFRow row=sheet.createRow(0);//创建一行
        row.setRowStyle(style);
        String str = "";
        //生成列名
        for (int i = 0; i < tableTileCH.length; i++) {
            //excel的格子单元 一行
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(tableTileCH[i]);
        }
        //生成列值
        for (int i = 0; i < list.size(); i++) {
            HSSFRow dataRow = sheet.createRow(i + 1);
            for (int m = 0; m < tableTileCH.length; m++) {
                Map<String, Object> map = (Map<String, Object>) list.get(i);
                HSSFCell dataCell = dataRow.createCell(m);
                str = String.valueOf(
                        map.get(tableTileEN[m])) == null ? "": String.valueOf(map.get(tableTileEN[m]));
                str = str.equals("null") ? "" : str;
                dataCell.setCellValue(str);
            }
        }
        //写文件
        try {
            workbook.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                //关闭流
                out.flush();
                out.close();
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 从Excel此向数据库导入数据
     */
    public List<Area> importExcel(FileInputStream fileInputStream) {
        List<Area> list = new ArrayList<Area>();
        try {
            //创建Excel工作薄
            HSSFWorkbook hwb = new HSSFWorkbook(fileInputStream);
            //得到第一个工作表
            HSSFSheet sheet = hwb.getSheetAt(0);
            HSSFRow row = null;
            //表示工作表的总数
            for(int i = 0; i < hwb.getNumberOfSheets(); i++){
                sheet = hwb.getSheetAt(i);
                //行数
                for(int j = 1; j < sheet.getLastRowNum(); j++){
                    row = sheet.getRow(j);
                    Area area = new Area();
                    HSSFCell areaId = row.getCell(0);
                    area.setAreaId(getCellValue(areaId));
                    HSSFCell areaDscr = row.getCell(1);
                    area.setAreaDscr(getCellValue(areaDscr));
                    HSSFCell level = row.getCell(2);
                    area.setLevel(getCellValue(level));
                    HSSFCell beginTime = row.getCell(3);
                    area.setBeginTime(getCellValue(beginTime));
                    HSSFCell closeTime = row.getCell(4);
                    area.setCloseTime(getCellValue(closeTime));
                    HSSFCell entryDis = row.getCell(5);
                    if("是".equals(getCellValue(entryDis) )){
                        area.setEntryDis("1");
                    }else {  area.setEntryDis("0");}
                    HSSFCell entryCode = row.getCell(6);
                    area.setEntryCode(getCellValue(entryCode));
                    HSSFCell oldCode = row.getCell(7);
                    area.setOldCode(getCellValue(oldCode));
                    HSSFCell oldId = row.getCell(8);
                    area.setOldId(getCellValue(oldId));
                    HSSFCell reviseTime = row.getCell(9);
                    area.setReviseTime(getCellValue(reviseTime));
                    HSSFCell state = row.getCell(10);
                    area.setState(getCellValue(state));
                    HSSFCell bigCollCode = row.getCell(11);
                    area.setBigCollCode(getCellValue(bigCollCode));
                    //生成结果集
                    list.add(area);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 判断从Excel文件中解析出来数据的格式
     * @param cell 待解析的单元格
     * @return 字符串
     */
    private static String getCellValue(HSSFCell cell){

        String value = null;
        if(null!=cell) {
            switch (cell.getCellType()) {
                //字符串
                case HSSFCell.CELL_TYPE_STRING: {
                    value = cell.getRichStringCellValue().getString();
                    break;
                }
                //数字
                case HSSFCell.CELL_TYPE_NUMERIC: {
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        //如果是date类型则 ,获取该cell的date值
                        Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        value = format.format(date);
                    } else {
                        long dd = (long) cell.getNumericCellValue();
                        value = dd + "";
                    }
                    break;
                }
                case HSSFCell.CELL_TYPE_BLANK: {
                    value = "";
                    break;
                }
                case HSSFCell.CELL_TYPE_FORMULA: {
                    value = String.valueOf(cell.getCellFormula());
                    break;
                }
                //boolean型值
                case HSSFCell.CELL_TYPE_BOOLEAN: {
                    value = String.valueOf(cell.getBooleanCellValue());
                    break;
                }
                case HSSFCell.CELL_TYPE_ERROR: {
                    value = String.valueOf(cell.getErrorCellValue());
                    break;
                }
                default:
                    break;
            }
        }
        return value;
    }
}

总结:

  以上就是POI导入导出的相关代码,亲测可用!

  

原文地址:https://www.cnblogs.com/hackxiyu/p/8309266.html

时间: 2024-10-02 03:37:21

POI导出excel文件样式的相关文章

JavaFX学习之道:FileChooser 、POI导出Excel文件

以下是JavaFX中导出Excel的核心代码: private HSSFWorkbook workbook; /* Build Operation Button Area */ Button exportBn = ButtonBuilder.create().text("导出Excel").prefWidth(80).prefHeight(30).build(); exportBn.setDefaultButton(true); exportBn.setOnAction(new Eve

poi导出excel设置样式

由于要利用poi导出excel(XSSFWorkbook),而且要添加样式,搜索其他的结果无非都是颜色值,经查询的结果,做一下总结: 1.设置背景色,要用  style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); 使用 style.setFillBackgroundColor(bg);方法总是出现一个黑块,所以改为上面的写法,结果正确 颜色的问题,可以在 IndexedColors 中查到,是个枚举 2.有合并单元格的情况下,

简单的poi导出excel文件

1 import java.io.FileOutputStream; 2 import java.io.IOException; 3 import java.util.Calendar; 4 import java.util.List; 5 6 import org.apache.poi.hssf.usermodel.HSSFCell; 7 import org.apache.poi.hssf.usermodel.HSSFRow; 8 import org.apache.poi.hssf.use

java poi 导出Excel文件

1,导包  poi-3.9-XXX.JAR 2, 创建一个实体对象 public class Student implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int id; private String name; private int age; private Date borth; public Student(int id, String name, i

Springboot使用POI实现导出Excel文件示例

Springboot使用POI实现导出Excel文件示例 前面讲述了使用POI导出Word文件和读取Excel文件,这两个例子都相对简单,接下来要讲述的使用POI导出Excel文件要复杂得多,内容也会比较长.创建表头信息表头信息用于自动生成表头结构及排序public class ExcelHeader implements Comparable<ExcelHeader>{/**  * excel的标题名称  */private String title;/**  * 每一个标题的顺序  */p

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

jsp(servlet)使用poi导出excel数据文件

网站通过Excel导出数据已经成为各种网站的一个基本功能,下面就详细介绍下如何使用poi.jar方式来导出excel文件.具体步骤如下: 1.创建一个网站,下面我创建一个叫test的网站,然后将poi的jar包放入lib文件夹.我这里是下载链接poi-2.5.1.jar. 结构目录如下: 2.然后我们可以创建一个用来访问的jsp界面(主要是提交到servlet,可有可无) 代码如下: <%@ page language="java" import="java.util.

POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)

说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel 一个sheet允许的最大行数是65536这时我们想到分sheet进行导出:但是这种情况也不能解决内存溢出的问题.毕竟数据还是一次性在内存中进行保存的.这时我们想是不是可以导出多个excel呢?下面我就尝试着按照导出多个excel 首先:我们要确定数据量有多大,然后确定一个excel导出多少条数据,这

Java POI导出Excel不弹框选择下载路径(下载文件不选择下载路径,默认) Chrome

在Chrome浏览器中,Java导出Excel文件时,浏览器弹出提示框,需要选择下载路径 在Chrome中的高级设置中,把“下载前询问每个文件的保存位置”去掉就解决了 DEEPLOVE(LC) 原文地址:https://www.cnblogs.com/ldl326308/p/10960755.html