poi导出excel并让excel的每列都显示知筛选功能

遗失蓝鲸 发布于 2015/12/30 09:41
阅读 4K+
收藏 0

各位大神好!由于客户要求,导出excel之后,每个列都要有筛选功能,而且是已经显示出来了,就是说不用客户自己通过  数据-》自动筛选  这样点了。我导出excel是用poi来做的,可我没有发现哪个方法或哪个类可以实现,求大礼指导。

导出后打开的效果如图:

加载中
0
Java_Coder
Java_Coder
http://www.cnblogs.com/xwgli/archive/2013/07/08/3178153.html   这个应该可以帮到你。。
0
Java_Coder
Java_Coder
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet HSSFSheet = wb.createSheet();
CellRangeAddress c = CellRangeAddress.valueOf("A1:B2");
HSSFSheet.setAutoFilter(c);



0
遗失蓝鲸
遗失蓝鲸

引用来自“Java_Coder”的评论

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet HSSFSheet = wb.createSheet();
CellRangeAddress c = CellRangeAddress.valueOf("A1:B2");
HSSFSheet.setAutoFilter(c);



大神,我这里根本就没有这个 
HSSFSheet.setAutoFilter(c); 这个方法 ,我这里用的是3.7版本的poi
0
遗失蓝鲸
遗失蓝鲸

引用来自“Java_Coder”的评论

http://www.cnblogs.com/xwgli/archive/2013/07/08/3178153.html   这个应该可以帮到你。。
按里面说,我找不到setAutoFilter 这个方法,我的poi用的是3.7版本的
chro008
chro008
升级以下jar包呗
0
Java_Coder
Java_Coder

好吧,帮你写好了。。。

JAR包:

poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar

代码:

public class TestPoiExcel {
    
    public static void main(String[] args) throws IOException {
        
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("sheet1");
        sheet.setDefaultColumnWidth(20); // 默认列宽

        HSSFFont font = wb.createFont();
        font.setFontName("黑体");
        font.setFontHeightInPoints((short) 13);// 设置字体大小
        font.setColor(HSSFColor.WHITE.index); //字体颜色

        HSSFCellStyle headStyle = wb.createCellStyle(); // 头部样式
        headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
        headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
        headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
        headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
        headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
        headStyle.setFillForegroundColor(HSSFColor.TEAL.index);// 设置背景色
        headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        headStyle.setFont(font);// 选择需要用到的字体格式

        HSSFCellStyle contentStyle = wb.createCellStyle(); // 内容样式
        contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
        contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
        contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
        contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框

        //表头
        HSSFRow row1 = sheet.createRow((short) 0);
        HSSFCell cell_1_0 = row1.createCell(0);
        cell_1_0.setCellValue("员工编号");
        cell_1_0.setCellStyle(headStyle);
        
        HSSFCell cell_1_1 = row1.createCell(1);
        cell_1_1.setCellValue("姓名");
        cell_1_1.setCellStyle(headStyle);
        
        HSSFCell cell_1_2 = row1.createCell(2);
        cell_1_2.setCellValue("绩效等级");
        cell_1_2.setCellStyle(headStyle);
        
        HSSFCell cell_1_3 = row1.createCell(3);
        cell_1_3.setCellValue("考核类型");
        cell_1_3.setCellStyle(headStyle);
        
        for(int i=1;i<=5;i++){
            
            HSSFRow row2 = sheet.createRow(i);
            HSSFCell cell_2_0 = row2.createCell(0);
            cell_2_0.setCellValue(String.valueOf((int)(Math.random()*100)));
            cell_2_0.setCellStyle(contentStyle);
            
            HSSFCell cell_2_1 = row2.createCell(1);
            cell_2_1.setCellValue("Test" + i);
            cell_2_1.setCellStyle(contentStyle);
            
            HSSFCell cell_2_2 = row2.createCell(2);
            cell_2_2.setCellValue("B");
            cell_2_2.setCellStyle(contentStyle);

            HSSFCell cell_2_3 = row2.createCell(3);
            cell_2_3.setCellValue("月季考核");
            cell_2_3.setCellStyle(contentStyle);
            
        }
        
        CellRangeAddress c = CellRangeAddress.valueOf("B1");
        sheet.setAutoFilter(c);
       
        FileOutputStream fileOut = new FileOutputStream("d:/mysheet.xls"); //导出路径
        wb.write(fileOut);
        fileOut.close();
        
    }

}



运行:

按姓名降序:

0
s
smile_dp
POI中对Word处理,读取不到书签。如果要处理书签的话,就只能使用Jacob,但是使用Jacob的话,要求服务器端必须安装微软的Office软件,这样做有两个致命的地方:1. 服务器如果是Linux的话,肯定不能使用;2. Jacob使用的是Office的自动化技术,很容易在服务器上产生Office的死进程,死锁服务器端的内存资源,直到内存耗尽,宕机重启。
POI的代码非常复杂。
推荐楼主使用PageOffice产品,导入导出word,excel都很方便,代码非常少。PageOffice还可以在线编辑保存动态填充word,excel文档呢。
返回顶部
顶部