POI实现Excel导入导出

简介: 我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类。 一个excel表格: HSSFWorkbook wb = new HSSFWorkbook(); 一个工作表格(sheet): HSSFSheet sheet = wb.

我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类。

一个excel表格:

HSSFWorkbook wb = new HSSFWorkbook();

一个工作表格(sheet):

HSSFSheet sheet = wb.createSheet("测试表格");

一行(row):

HSSFRow row1 = sheet.createRow(0);

一个单元格(cell):

HSSFCell cell2 = row2.createCell((short)0)

单元格格式(cellstyle):

HSSFCellStyle style4 = wb.createCellStyle()

单元格内容格式()

HSSFDataFormat format= wb.createDataFormat();

 

1:首先创建一个po对象

 

package entity;

public class Student {
    private int no;
    private String name;
    private int age;
    private String grage;
    public Student(int no, String name, int age, String grage) {
        super();
        this.no = no;
        this.name = name;
        this.age = age;
        this.grage = grage;
    }
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    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 String getGrage() {
        return grage;
    }
    public void setGrage(String grage) {
        this.grage = grage;
    }
    
}

 

2实现导出的功能:

 1 package demo;
 2 
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.sql.SQLException;
 6 import java.util.ArrayList;
 7 import java.util.Date;
 8 import java.util.List;
 9 
10 import org.apache.poi.hssf.usermodel.HSSFCell;
11 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
12 import org.apache.poi.hssf.usermodel.HSSFDataFormat;
13 import org.apache.poi.hssf.usermodel.HSSFRow;
14 import org.apache.poi.hssf.usermodel.HSSFSheet;
15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
16 import org.apache.poi.hssf.util.Region;
17 import org.apache.poi.ss.usermodel.Font;
18 
19 import entity.Student;
20 
21 public class Export_demo {
22     public static void main(String[] args) {
23         export();
24     }
25     
26     public static void export(){
27         List<Student> studens=new ArrayList<Student>();
28         for (int i = 1; i <=20; i++) {
29             Student s=new Student(i, "a"+i, 20+i-20, "三年级");
30             studens.add(s);
31         }
32         
33         HSSFWorkbook wb = new HSSFWorkbook();//创建一个excel文件
34         HSSFSheet sheet=wb.createSheet("学生信息");//创建一个工作薄
35         sheet.setColumnWidth((short)3, 20* 256);    //---》设置单元格宽度,因为一个单元格宽度定了那么下面多有的单元格高度都确定了所以这个方法是sheet的  
36         sheet.setColumnWidth((short)4, 20* 256);    //--->第一个参数是指哪个单元格,第二个参数是单元格的宽度  
37         sheet.setDefaultRowHeight((short)300);    // ---->有得时候你想设置统一单元格的高度,就用这个方法
38         HSSFDataFormat format= wb.createDataFormat();   //--->单元格内容格式  
39         HSSFRow row1 = sheet.createRow(0);   //--->创建一行  
40           // 四个参数分别是:起始行,起始列,结束行,结束列 (单个单元格) 
41         sheet.addMergedRegion(new Region(0, (short) 0, 0, (short)5));//可以有合并的作用 
42         HSSFCell cell1 = row1.createCell((short)0);   //--->创建一个单元格  
43         cell1.setCellValue("学生信息总览");
44         
45        
46         sheet.addMergedRegion(new Region(1, (short) 0, 1, (short)0));
47         HSSFRow row2= sheet.createRow(1);   ////创建第二列 标题
48         HSSFCell fen = row2.createCell((short)0);   //--->创建一个单元格  
49         fen.setCellValue("编号/属性 ");
50         HSSFCell no = row2.createCell((short)1);   //--->创建一个单元格  
51         no.setCellValue("姓名 ");
52         HSSFCell age = row2.createCell((short)2);   //--->创建一个单元格  
53         age.setCellValue("年龄 ");
54         HSSFCell grage = row2.createCell((short)3);   //--->创建一个单元格  
55         grage.setCellValue("年级 ");
56         
57         for (int i = 0; i <studens .size(); i++) {
58              sheet.addMergedRegion(new Region(1+i+1, (short) 0, 1+i+1, (short)0));
59             HSSFRow rows= sheet.createRow(1+i+1);   ////创建第二列 标题
60             HSSFCell fens = rows.createCell((short)0);   //--->创建一个单元格  
61             fens.setCellValue(studens.get(i).getNo());
62             HSSFCell nos = rows.createCell((short)1);   //--->创建一个单元格  
63             nos.setCellValue(studens.get(i).getName());
64             HSSFCell ages = rows.createCell((short)2);   //--->创建一个单元格  
65             ages.setCellValue(studens.get(i).getAge());
66             HSSFCell grages = rows.createCell((short)3);   //--->创建一个单元格  
67             grages.setCellValue(studens.get(i).getGrage());
68         }
69         FileOutputStream fileOut = null;  
70         try{              
71             fileOut = new FileOutputStream("d:\\studens.xls");  
72             wb.write(fileOut);  
73             //fileOut.close();  
74             System.out.print("OK");  
75         }catch(Exception e){  
76             e.printStackTrace();  
77         }  
78         finally{  
79             if(fileOut != null){  
80                 try {  
81                     fileOut.close();  
82                 } catch (IOException e) {  
83                     // TODO Auto-generated catch block  
84                     e.printStackTrace();  
85                 }  
86             }  
87         }  
88     }
89 }

效果图:

 

 3实现导入的功能:

 1 package demo;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.InputStream;
 6 import java.text.SimpleDateFormat;
 7 import java.util.ArrayList;
 8 import java.util.Date;
 9 import java.util.List;
10 
11 import org.apache.poi.hssf.usermodel.HSSFCell;
12 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
13 import org.apache.poi.hssf.usermodel.HSSFRow;
14 import org.apache.poi.hssf.usermodel.HSSFSheet;
15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
16 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
17 
18 import entity.Student;
19 
20 public class Import_demo {
21     private static POIFSFileSystem fs;//poi文件流
22     private static HSSFWorkbook wb;//获得execl
23     private static HSSFRow row;//获得行
24     private static HSSFSheet sheet;//获得工作簿
25     
26     public static void main(String[] args) throws FileNotFoundException {
27         InputStream in= new FileInputStream("d:\\studens.xls");
28         imports(in);
29     }
30     
31     public static void imports(InputStream in ){
32         String str = "";
33         try {
34              fs = new POIFSFileSystem(in);
35              wb = new HSSFWorkbook(fs);
36              sheet=wb.getSheetAt(0);
37              //int rowfirst=sheet.getFirstRowNum();
38              int rowend=sheet.getLastRowNum();
39              for (int i = 2; i <=rowend; i++) {
40                 row=sheet.getRow(i);
41                 //System.out.println(row.get);
42                 int colNum = row.getPhysicalNumberOfCells();//一行总列数
43                  int j = 0;
44                     while (j < colNum) {
45                         str += getCellFormatValue(row.getCell((short) j)).trim() + "-";
46                         j++;
47                     }
48                     System.out.println(str);
49                     str="";
50             }
51         } catch (Exception e) {
52             // TODO: handle exception
53         }
54     }
55     
56     private static String getCellFormatValue(HSSFCell cell) {
57         String cellvalue = "";
58         if (cell != null) {
59             // 判断当前Cell的Type
60             switch (cell.getCellType()) {
61                 // 如果当前Cell的Type为NUMERIC
62                 case HSSFCell.CELL_TYPE_NUMERIC:
63                 case HSSFCell.CELL_TYPE_FORMULA: {
64                     // 判断当前的cell是否为Date
65                     if (HSSFDateUtil.isCellDateFormatted(cell)) {
66                         Date date = cell.getDateCellValue();
67                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
68                         cellvalue = sdf.format(date);
69                     }
70                     // 如果是纯数字
71                     else {
72                         // 取得当前Cell的数值
73                         cellvalue = String.valueOf(cell.getNumericCellValue());
74                     }
75                     break;
76                 }
77                 // 如果当前Cell的Type为STRIN
78                 case HSSFCell.CELL_TYPE_STRING:
79                     // 取得当前的Cell字符串
80                     cellvalue = cell.getRichStringCellValue().getString();
81                     break;
82                 // 默认的Cell值
83                 default:
84                     cellvalue = " ";
85             }
86         } else {
87             cellvalue = "";
88         }
89         return cellvalue;
90     }
91     
92 }

效果:

代码和jar宝下载路径

https://download.csdn.net/download/cengjianggh/10418815

 

---------------------------------------------------------------------------------------------------------------------更新分割线-------------------------------------------------------------------------------------------

2018年7月31日 14:54:00

实现导出poi数据到excel 在浏览器上弹出下载标签

  接受数据查询的参数,然后查询数据库得到list集合的po对象转换为excel然后输出给浏览器

@RequiresPermissions("/actLog/postActLogSel")
    @RequestMapping(value = "/actLog/excel")
    public @ResponseBody  void getexcel(DataGridModel dgm,HttpServletResponse response,HttpServletRequest request) throws Exception {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/x-download");
        String fileName = "埋点登录.xlsx";
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
        XSSFWorkbook wb=actLog.getExcel(dgm);
        try {
            OutputStream out = response.getOutputStream();
            wb.write(out);
            out.close();
            wb.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
        }
 1 if("post".equals(type)){
 2         List<BsActLog> log=actLog.getActPostcounts(map);
 3         wb = new XSSFWorkbook();
 4         XSSFSheet sheet = wb.createSheet("帖子埋点");
 5         sheet.setColumnWidth(0, 20 * 256);sheet.setColumnWidth(4, 20 * 256);sheet.setColumnWidth(8, 20 * 256);
 6         sheet.setColumnWidth(1, 20 * 256);sheet.setColumnWidth(5, 20 * 256);sheet.setColumnWidth(9, 20 * 256);
 7         sheet.setColumnWidth(2, 20 * 256);sheet.setColumnWidth(6, 20 * 256);sheet.setColumnWidth(10, 20 * 256);
 8         sheet.setColumnWidth(3, 20 * 256);sheet.setColumnWidth(7, 20 * 256);
 9         XSSFRow row = sheet.createRow(0);
10         XSSFCell cell = row.createCell(0);
11         cell=getStyle(wb, cell);//设置样式,可以不要
12         cell.setCellValue("日期 ");
13         XSSFCell cell2 = row.createCell(1);
14         cell2.setCellValue("标题 ");
15         cell2=getStyle(wb, cell2);
16         XSSFCell cell3 = row.createCell(2);
17         cell3.setCellValue("用户名 ");
18         cell3=getStyle(wb, cell3);
19         XSSFCell cell5 = row.createCell(3);
20         cell5.setCellValue("PV ");
21         cell5=getStyle(wb, cell5);
22         XSSFCell cell6 = row.createCell(4);
23         cell6.setCellValue("UV ");
24         cell6=getStyle(wb, cell6);
25         XSSFCell cell7 = row.createCell(5);
26         cell7.setCellValue("回复人数 ");
27         cell7=getStyle(wb, cell7);
28         XSSFCell cell8 = row.createCell(6);
29         cell8.setCellValue("回复次数 ");
30         cell8=getStyle(wb, cell8);
31         XSSFCell cell9 = row.createCell(7);
32         cell9.setCellValue("点赞数 ");
33         cell9=getStyle(wb, cell9);
34         XSSFCell cell10 = row.createCell(8);
35         cell10.setCellValue("收藏数 ");
36         cell10=getStyle(wb, cell10);
37         XSSFCell cell11 = row.createCell(9);
38         cell11.setCellValue("是否首页置顶 ");
39         cell11=getStyle(wb, cell11);
40         XSSFCell cell12 = row.createCell(10);
41         cell12.setCellValue("是否置顶 ");
42         cell12=getStyle(wb, cell12);
43         XSSFCell cell13 = row.createCell(11);
44         cell13.setCellValue("是否精华 ");
45         cell13=getStyle(wb, cell13);
46         int i=1;
47         for (BsActLog lo : log) {
48             XSSFRow rows = sheet.createRow(i);
49             XSSFCell cells = rows.createCell(0);
50             cells.setCellValue(lo.getDay());
51             cells=getStyle(wb, cells);
52             XSSFCell cells2 = rows.createCell(1);
53             cells2.setCellValue(lo.getTitle());
54             cells2=getStyle(wb, cells2);
55             XSSFCell cells3 = rows.createCell(2);
56             String name=filterEmoji(lo.getUsername());//对emoji表情过滤,可以不要
57             cells3.setCellValue(name);
58             cells3=getStyle(wb, cells3);
59             XSSFCell cells4 = rows.createCell(3);
60             cells4.setCellValue(lo.getPv());
61             cells4=getStyle(wb, cells4);
62             XSSFCell cells5 = rows.createCell(4);
63             cells5.setCellValue(lo.getUv());
64             cells5=getStyle(wb, cells5);
65             XSSFCell cells6 = rows.createCell(5);
66             cells6.setCellValue(lo.getReplyperson());
67             cells6=getStyle(wb, cells6);
68             XSSFCell cells7 = rows.createCell(6);
69             cells7.setCellValue(lo.getReplycount());
70             cells7=getStyle(wb, cells7);
71             XSSFCell cells8 = rows.createCell(7);
72             cells8.setCellValue(lo.getLikecount());
73             cells8=getStyle(wb, cells8);
74             XSSFCell cells9 = rows.createCell(8);
75             cells9.setCellValue(lo.getCollectcount());
76             cells9=getStyle(wb, cells9);
77             XSSFCell cells10 = rows.createCell(9);
78             cells10.setCellValue(lo.getIsmainpagetop());
79             cells10=getStyle(wb, cells10);
80             XSSFCell cells11 = rows.createCell(10);
81             cells11.setCellValue(lo.getIstop());
82             cells11=getStyle(wb, cells11);
83             XSSFCell cells12 = rows.createCell(11);
84             cells12.setCellValue(lo.getIsdigestpost());
85             cells12=getStyle(wb, cells12);
86             i+=1;
87         }
88     }

 

如果浏览器弹不出下载框,则把前台的请求改为get请求

window.open('地址?'参数);

 

 

过滤emoji表情的方法

 1 public static String filterEmoji(String source)//过滤emoji表情
 2 {
 3    if(source==null ||"".equals(source))
 4    {
 5        return "";
 6    }
 7     if (!containsEmoji(source))
 8     {
 9         return source; //如果不包含,直接返回
10     }
11     //到这里铁定包含
12     StringBuilder buf = null;
13     int len = source.length();
14     for (int i = 0; i < len; i++)
15     {
16         char codePoint = source.charAt(i);
17         if (!isEmojiCharacter(codePoint))
18         {
19             if (buf == null)
20             {
21                 buf = new StringBuilder();
22             }
23             buf.append(codePoint);
24         } else { } }
25     if (buf == null)
26     {
27         return source; //如果没有找到 emoji表情,则返回源字符串
28     }
29     else
30     {
31         if (buf.length() == len)
32         {
33             //这里的意义在于尽可能少的toString,因为会重新生成字符串
34             buf = null;
35             return source;
36         }
37         else
38         {
39             return buf.toString();
40         }
41     }
42 }
43 public static boolean containsEmoji(String source)
44 {
45     if (source==null ||"".equals(source))
46     {
47         return false;
48     }
49     int len = source.length();
50     for (int i = 0; i < len; i++)
51     {
52         char codePoint = source.charAt(i);
53         if (isEmojiCharacter(codePoint))
54         {
55             //do nothing,判断到了这里表明,确认有表情字符
56             return true;
57         }
58     }
59     return false;
60 }
61 public static boolean isEmojiCharacter(char codePoint)
62 {
63     return (codePoint >= 0x2600 && codePoint <= 0x27BF) // 杂项符号与符号字体
64            || codePoint == 0x303D
65            || codePoint == 0x2049
66            || codePoint == 0x203C
67            || (codePoint >= 0x2000 && codePoint <= 0x200F) //
68            || (codePoint >= 0x2028 && codePoint <= 0x202F) //
69            || codePoint == 0x205F //
70            || (codePoint >= 0x2065 && codePoint <= 0x206F) //
71                                                            /* 标点符号占用区域 */
72            || (codePoint >= 0x2100 && codePoint <= 0x214F) // 字母符号
73            || (codePoint >= 0x2300 && codePoint <= 0x23FF) // 各种技术符号
74            || (codePoint >= 0x2B00 && codePoint <= 0x2BFF) // 箭头A
75            || (codePoint >= 0x2900 && codePoint <= 0x297F) // 箭头B
76            || (codePoint >= 0x3200 && codePoint <= 0x32FF) // 中文符号
77            || (codePoint >= 0xD800 && codePoint <= 0xDFFF) // 高低位替代符保留区域
78            || (codePoint >= 0xE000 && codePoint <= 0xF8FF) // 私有保留区域
79            || (codePoint >= 0xFE00 && codePoint <= 0xFE0F) // 变异选择器
80                                                            //   || (codePoint >= U + 2600 && codePoint <= 0xFE0F)
81            || codePoint >= 0x10000; // Plane在第二平面以上的,char都不可以存,全部都转
82 }

 

欢迎大家一起说出自己的想法。
目录
相关文章
|
5月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
81 0
|
1月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
230 0
|
1月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
34 0
|
3月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
75 0
|
5月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
290 1
|
5月前
|
Java API Spring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
502 1
|
5月前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
1063 1
|
5月前
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
|
5月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
6月前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
923 0

热门文章

最新文章