POI生成EXCEL文件(字体、样式、单元格合并、计算公式)

创建一个封装类:

  1 package com.jason.excel;
  2
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6
  7 import org.apache.poi.hssf.usermodel.HSSFCell;
  8 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  9 import org.apache.poi.hssf.usermodel.HSSFFont;
 10 import org.apache.poi.hssf.usermodel.HSSFRow;
 11 import org.apache.poi.hssf.usermodel.HSSFSheet;
 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 13 import org.apache.poi.ss.usermodel.Cell;
 14 import org.apache.poi.ss.usermodel.CellValue;
 15 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 16 import org.apache.poi.ss.util.CellRangeAddress;
 17
 18
 19 /**
 20  * 生成可以合并的单元格的Excel
 21  * @function
 22  * @author 小风微凉
 23  * @time  2018-8-9 下午8:02:30
 24  */
 25 public class CreateExcelUtil {
 26
 27     /**
 28      * 生成字体(HSSFFont)
 29      * @param workBook  excel对象(必输项)
 30      * @param fontName  字体名称(选填项,可直接null默认处理)
 31      * @param fontSize  字体大小(选填项,可直接-1,默认处理)
 32      * @param fontColor 字体颜色(选填项,可直接-1,默认处理)
 33      * @return
 34      */
 35     public static HSSFFont getFont(HSSFWorkbook workBook,String fontName,int fontSize,int fontColor){
 36         HSSFFont font=workBook.createFont();
 37         if(fontName==null){
 38             font.setFontName("宋体");
 39         }else{
 40             font.setFontName(fontName);
 41         }
 42         if(fontSize<=0){
 43             font.setFontHeightInPoints((short) 14);// 设置字体大小
 44         }else{
 45             font.setFontHeightInPoints((short) fontSize);// 设置字体大小
 46         }
 47         if(fontColor>0){
 48             font.setColor((short) fontColor);
 49         }
 50         return font;
 51     }
 52     /**
 53      * 获取样式(HSSFCellStyle)
 54      * @param workBook excel对象(必输项)
 55      * @param lfc       样式对齐类型,默认null居中,lfc="left"   lfc="right"  lfc="center"
 56      * @return
 57      */
 58     public static HSSFCellStyle getStyle(HSSFWorkbook workBook,HSSFFont font,String lfc){
 59         HSSFCellStyle style=workBook.createCellStyle();
 60         //默认上下居中
 61         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
 62         if(lfc==null || "center".equals(lfc)){
 63             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//字体居中
 64         }else if("left".equals(lfc)){
 65             style.setAlignment(HSSFCellStyle.ALIGN_LEFT);//字体居左
 66         }else if("right".equals(lfc)){
 67             style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);//字体居右
 68         }else{
 69             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//字体居中
 70         }
 71         if(font!=null){
 72             style.setFont(font);
 73         }
 74         return style;
 75     }
 76     /**
 77      * 合并行,合并列处理
 78      * @param sheet 当前sheet对象
 79      * @param fromRowIndex  从第*行开始(起始索引值为0)
 80      * @param toRowIndex    到第*行结束
 81      * @param fromColIndex  从第*列开始(起始索引值为0)
 82      * @param toColIndex    到第*列结束
 83      * @see 举例:setMergeArea(sheet,0,0,0,1):合并sheet下的第一行,前2列
 84      */
 85     public static void setMergeArea(HSSFSheet sheet,int fromRowIndex,int toRowIndex,int fromColIndex,int toColIndex){
 86         sheet.addMergedRegion(new CellRangeAddress(fromRowIndex,toRowIndex,fromColIndex,toColIndex));
 87     }
 88
 89     /**
 90      * 生成指定行的单元格
 91      * @param row    指定行对象
 92      * @param cellIndex   单元格在所在行的列索引值
 93      * @param style  单元格样式对象
 94      * @param info   单元格内的信息
 95      * @return
 96      */
 97     public static HSSFCell createCell(HSSFRow row,int cellIndex,HSSFCellStyle style,String info){
 98         HSSFCell cell=row.createCell(cellIndex);
 99         if(style!=null){
100             cell.setCellStyle(style);
101         }
102         if(!"".equals(info) && info!=null){
103             cell.setCellValue(info);
104         }
105         return cell;
106     }
107     /**
108      * 获取默认sheet对象
109      * @param workBook  excel对象
110      * @param defaultColWidth  列宽(字符个数宽度)
111      * @return
112      */
113     public static HSSFSheet getDefaultSheet(HSSFWorkbook workBook,int defaultColWidth){
114         HSSFSheet sheet = workBook.createSheet();
115         //设置默认列宽
116         if(defaultColWidth<=0){
117             sheet.setDefaultColumnWidth(13);
118         }else{
119             sheet.setDefaultColumnWidth(defaultColWidth);
120         }
121         return sheet;
122     }
123     /**
124      * 生成一个单元行对象
125      * @param sheet sheet对象
126      * @param rowIndex  生成的行索引值
127      * @param defaultHeight 设置默认行的高度
128      * @return
129      */
130     public static HSSFRow creatRow(HSSFSheet sheet,int rowIndex,int defaultHeight){
131         HSSFRow row=sheet.createRow(rowIndex);
132         if(defaultHeight>0){
133             row.setHeight((short)defaultHeight);
134         }
135         return row;
136     }
137     /**
138      * 获取自带统计功能的单元格对象
139      * @param workBook excel对象
140      * @param row    指定行对象
141      * @param cellIndex   单元格在所在行的列索引值
142      * @param style  单元格样式对象
143      * @param info   单元格内的信息
144      * @param formula 计算公式
145      * @return
146      */
147     public static  HSSFCell createCellFormula(HSSFWorkbook workBook,HSSFRow row,int cellIndex,HSSFCellStyle style,String info,String formula){
148         HSSFCell cell=row.createCell(cellIndex);
149         if(style!=null){
150             cell.setCellStyle(style);
151         }
152         if(!"".equals(info) && info!=null){
153             cell.setCellValue(info);
154         }
155         cell.setCellType(Cell.CELL_TYPE_FORMULA);
156         cell.setCellFormula(formula);//计算公式
157         FormulaEvaluator evaluator = workBook.getCreationHelper().createFormulaEvaluator();
158         evaluator.evaluateFormulaCell(cell);
159         CellValue cellValue = evaluator.evaluate(cell);
160         return cell;
161     }
162     /**
163      * 统计计算公式(+)求和
164      * @param tagert  列标记
165      * @param begIndex   起始索引
166      * @param endIndex   终止索引
167      * @return    返回计算公式
168      */
169     public static String getSumStr(String tagert,int begIndex,int endIndex){
170         String retStr=tagert+begIndex;
171         for(int i=begIndex+1;i<=endIndex;i++ ){
172             retStr+=("+"+tagert+i);
173         }
174         return "SUM("+retStr+")";
175     }
176     /**
177      * 生产excel文件到指定的路径下
178      * @param workBook excel对象
179      * @param sheetName sheet名称
180      * @param filePathName 保存路径
181      */
182     public static void writeToExcelFile(HSSFWorkbook workBook,String sheetName,String filePathName){
183         workBook.setSheetName(0,sheetName);
184         FileOutputStream fileOut = null;
185         try {
186             fileOut = new FileOutputStream(filePathName);
187         } catch (FileNotFoundException e1) {
188             e1.printStackTrace();//异常信息需要日志记录
189         }
190         try {
191             workBook.write( fileOut );
192         } catch (IOException e) {
193             e.printStackTrace();
194         }
195     }
196 }

测试类:

  1 package com.jason.test;
  2
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6
  7 import org.apache.poi.hssf.usermodel.HSSFCell;
  8 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  9 import org.apache.poi.hssf.usermodel.HSSFFont;
 10 import org.apache.poi.hssf.usermodel.HSSFRow;
 11 import org.apache.poi.hssf.usermodel.HSSFSheet;
 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 13 import org.apache.poi.ss.usermodel.Cell;
 14 import org.apache.poi.ss.usermodel.CellValue;
 15 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 16 import org.apache.poi.ss.util.CellRangeAddress;
 17
 18 import com.jason.excel.CreateExcelUtil;
 19
 20 public class Test2 {
 21     /**
 22      * 每个报表都不相同
 23      */
 24     private static String[] arr={"B","C","D","E","F","G","H","I","J","K","L"};
 25     public static void main(String[] args)throws FileNotFoundException, IOException {
 26         // 创建HSSFWorkbook对象
 27         HSSFWorkbook workBook = new HSSFWorkbook();
 28         //创建sheet对象
 29         HSSFSheet sheet = CreateExcelUtil.getDefaultSheet(workBook,13);
 30         //创建字体和样式
 31         HSSFFont font=CreateExcelUtil.getFont(workBook, null, -1, -1);
 32         HSSFCellStyle style=CreateExcelUtil.getStyle(workBook, font,"center");//居中样式
 33         HSSFCellStyle style_left=CreateExcelUtil.getStyle(workBook,font, "left");//居左样式
 34
 35         //创建第1行
 36         CreateExcelUtil.setMergeArea(sheet, 0,0,0,11);
 37         HSSFRow row_1=CreateExcelUtil.creatRow(sheet, 0, 500);
 38         HSSFCell cell_1_1=CreateExcelUtil.createCell(row_1, 0, style, "企业网银关键业务统计报表");
 39         //创建第2行
 40         CreateExcelUtil.setMergeArea(sheet, 1,1,1,3);
 41         CreateExcelUtil.setMergeArea(sheet, 1,1,5,11);
 42         HSSFRow row_2=CreateExcelUtil.creatRow(sheet, 1, 400);
 43         //报表类型
 44         HSSFCell cell_2_1=CreateExcelUtil.createCell(row_2, 0, style, "报表类型");
 45         HSSFCell cell_2_2=CreateExcelUtil.createCell(row_2, 1, style_left,"日报表" );
 46         //统计时间
 47         HSSFCell cell_2_3=CreateExcelUtil.createCell(row_2, 4, style, "统计时间");
 48         HSSFCell cell_2_4=CreateExcelUtil.createCell(row_2, 5, style_left, "2018/08/08-2018/08/09");
 49         //创建第3行
 50         CreateExcelUtil.setMergeArea(sheet, 2,2,1,3);
 51         CreateExcelUtil.setMergeArea(sheet, 2,2,5,11);
 52         HSSFRow row_3=CreateExcelUtil.creatRow(sheet, 2, -1);
 53         //机构类型
 54         HSSFCell cell_3_1=CreateExcelUtil.createCell(row_3, 0, style, "机构类型");
 55         HSSFCell cell_3_2=CreateExcelUtil.createCell(row_3, 1, style_left,"分行" );
 56         //机构名称
 57         HSSFCell cell_3_3=CreateExcelUtil.createCell(row_3, 4, style, "机构名称");
 58         HSSFCell cell_3_4=CreateExcelUtil.createCell(row_3, 5, style_left,"云南红塔银行总行营业部汇总" );
 59         //创建第4行
 60         CreateExcelUtil.setMergeArea(sheet,3,3,1,11);
 61         HSSFRow row_4=CreateExcelUtil.creatRow(sheet, 3, -1);
 62         //统计渠道
 63         HSSFCell cell_4_1=CreateExcelUtil.createCell(row_4, 0, style, "统计渠道");
 64         HSSFCell cell_4_2=CreateExcelUtil.createCell(row_4, 1, style_left,"全部" );
 65         //创建第5行
 66         CreateExcelUtil.setMergeArea(sheet, 4,4,0,11);
 67         HSSFRow row_5=CreateExcelUtil.creatRow(sheet, 4, -1);
 68         //创建第6行和第7行
 69         CreateExcelUtil.setMergeArea(sheet, 5,6,0,1);//一级业务
 70         CreateExcelUtil.setMergeArea(sheet, 5,6,2,3);//二级业务
 71         CreateExcelUtil.setMergeArea(sheet, 5,5,4,5);//成功数
 72         CreateExcelUtil.setMergeArea(sheet, 5,5,6,7);//失败数
 73         CreateExcelUtil.setMergeArea(sheet, 5,5,8,9);//成功金额
 74         CreateExcelUtil.setMergeArea(sheet, 5,5,10,11);//失败金额
 75         HSSFRow row_6=CreateExcelUtil.creatRow(sheet, 5, -1);
 76         HSSFRow row_7=CreateExcelUtil.creatRow(sheet, 6, -1);
 77         //一级业务
 78         HSSFCell cell_6_1=CreateExcelUtil.createCell(row_6, 0, style, "一级业务");
 79         //二级业务
 80         HSSFCell cell_6_2=CreateExcelUtil.createCell(row_6, 2, style, "二级业务");
 81         //成功数
 82         HSSFCell cell_6_3=CreateExcelUtil.createCell(row_6, 4, style, "成功数");
 83         //单位个人
 84         HSSFCell cell_7_1=CreateExcelUtil.createCell(row_7, 4, style, "单位");
 85         HSSFCell cell_7_2=CreateExcelUtil.createCell(row_7, 5, style, "个人");
 86         //失败数
 87         HSSFCell cell_6_4=CreateExcelUtil.createCell(row_6, 6, style, "失败数");
 88         //单位个人
 89         HSSFCell cell_7_3=CreateExcelUtil.createCell(row_7, 6, style, "单位");
 90         HSSFCell cell_7_4=CreateExcelUtil.createCell(row_7, 7, style, "个人");
 91         //成功金额
 92         HSSFCell cell_6_5=CreateExcelUtil.createCell(row_6, 8, style, "成功金额");
 93         //单位个人
 94         HSSFCell cell_7_5=CreateExcelUtil.createCell(row_7, 8, style, "单位");
 95         HSSFCell cell_7_6=CreateExcelUtil.createCell(row_7, 9, style, "个人");
 96         //失败金额
 97         HSSFCell cell_6_6=CreateExcelUtil.createCell(row_6, 10, style, "失败金额");
 98         //单位个人
 99         HSSFCell cell_7_7=CreateExcelUtil.createCell(row_7, 10, style, "单位");
100         HSSFCell cell_7_8=CreateExcelUtil.createCell(row_7, 11, style, "个人");
101
102
103         //循环处理数据
104         int rowIndex=7;//从第7行开始计算
105         int dataCount=7;
106         for(int i=0;i<10;i++,rowIndex++){//循环产生行数据
107             dataCount++;
108             //创建新的行
109             HSSFRow row_index=CreateExcelUtil.creatRow(sheet, rowIndex, -1);
110             HSSFCell cell_1=CreateExcelUtil.createCell(row_index, 0, style, "世博支行");
111             for(int j=1;j<12;j++){//循环产生列数据
112                 HSSFCell cell=CreateExcelUtil.createCell(row_index, j, style, "100");
113             }
114         }
115
116         //合计统计
117         HSSFRow row_total=CreateExcelUtil.creatRow(sheet, rowIndex, -1);
118         HSSFCell cell_total=CreateExcelUtil.createCell(row_total, 0, style, "合计");
119         for(int i=0;i<arr.length;i++){
120             String formula=CreateExcelUtil.getSumStr(arr[i],8,dataCount);
121             HSSFCell cell=CreateExcelUtil.createCellFormula(workBook,row_total, i+1, style, null,formula);
122         }
123         //开始写入文件: 定义你需要的输出流
124         CreateExcelUtil.writeToExcelFile(workBook, "企业网银关键业务统计报表", "./test.xls");
125     }
126 }

生成结果图:

未封装的代码:

  1 package com.jason.test;
  2
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6
  7 import org.apache.poi.hssf.usermodel.HSSFCell;
  8 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  9 import org.apache.poi.hssf.usermodel.HSSFFont;
 10 import org.apache.poi.hssf.usermodel.HSSFRow;
 11 import org.apache.poi.hssf.usermodel.HSSFSheet;
 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 13 import org.apache.poi.hssf.util.HSSFColor;
 14 import org.apache.poi.ss.usermodel.Cell;
 15 import org.apache.poi.ss.usermodel.CellStyle;
 16 import org.apache.poi.ss.usermodel.CellValue;
 17 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 18 import org.apache.poi.ss.util.CellRangeAddress;
 19
 20 public class Test {
 21     /**
 22      * 每个报表都不相同
 23      */
 24     private static String[] arr={"B","C","D","E","F","G","H","I","J","K","L"};
 25     public static void main(String[] args)throws FileNotFoundException, IOException {
 26         // 创建HSSFWorkbook对象
 27         HSSFWorkbook workBook = new HSSFWorkbook();
 28         //创建sheet对象
 29         HSSFSheet sheet = workBook.createSheet();
 30         //设置默认列宽
 31         sheet.setDefaultColumnWidth(13);
 32         //创建字体和样式
 33         HSSFFont font=workBook.createFont();
 34         HSSFCellStyle style=workBook.createCellStyle();//居中样式
 35         HSSFCellStyle style_left=workBook.createCellStyle();
 36
 37        /**
 38         * 设置边框样式
 39         *  style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
 40         *  style.setBottomBorderColor(HSSFColor.BLACK.index);
 41         *  style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
 42         *  style.setLeftBorderColor(HSSFColor.BLACK.index);
 43         *  style.setBorderRight(HSSFCellStyle.BORDER_THIN);
 44         *  style.setRightBorderColor(HSSFColor.BLACK.index);
 45         *  style.setBorderTop(HSSFCellStyle.BORDER_THIN);
 46         *  style.setTopBorderColor(HSSFColor.BLACK.index);
 47         */
 48
 49
 50         /**
 51          * 设置背景色样式
 52          * style.setFillForegroundColor(HSSFColor.LEMON_CHIFFON.index);
 53          * style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//单元格模式[SOLID_FOREGROUND]
 54          */
 55         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置字体居中(OK)
 56         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
 57         style_left.setVerticalAlignment(HSSFCellStyle.ALIGN_LEFT);//上下居左
 58
 59         font.setFontName("宋体");
 60         font.setFontHeightInPoints((short) 14);// 设置字体大小
 61         style.setFont(font);//设置字体样式
 62         style_left.setFont(font);//设置字体样式
 63         //创建第1行
 64         sheet.addMergedRegion(new CellRangeAddress(0,0,0,11));
 65         HSSFRow row_1=sheet.createRow(0);
 66         //设置行高
 67         row_1.setHeight((short)500);
 68         HSSFCell cell_1_1=row_1.createCell(0);
 69         cell_1_1.setCellStyle(style);
 70         cell_1_1.setCellValue("企业网银关键业务统计报表");
 71         //创建第2行
 72         sheet.addMergedRegion(new CellRangeAddress(1,1,1,3));
 73         sheet.addMergedRegion(new CellRangeAddress(1,1,5,11));
 74         HSSFRow row_2=sheet.createRow(1);
 75         row_2.setHeight((short)400);
 76         //报表类型
 77         HSSFCell cell_2_1=row_2.createCell(0);
 78         cell_2_1.setCellStyle(style);
 79         cell_2_1.setCellValue("报表类型");
 80         HSSFCell cell_2_2=row_2.createCell(1);
 81         cell_2_2.setCellStyle(style_left);
 82         cell_2_2.setCellValue("日报表");
 83         //统计时间
 84         HSSFCell cell_2_3=row_2.createCell(4);
 85         cell_2_3.setCellStyle(style);
 86         cell_2_3.setCellValue("统计时间");
 87         HSSFCell cell_2_4=row_2.createCell(5);
 88         cell_2_4.setCellStyle(style_left);
 89         cell_2_4.setCellValue("2018/08/08-2018/08/09");
 90         //创建第3行
 91         sheet.addMergedRegion(new CellRangeAddress(2,2,1,3));
 92         sheet.addMergedRegion(new CellRangeAddress(2,2,5,11));
 93         HSSFRow row_3=sheet.createRow(2);
 94         //机构类型
 95         HSSFCell cell_3_1=row_3.createCell(0);
 96         cell_3_1.setCellStyle(style);
 97         cell_3_1.setCellValue("机构类型");
 98         HSSFCell cell_3_2=row_3.createCell(1);
 99         cell_3_2.setCellStyle(style_left);
100         cell_3_2.setCellValue("分行");
101         //机构名称
102         HSSFCell cell_3_3=row_3.createCell(4);
103         cell_3_3.setCellStyle(style);
104         cell_3_3.setCellValue("机构名称");
105         HSSFCell cell_3_4=row_3.createCell(5);
106         cell_3_4.setCellStyle(style_left);
107         cell_3_4.setCellValue("云南红塔银行总行营业部汇总");
108         //创建第4行
109         sheet.addMergedRegion(new CellRangeAddress(3,3,1,11));
110         HSSFRow row_4=sheet.createRow(3);
111         //统计渠道
112         HSSFCell cell_4_1=row_4.createCell(0);
113         cell_4_1.setCellStyle(style);
114         cell_4_1.setCellValue("统计渠道");
115         HSSFCell cell_4_2=row_4.createCell(1);
116         cell_4_2.setCellStyle(style_left);
117         cell_4_2.setCellValue("全部");
118         //创建第5行
119         sheet.addMergedRegion(new CellRangeAddress(4,4,0,11));
120         HSSFRow row_5=sheet.createRow(4);
121         //创建第6行和第7行
122         sheet.addMergedRegion(new CellRangeAddress(5,6,0,1));//一级业务
123         sheet.addMergedRegion(new CellRangeAddress(5,6,2,3));//二级业务
124         sheet.addMergedRegion(new CellRangeAddress(5,5,4,5));//成功数
125         sheet.addMergedRegion(new CellRangeAddress(5,5,6,7));//失败数
126         sheet.addMergedRegion(new CellRangeAddress(5,5,8,9));//成功金额
127         sheet.addMergedRegion(new CellRangeAddress(5,5,10,11));//失败金额
128         HSSFRow row_6=sheet.createRow(5);
129         HSSFRow row_7=sheet.createRow(6);
130         //一级业务
131         HSSFCell cell_6_1=row_6.createCell(0);
132         cell_6_1.setCellStyle(style);
133         cell_6_1.setCellValue("一级业务");
134         //二级业务
135         HSSFCell cell_6_2=row_6.createCell(2);
136         cell_6_2.setCellStyle(style);
137         cell_6_2.setCellValue("二级业务");
138         //成功数
139         HSSFCell cell_6_3=row_6.createCell(4);
140         cell_6_3.setCellStyle(style);
141         cell_6_3.setCellValue("成功数");
142         //单位个人
143         HSSFCell cell_7_1=row_7.createCell(4);
144         cell_7_1.setCellStyle(style);
145         cell_7_1.setCellValue("单位");
146         HSSFCell cell_7_2=row_7.createCell(5);
147         cell_7_2.setCellStyle(style);
148         cell_7_2.setCellValue("个人");
149         //失败数
150         HSSFCell cell_6_4=row_6.createCell(6);
151         cell_6_4.setCellStyle(style);
152         cell_6_4.setCellValue("失败数");
153         //单位个人
154         HSSFCell cell_7_3=row_7.createCell(6);
155         cell_7_3.setCellStyle(style);
156         cell_7_3.setCellValue("单位");
157         HSSFCell cell_7_4=row_7.createCell(7);
158         cell_7_4.setCellStyle(style);
159         cell_7_4.setCellValue("个人");
160         //成功金额
161         HSSFCell cell_6_5=row_6.createCell(8);
162         cell_6_5.setCellStyle(style);
163         cell_6_5.setCellValue("成功金额");
164         //单位个人
165         HSSFCell cell_7_5=row_7.createCell(8);
166         cell_7_5.setCellStyle(style);
167         cell_7_5.setCellValue("单位");
168         HSSFCell cell_7_6=row_7.createCell(9);
169         cell_7_6.setCellStyle(style);
170         cell_7_6.setCellValue("个人");
171         //失败金额
172         HSSFCell cell_6_6=row_6.createCell(10);
173         cell_6_6.setCellStyle(style);
174         cell_6_6.setCellValue("失败金额");
175         //单位个人
176         HSSFCell cell_7_7=row_7.createCell(10);
177         cell_7_7.setCellStyle(style);
178         cell_7_7.setCellValue("单位");
179         HSSFCell cell_7_8=row_7.createCell(11);
180         cell_7_8.setCellStyle(style);
181         cell_7_8.setCellValue("个人");
182
183
184         //循环处理数据
185         int rowIndex=7;
186         int dataCount=7;
187         for(int i=0;i<10;i++,rowIndex++){
188             dataCount++;
189             //创建新的行
190             HSSFRow row_index=sheet.createRow(rowIndex);
191             HSSFCell cell_1=row_index.createCell(0);
192             cell_1.setCellStyle(style);
193             cell_1.setCellValue("世博支行");
194             for(int j=1;j<12;j++){
195                 HSSFCell cell=row_index.createCell(j);
196                 cell.setCellStyle(style);
197                 cell.setCellValue("100");
198             }
199         }
200
201         //合计统计
202         HSSFRow row_total=sheet.createRow(rowIndex);
203         HSSFCell cell_total=row_total.createCell(0);
204         cell_total.setCellStyle(style);
205         cell_total.setCellValue("合计");
206         for(int i=0;i<arr.length;i++){
207             HSSFCell cell=row_total.createCell(i+1);
208             cell.setCellStyle(style);
209             //开始统计
210             cell.setCellType(Cell.CELL_TYPE_FORMULA);
211             cell.setCellFormula(getSumStr(arr[i],8,dataCount));//计算公式
212             System.out.println(getSumStr(arr[i],8,dataCount));
213             //创建poi计算器
214             FormulaEvaluator evaluator = workBook.getCreationHelper().createFormulaEvaluator();
215             evaluator.evaluateFormulaCell(cell);
216             CellValue cellValue = evaluator.evaluate(cell);
217         }
218         //开始写入文件: 定义你需要的输出流
219         workBook.setSheetName(0,"企业网银关键业务统计报表");
220         FileOutputStream fileOut =new FileOutputStream("./test.xls");
221         workBook.write( fileOut );
222     }
223     /**
224      * 统计计算公式
225      * @param tagert  列标记
226      * @param begIndex   起始索引
227      * @param endIndex   终止索引
228      * @return    返回计算公式
229      */
230     public static String getSumStr(String tagert,int begIndex,int endIndex){
231         String retStr=tagert+begIndex;
232         for(int i=begIndex+1;i<=endIndex;i++ ){
233             retStr+=("+"+tagert+i);
234         }
235         return "SUM("+retStr+")";
236     }
237 }

原文地址:https://www.cnblogs.com/newwind/p/9510834.html

时间: 2024-08-29 06:42:45

POI生成EXCEL文件(字体、样式、单元格合并、计算公式)的相关文章

POI生成EXCEL文件

POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头(head),数据(data) ,表尾(foot) 明确区分 二.效果预览 三.数据格式 由于是生成Excel文件,这里值考虑生成xlsx格式的Excel文件,数据多表头默认考虑使用 | 表示,不在使用colspan rowspan作为.如需要表示两列两行,第一列合并表头格式为: A|B,A|C生成的

读取Excel文件中的单元格的内容和颜色

读取Excel文件中的单元格的内容和颜色 先创建一个Excel文件,在A1和A2中随意输入内容,设置A1的字体颜色为红色,A2的背景为黄色.需要 using Excel = Microsoft.Office.Interop.Excel;或者using Microsoft.Excel; string file = @"E:\test.xls"; //测试文件 Excel.Application excel = null; Excel.Workbook wkb = null; try {

java使用poi生成Excel文件

1. maven导入poi包: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> pom.xml 2. 新建测试数据实体类: package com.clz.testexportexcel; public class Exc

java 利用 poi 生成 Excel文件的例子

在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 保护生成Excel文档,设置密码访问. 3. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用. 用 apache  POI 生成 Excel 文档公用类  程序代码 package com.yihaomen.poi.sampl

Java解析,导出Excel文件(.xlsx跟.xls两种格式)&amp;字体修改&amp;单元格合并

做项目时要用到Excel批量导入导出数据,网上搜了以下大部分都是.xls格式Excel文件的教程. 导入.xlsx跟.xls格式的过程差不了多少,就是导出的时候好像有点不同,而且网上也没教程,于是硬着头皮写了一个(并没有看官方Api文档( ̄▽ ̄)"). 首先是导入Jar包,在上传的项目里面已经将需要用到的Jar文件放在lib文件夹里面了,我们只需要在Eclipse里面设置一下: 这里表格信息用Teacher这个类封装: package JavaBean; public class Teacher

使用POI生成Excel文件,可以自动调整excel列宽

在开发中经常需要用到对Excel文件的操作,现在根据网上的资料整理如下:import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HS

【原创】POI 生成Excel文件并下载

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</versio

Java用POI解析excel并获取所有单元格数据

1.导入POI相关jar包 org.apache.poi jar 2.代码示例 public List getAllExcel(File file, String tableName, String fname, String enterpriseId, String reportId, String projectId) throws FileNotFoundException, IOException, ClassNotFoundException, InstantiationExcepti

NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)

NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 3.设置单元格样式:字段,颜色 4.设置单元格为下拉框并限制输入值 5.设置单元格只能输入数字 // // GET: /Excel/ public ActionResult Write() { var workbook = new HSSFWorkbook();//从流内容创建Workbook对象