像在桌面手动创建表格一样,做一个共用のExcel导出

【前言】
昔日龌龊不足夸,今朝放荡思无涯。
【思路】
我们在桌面上创建Excel的时候:

1、首先创建一个Excel也就是

        //声明工作薄
    HSSFWorkbook wb = new HSSFWorkbook();

2、接下来未页签sheet重命名,也就是

     //sheet页签部分
   HSSFSheet sheet = wb.createSheet("页签的名字");

3、规划一下有多少列,再起一个标题,也就是

    //合并标题
    sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(规划的列数)));

4、创建一个表头,也就是

         //创建表头
    row = sheet.createRow(1);

5、循环插入表格,也就是加一个for循环

  //第一层为循环创建行
        for (int i = 0; i < contentLst.size(); i++) {
            row = sheet.createRow(i+2);
            row.setHeight((short) 550);
            //第二层创建每行的单元格,并填内容
            for (int j = 0; j < contentLst.get(i).length; j++) {
                cell = row.createCell(j);
                cell.setCellValue(String.valueOf(contentLst.get(i)[j]));
                cell.setCellStyle(shstyle);
            }
        }

6、内容填完了,你不觉得有的字多有的字少,也就是列宽、行高有问题。怎么办呢?也就是

        //创建标题
    HSSFRow row = sheet.createRow(0);
    //设置标题行高
    row.setHeight((short) 行高数);

          //自定义列宽部分,你将每个列宽作为参数传过来具体每列多宽得自己测试了。
    if(liekuanLst != null && liekuanLst.size() > 0){
        for (int i = 0; i < liekuanLst.size(); i++) {
            sheet.setColumnWidth((short)i, liekuanLst.get(i));
        }
    }

7、内容填完了是不是好看,加点样式?也就是

            //居中字体等样式区域
    sheet.setHorizontallyCenter(true);
    //主题
    HSSFCellStyle titlefontshstyle = wb.createCellStyle();
    HSSFFont titlefont = wb.createFont();
    setcontentStyleTable(titlefontshstyle, titlefont, "黑体", 20, true, false);

public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) {
                titlefont.setFontHeightInPoints((short) i);
                titlefont.setFontName(string);
                shstyle.setWrapText(true);//自动换行
                shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
                if(i != 11 && is_bold){
                        titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                }
                if(is_border){
                        shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
                        shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
                        shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
                        shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
                }
                shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
                shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中
                shstyle.setFont(titlefont);
        }

8、样式也调了,是不是调一调打印,也就是

        //添加打印样式
    addPrintClassData(sheet, false);

            //打印的纸张样式
public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) {
    sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2
    sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2
    sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5
    sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5
    sheet.setHorizontallyCenter(true);
    sheet.setDefaultRowHeight((short) 400);//设置默认行高
    HSSFPrintSetup ps = sheet.getPrintSetup();
    ps.setLandscape(is_landscape);//true横向,false纵向
    ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置纸张A4
}

9、Excel创建完了,你怎么给我呢?那得看你要什么了,也就是

    ByteArrayOutputStream bos = null;
                try{
                        /*1转为输入流*/
                        bos = new ByteArrayOutputStream();
                        wb.write(bos);
                        byte[] bytes = bos.toByteArray();
                        InputStream in = new ByteArrayInputStream(bytes);
                        /*2直接写入Excel文档*/
                        /*String fileName = new Date().getTime()+"frozen_excel.xls";
                        FileOutputStream output = new FileOutputStream("/temp/"+fileName);
                        wb.write(output);
                        output.close();*/
                        bos.close();
                }catch (Exception e){
                        e.printStackTrace();
                }

【总结】
看看上面9步需要哪些参数,将参数封装做一个统一的公共方法,也就是

 /**
         * 导出Excel
         * @param title Excel标题
         * @param liekuanLst 设置的每个列宽
         * @param biaotouLst 表头内容
         * @param contentLst 单元格内容
         * @return 待定
         */
        public String export_Excel(String title, List<Integer> liekuanLst, List<String> biaotouLst, List<Object[]> contentLst){
                //声明工作薄
                HSSFWorkbook wb = new HSSFWorkbook();
                //sheet页签部分
                HSSFSheet sheet = wb.createSheet(title);
                //自定义列宽部分
                if(liekuanLst != null && liekuanLst.size() > 0){
                        for (int i = 0; i < liekuanLst.size(); i++) {
                                sheet.setColumnWidth((short)i, liekuanLst.get(i));
                        }
                }
                //居中字体等样式区域
                sheet.setHorizontallyCenter(true);
                //主题
                HSSFCellStyle titlefontshstyle = wb.createCellStyle();
                HSSFFont titlefont = wb.createFont();
                setcontentStyleTable(titlefontshstyle, titlefont, "黑体", 20, true, false);
                //表头样式
                HSSFCellStyle btfontshstyle = wb.createCellStyle();
                HSSFFont btfont =  wb.createFont();
                setcontentStyleTable(btfontshstyle, btfont, "宋体", 10, true, true);
                //内容样式
             HSSFCellStyle shstyle = wb.createCellStyle();
                HSSFFont contentfont =  wb.createFont();
                setcontentStyle(shstyle, contentfont, "宋体", 11);

                //创建标题
                HSSFRow row = sheet.createRow(0);
                //设置标题行高
                row.setHeight((short) 920);
                HSSFCell cell = row.createCell(0);
                cell.setCellValue(title);
                cell.setCellStyle(titlefontshstyle);
                for (int i = 1; i < liekuanLst.size(); i++) {
                        cell = row.createCell(i);
                        cell.setCellStyle(titlefontshstyle);
                }
                //合并标题
                sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(liekuanLst.size()-1)));

                //创建表头
                row = sheet.createRow(1);
                //行高
                row.setHeight((short) 550);
                if(biaotouLst != null && biaotouLst.size() > 0){
                        for (int i = 0; i < biaotouLst.size(); i++) {
                                cell = row.createCell(i);
                                cell.setCellValue(biaotouLst.get(i));
                                cell.setCellStyle(btfontshstyle);
                        }
                }

                if(contentLst != null && contentLst.size() > 0){
                        //循环插入表格内容
                        for (int i = 0; i < contentLst.size(); i++) {
                                //当前行
                                row = sheet.createRow(i+2);
                                row.setHeight((short) 550);
                                //每个单元格
                                for (int j = 0; j < contentLst.get(i).length; j++) {
                                        cell = row.createCell(j);
                                        cell.setCellValue(String.valueOf(contentLst.get(i)[j]));
                                        cell.setCellStyle(shstyle);
                                }
                        }
                }
                //添加打印样式
                addPrintClassData(sheet, false);
                /**
                 * 写入数据
                 */
                ByteArrayOutputStream bos = null;
                try{
                        /*1转为输入流*/
                        bos = new ByteArrayOutputStream();
                        wb.write(bos);
                        byte[] bytes = bos.toByteArray();
                        InputStream in = new ByteArrayInputStream(bytes);
                        /*2直接写入Excel文档*/
                        /*String fileName = new Date().getTime()+"frozen_excel.xls";
                        FileOutputStream output = new FileOutputStream("/temp/"+fileName);
                        wb.write(output);
                        output.close();*/
                        bos.close();
                }catch (Exception e){
                        e.printStackTrace();
                }
                return "";
        }
        //单元格样式
        public static void setcontentStyle(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i) {
                titlefont.setFontHeightInPoints((short) i);
                titlefont.setFontName(string);
                shstyle.setWrapText(true);//自动换行
                if(i != 11){
                        titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                }
                shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中
                shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
                shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
                shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
                shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
                shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
                shstyle.setFont(titlefont);
        }
        public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) {
                titlefont.setFontHeightInPoints((short) i);
                titlefont.setFontName(string);
                shstyle.setWrapText(true);//自动换行
                shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
                if(i != 11 && is_bold){
                        titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                }
                if(is_border){
                        shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
                        shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
                        shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
                        shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
                }
                shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
                shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中
                shstyle.setFont(titlefont);
        }
        //打印的纸张样式
        public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) {
                sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2
                sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2
                sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5
                sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5
                sheet.setHorizontallyCenter(true);
                sheet.setDefaultRowHeight((short) 400);//设置默认行高
                HSSFPrintSetup ps = sheet.getPrintSetup();
                ps.setLandscape(is_landscape);//true横向,false纵向
                ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置纸张A4
        }

【结束语】
还可以继续优化!

原文地址:https://blog.51cto.com/13479739/2472555

时间: 2024-11-09 06:57:35

像在桌面手动创建表格一样,做一个共用のExcel导出的相关文章

Android第一行代码学习笔记---手动创建活动

1.1 手动创建活动 活动是什么:活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动. @1.新建一个Android项目,项目名叫作ActivityTest,包名使用默认名com.example.activity.在图一Add an Activity to Mobile这一步我们勾选Add No Activity,因为我们要手动建立Activity. 图一图二 @2.右击com example activi

如何在桌面上创建程序文件夹让每个登录用户都能访问呢?

如何在桌面上创建程序文件夹让每个登录用户都能访问呢? ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk 工程师实战培训课程:https://edu.51cto.com/lecturer/733218.html轻松进外企:IT Helpdesk工程师实战自学之路:https://blog.51cto.com/lander/2413018更新时间:2019/8/

如何在Linux的桌面上创建快捷方式或启动器

如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个“桌面快捷方式”,以便于你在桌面只要点击一下快捷方式就可以启动它.虽然不少带有图形界面的程序会在安装时自动在桌面上创建快捷方式,还有一些图形界面程序或者命令行程序可能需要你手动创建快捷方式. 在这个教程里,我将告诉你如何在不同的Linux桌面上添加桌面快捷方式.(译注:其实除了作者所述的这些方法外,各种桌面上也还有更简便的方法,大家可以评论分享自己的经验) 一个桌面快捷方式是由内含该APP元信息(例如,app的名字,启动命令或者图标

如何手动创建oracle数据库

下面的实验室是如何不要通过DBCA创建ORACLE 数据库,而是通过ORACLE ONLINE HELP DOCUMENT进行手动的创建数据库的详细步骤: 1,编辑Oracle profile [[email protected] ~]# su - oracle [[email protected] ~]$ vi ./.bash_profile PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/u01/app/oracle export O

怎样手动创建oracle数据库

以下的实验室是怎样不要通过DBCA创建ORACLE 数据库,而是通过ORACLE ONLINE HELP DOCUMENT进行手动的创建数据库的具体步骤: 1,编辑Oracle profile [[email protected] ~]# su - oracle [[email protected] ~]$ vi ./.bash_profile PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/u01/app/oracle export O

通过手动创建统计信息优化sql查询性能案例

本质原因在于:SQL Server 统计信息只包含复合索引的第一个列的信息,而不包含复合索引数据组合的信息 来源于工作中的一个实际问题, 这里是组合列数据不均匀导致查询无法预估数据行数,从而导致无法选择合理的执行计划导致性能低下的情况 我这里把问题简单化,主要是为了说明问题 如下一张业务表,主要看两个“状态”字段,BusinessStatus1 和 BusinessStatus2 create table BusinessTable ( Id int identity(1,1), Col2 va

ubuntu下手动创建应用的快捷方式

ubuntu下手动创建应用的快捷方式 在使用ubuntu开发的时候总是难免要安装一些开发类 的软件, 那么来谈下ubuntu下几种软件的安装方式: 1.★★★★★ 通过命令安装的,如 apt-get,apt-repository,ppa等,这种没有任何问题,最方便最好用,稳定性也最好,只是需要提前知道某个软件的包名,不知道的话就没得玩,没法安装,比较蛋疼.虽然可以通过apt-cache search 命令搜索包名,但是还是要知道包名,而不是包显示的名字,蛋疼.软件中心有个应用可以下载下来,叫做"

手动创建oracle数据库_oracle11g

通过手动创建oracle数据库,可以了解oracle数据库的结构和数据库运行机制,对理解oracle数据库有帮助. 一.打开命令行工具,创建必要有相关目录 mkdir E:\app\Administrator\admin\sky mkdir E:\app\Administrator\admin\sky\adump mkdir E:\app\Administrator\admin\sky\dpdump mkdir E:\app\Administrator\admin\sky\pfile mkdir

Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案

在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache.Hadoop.hive.ql.exec.DDLTask. MetaException,看了一下错误之后,先是楞了一下,接着我就发出感慨,自从踏上编程这条不归路之后,就没有一天不是在找Bug的路上就是在处理Bug,给自己贴了个标签:找Bug就跟吃饭一样的男人.抒发心中的感慨之后,该干活还是的干活.