精华内容
下载资源
问答
  • POI导出Excel设置单元格格式

    万次阅读 2018-12-17 21:46:10
    使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = template//文件输入流 XSSFWorkbook wb = new ...

    使用Apache的POI相关API导出Excel设置单元格格式

    栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻

    准备工作

    InputStream = template//文件输入流
    XSSFWorkbook wb = new XSSFWorkbook(template);
    Sheet sheet = wb.getSheetAt(0);
    

    设置单元格格式

    XSSFCellStyle cellStyle = wb.createCellStyle();//初始化单元格格式对象
    cellStyle.setAlignment(CellStyle.ALIGN_GENERAL);//设置水平对齐方式,有多种对齐方式,如果你稍微了解一点英文也能知道:Alignment(水平)、ALIGN_LEFT(左对齐)
    cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//设置垂直对齐方式,Vertical(垂直)
    XSSFDataFormat dataFormat = wb.createDataFormat();//创建格式化对象
    cellStyle.setDataFormat(dataFormat.getFormat("#,##0.00"));//设置数值类型格式为保留两位小数
    cellStyle.setFillBackgroundColor(IndexedColors.PINK.getIndex());;//设置单元格背景色为骚粉
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//改用指定模式填充单元格颜色(主要用于使你设置的颜色生效以及生效方式)
    cellStyle.setWrapText(true);//开启自动换行
    Row excelRow = sheet.createRow(0);//创建单元行,索引从0开始
    excelRow.setHeightInPoints(30);//设置行高
    sheet.setColumnWidth(i, 256 * 15);//设置某列的列宽,列号为“i”
    Cell cell = excelRow.createCell(0);//创建单元格,索引从0开始
    cell.setCellStyle(cellStyle);// 设置单元格格式
    

    创建各种类型单元格

            // 创建数字类型的单元格
            Cell cell = row.createCell((short)0);
            cell.setCellValue(1);
            row.createCell(1).setCellValue(1.2);
            //创建单元格并接设置值为简单字符串
            row.createCell(2).setCellValue("This is a string cell");
            //创建单元格并接设置值为富文本
            RichTextString str = creationHelper.createRichTextString("Apache");
            Font font = wb.createFont();
            font.setItalic(true);
            font.setUnderline(Font.U_SINGLE);
            str.applyFont(font);
            row.createCell(3).setCellValue(str);
    
            //创建boolean类型的单元格
            row.createCell(4).setCellValue(true);
            //创建单元格,当前单元的值是通过公式得到的 formula
            row.createCell(5).setCellFormula("SUM(A1:B1)");
            //创建日期类型的单元格并接进行格式化
            CellStyle style = wb.createCellStyle();
            style.setDataFormat(creationHelper.createDataFormat().getFormat("m/d/yy h:mm"));
            cell = row.createCell(6);
            cell.setCellValue(new Date());
            cell.setCellStyle(style);
            //创建超链接类型的单元格
            cell.setCellFormula("HYPERLINK(\"http://baidu.com\",\"baidu\")");
    

    创建单元格注释

    CreationHelper factory = wb.getCreationHelper(); 
    Cell cell = sheet.createRow(1).createCell(1);//创建第二行第二列的单元格
    Drawing drawing = sheet.createDrawingPatriarch();  //创建顶层DrawingPatriarch,用于添加图形或图表(通常会覆盖原有效果)
    ClientAnchor anchor = factory.createClientAnchor();  //创建ClientAnchor,使用此对象将工程图对象放置在工作表中
    Comment comment = drawing.createCellComment(anchor);  //创建注释
    RichTextString text = creationHelper.createRichTextString("flydoging's demo");
    Font font = wb.createFont();  //创建字体用于设置注释字体格式
    font.setFontName("Arial");  
    font.setFontHeightInPoints((short)14);  
    font.setBoldweight(Font.BOLDWEIGHT_BOLD);  
    font.setColor(IndexedColors.RED.getIndex());  //设置红色字体
    text.applyFont(font); 
    comment.setString(text);//设置注释体
    comment.setAuthor("flydoging");//设置作者
    cell.setCellComment(comment); 
    

    CreationHelper是个啥,官方文档
    An object that handles instantiating concrete classes of the various instances one needs for HSSF and XSSF. Works around a limitation in Java where we cannot have static methods on interfaces or abstract classes. This allows you to get the appropriate class for a given interface, without you having to worry about if you’re dealing with HSSF or XSSF.
    英文不太好,大概意思是说:你可以使用CreationHelper的创建各种用于HSSF、XSSF实例化的对象,通过它的API也可以发现:创建富文本、超链接等等。其实你通过上边wb创建的是HSSFCreationHelper, SXSSFCreationHelper, XSSFCreationHelper三个其中之一,具体是哪个取决于你使用的WorkBook。

    获取文档的嵌入文件

        public static void main(String[] args) throws Exception {
            XSSFWorkbook workbook = new XSSFWorkbook(args[0]);
            for (PackagePart pPart : workbook.getAllEmbedds()) {
                String contentType = pPart.getContentType();
                // Excel Workbook - either binary or OpenXML
                if (contentType.equals("application/vnd.ms-excel")) {//offic 2003 excel
                    HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(pPart.getInputStream());
                }
                // Excel Workbook - OpenXML file format
                else if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) {//offic 2007 excel
                    XSSFWorkbook embeddedWorkbook = new XSSFWorkbook(pPart.getInputStream());
                }
                // Word Document - binary (OLE2CDF) file format
                else if (contentType.equals("application/msword")) {//offic 2003 word
                    HWPFDocument document = new HWPFDocument(pPart.getInputStream());
                }
                // Word Document - OpenXML file format
                else if (contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) {
                    XWPFDocument document = new XWPFDocument(pPart.getInputStream());
                }
                // PowerPoint Document - binary file format
                else if (contentType.equals("application/vnd.ms-powerpoint")) {
                    HSLFSlideShow slideShow = new HSLFSlideShow(pPart.getInputStream());
                }
                // PowerPoint Document - OpenXML file format
                else if (contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.presentation")) {
                    OPCPackage docPackage = OPCPackage.open(pPart.getInputStream());
                    XSLFSlideShow slideShow = new XSLFSlideShow(docPackage);
                }
                // Any other type of embedded object.
                else {
                    System.out.println("Unknown Embedded Document: " + contentType);
                    InputStream inputStream = pPart.getInputStream();
                }
            }
        }
    
    展开全文
  • 导出excel-设置样式

    2017-08-09 13:35:49
    jxl-导出excel-设置样式
  • apache POI 导出Excel 设置打印 打印区域 打印方向 缩放比例 水平居中
  • poi导出excel设置样式

    千次阅读 2019-05-30 16:12:04
    //设置单元格格式居中 HSSFCellStyle titleStyle = workbook.createCellStyle(); //标题 HSSFCellStyle headStyle = workbook.createCellStyle(); //表头 HSSFCellStyle cellStyle = workbook.createCellStyle()...

    转载自:https://blog.csdn.net/qq_15260315/article/details/82620032

     

    一、效果如下

    二、后台代码        

    /**
             *
             * @Date 2018年9月11日 下午3:53:26
             * @Fcunction exportExcel
             * @param sheetName
             * @param value_columns1
             * @param value_columns2
             * @param value_columns3
             * @param list
             * @return HSSFWorkbook
             *
             */
            public static HSSFWorkbook exportExcel(String sheetName, String[] value_columns1,String[] value_columns2,String[] value_columns3, List<List<String>> list,String name){
                //创建一个Excel文件
                HSSFWorkbook workbook = new HSSFWorkbook();
                //创建一个工作表
                HSSFSheet sheet = workbook.createSheet(sheetName);
                //设置宽度
                for (int i = 0; i < value_columns1.length; i++) {
                    sheet.setColumnWidth(i, 3000);
                }
                //设置单元格格式居中
                HSSFCellStyle titleStyle = workbook.createCellStyle(); //标题
                HSSFCellStyle headStyle = workbook.createCellStyle(); //表头
                HSSFCellStyle cellStyle = workbook.createCellStyle(); //表格内容
                HSSFCellStyle twoStyle = workbook.createCellStyle(); //第二行不居中显示
                HSSFCellStyle remarkStyle = workbook.createCellStyle(); //备注,第二行不居中显示
                HSSFCellStyle recordStyle = workbook.createCellStyle(); //记录内容
                HSSFCellStyle recordHumanLeftStyle = workbook.createCellStyle(); //记录人左边
                HSSFCellStyle recordHumanRightStyle = workbook.createCellStyle(); //记录人右边
                //设置单元格样式
                HSSFFont titleFont = workbook.createFont(); //标题字体
                titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
                titleFont.setFontHeightInPoints((short)16); //字号
                titleStyle.setFont(titleFont);
                titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         
                HSSFFont headFont = workbook.createFont(); //表头字体
                headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
                headFont.setFontHeightInPoints((short)16); //字号
                headStyle.setFont(headFont);
                headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中
                headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //垂直居中
                headStyle.setWrapText(true); //自动换行
         
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中
                cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //垂直居中
         
                remarkStyle.setWrapText(true); //自动换行
                remarkStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //垂直居中
                remarkStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                remarkStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                remarkStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                remarkStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                remarkStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
         
                twoStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
         
                recordStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP); //垂直居上
                recordStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                recordStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                recordStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                recordStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
         
                recordHumanLeftStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                recordHumanLeftStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
         
                recordHumanRightStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                recordHumanRightStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                recordHumanRightStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
         
                //添加表头行
                HSSFRow hssfRow = sheet.createRow(0);
                //第一行标题
                HSSFCell titleCell = hssfRow.createCell(0);
                titleCell.setCellValue(sheetName);
                titleCell.setCellStyle(titleStyle);
                //合并第一行所有列
                sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, value_columns1.length-1));
                //第二行
                hssfRow = sheet.createRow(1);
                for (int i = 0; i < value_columns1.length; i++) {
                    HSSFCell twoCell = hssfRow.createCell(i);
                    if(i==0){
                        twoCell.setCellValue("日期:"+new SimpleDateFormat("yyyy年M月d日").format(new Date()));
                        twoCell.setCellStyle(twoStyle);
                    }else if(i==value_columns1.length-3){
                        twoCell.setCellValue("交班领导:"+name);
                        twoCell.setCellStyle(twoStyle);
                    }
                }
                //合并第二行
                sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, value_columns1.length-4));
                sheet.addMergedRegion(new CellRangeAddress(1, 1, value_columns1.length-3, value_columns1.length-1));
                //第三行开始表格
                hssfRow = sheet.createRow(2);
                for (int i = 0; i < value_columns1.length; i++) {
                    //添加表头内容
                    HSSFCell headCell = hssfRow.createCell(i);
                    headCell.setCellValue(value_columns1[i]);
                    headCell.setCellStyle(cellStyle);
                }
                hssfRow = sheet.createRow(3);
                for (int i = 0; i < value_columns2.length; i++) {
                    //添加表头内容
                    HSSFCell headCell = hssfRow.createCell(i);
                    headCell.setCellValue(value_columns2[i]);
                    headCell.setCellStyle(cellStyle);
                }
                hssfRow = sheet.createRow(4);
                for (int i = 0; i < value_columns3.length; i++) {
                    //添加表头内容
                    HSSFCell headCell = hssfRow.createCell(i);
                    headCell.setCellValue(value_columns3[i]);
                    headCell.setCellStyle(cellStyle);
                }
                //合并表头(3、4、5行)
                sheet.addMergedRegion(new CellRangeAddress(2, 4, 0, 0));
                sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 2));
                sheet.addMergedRegion(new CellRangeAddress(2, 3, 3, 4));
                sheet.addMergedRegion(new CellRangeAddress(2, 2, 5, 8));
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 6));
                sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 8));
                sheet.addMergedRegion(new CellRangeAddress(2, 3, 9, 10));
                //把数据添加到excel
                for (int i = 0; i < list.size(); i++) {
                    hssfRow = sheet.createRow(i + 5);
                    for (int j = 0; j < list.get(i).size(); j++) {
                        //创建单元格,并设置值
                        HSSFCell cell = hssfRow.createCell(j);
                        cell.setCellValue(list.get(i).get(j));
                        if(i==list.size()-1&&j!=0){
                            cell.setCellStyle(remarkStyle);
                        }else {
                            cell.setCellStyle(cellStyle);
                        }
                    }
                }
                for (int i = 5+list.size(); i < 5+list.size()+2; i++) {
                    hssfRow = sheet.createRow(i);
                    for (int j = 0; j < value_columns1.length; j++) {
                        HSSFCell cell = hssfRow.createCell(j);
                        cell.setCellValue("");
                        cell.setCellStyle(remarkStyle);
                    }
                }
                sheet.addMergedRegion(new CellRangeAddress(4+list.size(), 4+list.size()+2, 0, 0));
                sheet.addMergedRegion(new CellRangeAddress(4+list.size(), 4+list.size()+2, 1, 10));
                //会议记录
                for (int i = 7+list.size(); i < 7+list.size()+5; i++) {
                    hssfRow = sheet.createRow(i);
                    for (int j = 0; j < value_columns1.length; j++) {
                        HSSFCell cell = hssfRow.createCell(j);
                        if(i == 7+list.size()&&j==0) {
                            cell.setCellValue("会议记录:");
                        }else {
                            cell.setCellValue("");
                        }
                        cell.setCellStyle(recordStyle);
                    }
                }
                sheet.addMergedRegion(new CellRangeAddress(7+list.size(), 7+list.size()+4, 0, 10));
                //记录人
                hssfRow = sheet.createRow(7+list.size()+5);
                for (int j = 0; j < value_columns1.length; j++) {
                    HSSFCell cell = hssfRow.createCell(j);
                    if(j>=value_columns1.length-3) {
                        cell.setCellValue("记录人:");
                        cell.setCellStyle(recordHumanRightStyle);
                    }else {
                        cell.setCellValue("");
                        cell.setCellStyle(recordHumanLeftStyle);
                    }
                }
                sheet.addMergedRegion(new CellRangeAddress(7+list.size()+5, 7+list.size()+5, 0, value_columns1.length-4));
                sheet.addMergedRegion(new CellRangeAddress(7+list.size()+5, 7+list.size()+5, value_columns1.length-3, value_columns1.length-1));
                return workbook;
            }

    setColumnWidth方法设置具体某一列的宽度(第一个参数是第几列从0开始,第二个参数是宽度值)

        HSSFSheet sheet = workbook.createSheet(date+sheetName);
        sheet.setColumnWidth((short) 6, (short) 1600);

    设置不同字体,如下,titleStyle是加粗的,默认字号大小为10;

        HSSFCellStyle titleStyle = workbook.createCellStyle();
        //设置字体
        HSSFFont font =workbook.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
        font.setFontHeightInPoints((short)16); //字号
        titleStyle.setFont(font);
        HSSFCellStyle cellStyle = workbook.createCellStyle();

    设置自动换行,setWrapText(true);内容里加\r\n,在对应地方自动换行;不加\r\n按照单元格宽度自动换行;不调用setWrapText(true)方法,只在内容加\r\n,只有点开单元格时才换行

        remarkStyle.setWrapText(true); //自动换行
        cell.setCellValue("hello\r\n word");

    ---------------------
    作者:Z丶royAl
    来源:CSDN
    原文:https://blog.csdn.net/qq_15260315/article/details/82620032
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格
  • 使用poi导出excel支持xls、xlsx格式大数据导出java工具类,支持同一个单元格不同文本格式。找了好久,加上自己修改后,调试通过,发布出来分享,(调整student类位置)包含所需jar包,工具类,使用示例
  • springboot + poi导出指定格式Excel模板。 springboot+poi导出指定格式Excel模板,完整项目,导出即用。 poi导出Excel
  • Java利用poi导出excel表格
  • java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式
  • java poi导出excel

    2018-04-09 09:51:15
    里面是完整的java程序,导入可执行,根据数据生成excel文件,http://localhost:8080/poi/export
  • Poi导出Excel工具类

    2019-01-07 13:12:49
    Poi导出Excel工具类 支持大数据量 多sheet页方式 已经封装好,直接拿来调用里面的方法传入参数就行 很简单
  • springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
  • 背 景  最近做的一个ITFIN的项目中,后台需要用POI实现导出功能,导出的数据中有文本格式,也有货币格式,所以为了方便在将来导出的表格中做计算,存放货币的单元格... 通过poi导出excel的过程大致是这样的: ...

    背 景

      最近做的一个ITFIN的项目中,后台需要用POI实现导出功能,导出的数据中有文本格式,也有货币格式,所以为了方便在将来导出的表格中做计算,存放货币的单元格需要设置为数值类型。

      导出的Excel的单元格都是文本格式(单元格左上角有个小三角):

      费了不少功夫,终于把“小三角”去掉了,这里总结并分享一下问题的解决方法。 

      通过poi导出excel的过程大致是这样的:

         规定单元格的格式 
            ↓ 
          创建单元格 
            ↓ 
         设置单元格的格式 
            ↓ 
         设置数据的格式 
            ↓ 
        把数据存放到单元格中 
            ↓ 
          通过IO流输出


    背景POI导出Excel时设置单元格类型为数值类型

        /**
         * 导出Excel
         * 
         *@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
         * */
        private void createContentRows(ExcelParam outPutParam) {
            HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
            // 遍历集合数据,产生数据行
            for (int i = 0; i < outPutParam.getContent().size(); i++) {
                int rowIndex = i + 2;
                HSSFRow contentRow = sheet.createRow(rowIndex);
                Map<String, Object> rowDate = outPutParam.getContent().get(i);
                //遍历列
                for (int j = 0; j < outPutParam.getTitleList().size(); j++) {       
                    Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
                    String headerName = headTitle.getName();//获取第j列列标识
                    Object data = rowDate.get(headerName);//获取第i行第j列所放数据
                    HSSFCellStyle contextstyle =workbook.createCellStyle();
                    HSSFCell contentCell = contentRow.createCell(j);                
                    Boolean isNum = false;//data是否为数值型
                    Boolean isInteger=false;//data是否为整数
                    Boolean isPercent=false;//data是否为百分数
                    if (data != null || "".equals(data)) {
                        //判断data是否为数值型
                        isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
                        //判断data是否为整数(小数部分是否为0)
                        isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
                        //判断data是否为百分数(是否包含“%”)
                        isPercent=data.toString().contains("%");
                    }
    
                    //如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
                    if (isNum && !isPercent) {
                        HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
                        if (isInteger) {
                            contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
                        }else{
                            contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
                        }                   
                        // 设置单元格格式
                        contentCell.setCellStyle(contextstyle);
                        // 设置单元格内容为double类型
                        contentCell.setCellValue(Double.parseDouble(data.toString()));
                    } else {
                        contentCell.setCellStyle(contextstyle);
                        // 设置单元格内容为字符型
                        contentCell.setCellValue(data.toString());
                    }
                }
            }
        }

    如上,有两个比较重要的点: 
      1、先用正则表达式判断数据是否为数值型,如果为数值型,则设置单元格格式为整数或者小数; 
      2、然后往单元格中存放数据的时候要设置数据的格式为double类型,如果查看poi的源码HSSFCell.java会发现设置数据的方法如下,所以用setCellValue(double)方法即可。
     

    优化

      到了这里,您可能以为万事大吉啊了,其实上面的代码有个陷阱,如果不经过大数据量的测试是发觉不出来的哦~~

      如果数据量大的话,系统可能会报错“The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook”,原因是style创建的次数太多了,解决这个问题的方法很简单,在循环体外面创建单元格格式contextstyle(即把它当成一个“全局”变量),不要在循环内部创建。
     

        /**
         * 导出Excel-胡玉洋-2015年11月11日
         * 
         *@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
         * */
        private void createContentRows(ExcelParam outPutParam) {
            HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
            HSSFCellStyle contextstyle =workbook.createCellStyle();
            // 遍历集合数据,产生数据行
            for (int i = 0; i < outPutParam.getContent().size(); i++) {
                int rowIndex = i + 2;
                HSSFRow contentRow = sheet.createRow(rowIndex);
                Map<String, Object> rowDate = outPutParam.getContent().get(i);
                //遍历列
                for (int j = 0; j < outPutParam.getTitleList().size(); j++) {       
                    Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
                    String headerName = headTitle.getName();//获取第j列列标识
                    Object data = rowDate.get(headerName);//获取第i行第j列所放数据
                    HSSFCell contentCell = contentRow.createCell(j);                
                    Boolean isNum = false;//data是否为数值型
                    Boolean isInteger=false;//data是否为整数
                    Boolean isPercent=false;//data是否为百分数
                    if (data != null || "".equals(data)) {
                        //判断data是否为数值型
                        isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
                        //判断data是否为整数(小数部分是否为0)
                        isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
                        //判断data是否为百分数(是否包含“%”)
                        isPercent=data.toString().contains("%");
                    }
    
                    //如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
                    if (isNum && !isPercent) {
                        HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
                        if (isInteger) {
                            contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
                        }else{
                            contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
                        }                   
                        // 设置单元格格式
                        contentCell.setCellStyle(contextstyle);
                        // 设置单元格内容为double类型
                        contentCell.setCellValue(Double.parseDouble(data.toString()));
                    } else {
                        contentCell.setCellStyle(contextstyle);
                        // 设置单元格内容为字符型
                        contentCell.setCellValue(data.toString());
                    }
                }
            }
        }

    最后导出的正确格式:

    --------------------- 
    作者:dannyhoo6688 
    来源:CSDN 
    原文:https://blog.csdn.net/huyuyang6688/article/details/49786227 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Java利用poi导出excel表格.zipJava利用poi导出excel表格.zip
  • 从项目中导出的模板文件,在进行填值上传的时候,发现导出文件的列值格式有点问题,原本的 id 值被自动转换成了科学计数法格式。 解决办法 //第一步创建workbook HSSFWorkbook wb = new HSSFWorkbook(); //第二步...

    文章目录

    原因

    从项目中导出的模板文件,在进行填值上传的时候,发现导出文件的列值格式有点问题,原本的 id 值被自动转换成了科学计数法格式
    在这里插入图片描述

    解决办法

    //第一步创建workbook
    HSSFWorkbook wb = new HSSFWorkbook();
    //第二步创建sheet
    HSSFSheet sheet = wb.createSheet("Sheet1");
    //第三步创建行row:添加表头0行
    HSSFRow row = sheet.createRow(0);
    // 设置样式
    HSSFCellStyle style = wb.createCellStyle();
    HSSFDataFormat format = wb.createDataFormat();
    style.setDataFormat(format.getFormat("@"));
    // 这里设置6列,7列为文本格式(其实下标为0)
    // 设置单元格格式为"文本"
    sheet.setDefaultColumnStyle(6, style);
    sheet.setDefaultColumnStyle(7, style);
    

    查看一下效果:
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • apache poi 导出excel、word,替换word内容,导出word-文本、图片、表格
  • poi导出excel日期格式问题

    千次阅读 2019-10-16 14:27:31
    POI导出Excel的时候有时需要日期格式,在筛选时是这样的 private XSSFWorkbook wb = null; String dateFormat = "yyyy-MM-dd";//或者"yyyy/MM/dd"格式,"yyyy/M/d"这样的格式不会自动补0 public void setCell(int...
  • 利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...
  • 最近做项目遇到的坑,百度了半天导出都为货币类型、自定义类型和常规类型,,,最后终于解决,在此记录一下 ... * 设置Excel单元格为数值类型便于公式运算 * * @param workbook * @param contextstyle
  • Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)
  • 主要介绍了POI通用导出Excel(.xls,.xlsx)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 1、字符串cell.setCellValue(new HSSFRichTextString("hello world");2、整数cell.setCellValue(10);HSSFCellStyle cellStyle = wwb.createCellStyle();cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0...
  • 主要介绍了SpringBoot整合POI导出通用Excel的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 详解JAVA_POI导出EXCEL报表的操作(包括各种格式及样式的实现)
  • poi导出excel2007

    热门讨论 2014-01-17 10:27:32
    利用poi导出excel2007的时候出现内存溢出,当数据量过大,这种情况就更不容易控制了,这个文档就是解决这类问题,我就是用的这个,数据二十万都没溢出过,希望对大家有帮助。
  • POI导出excel日期格式

    千次阅读 2018-03-23 14:47:18
    参考帖子:【1】http://www.ithao123.cn/content-2028409.html【2】http://javacrazyer.iteye.com/blog/894850再读本篇文章之前,请先看我的前一篇文章,前一篇文章中有重点讲到POI设置EXCEL单元格格式为文本格式,...
  • PS:自行练习poi实现导出Excel(简单样式)数据,由于业务(…)需要,直接在controller层实现; ok 进入正题! ① 引入POI依赖; org.apache.poi poi 3.6 ② 直接写接口,调用service层; @RequestMapping(value ...
  • poi 导出excel实例 下载

    2017-08-30 14:16:57
    poi 导出excel实例 下载 按照步骤去做 简单实例 技术牛人可忽略
  • POI导出Excel设置公式、数字单元格格式化为文本1.poi导出excel设置公式2.数字单元格格式化为文本 1.poi导出excel设置公式 代码如下(示例): cell.setCellType(CellType.FORMULA); cell.setCellFormula("F4*G4"); ...
  • poi导出复杂excel

    2018-11-21 17:48:53
    根据excel模板,拼接出复杂表头(合并行、和并列)的excel,并且能够导出。亲测可以直接运行,内含jar包。如有问题,可私信csdn

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,876
精华内容 11,550
关键字:

poi导出excel格式设置