精华内容
下载资源
问答
  • java导出Excel合并单元格

    千次阅读 2019-02-12 10:09:43
    网上java导出excel表格并合并单元格的资料不完全,我整理了一份,并亲测能用,附截图。 ①java导出excel用到POI所有jar包,大家可以直接到下面地址下载点击打开链接 ②模拟数据类 package org;   public class ...

    网上java导出excel表格并合并单元格的资料不完全,我整理了一份,并亲测能用,附截图。

    ①java导出excel用到POI所有jar包,大家可以直接到下面地址下载点击打开链接

    ②模拟数据类

    package org;
     
    public class WorkSheetDetail {
        //工作内容
        private String workCtx;
        // 用工人总数    工日数 = gwnNum+tmnNum
        private Float totalHumanDays;
        //普工用工数 1-4小时为半天,4-8小时为一天;120每天
        private Integer gwnNum;
        //技工用工数 1-4小时为半天,4-8小时为一天;160每天
        private Integer tmnNum;
        // 单价(元)
        private Float unitPrice;
        // 金额(元) = gwnNum*120+tmnNum+160
        private Float unitAmount;
        // 备注
        private String notes; 
        
        public WorkSheetDetail(String workCtx, Float totalHumanDays, Integer gwnNum, Integer tmnNum, Float unitPrice,
                Float unitAmount, String notes) {
            super();
            this.workCtx = workCtx;
            this.totalHumanDays = totalHumanDays;
            this.gwnNum = gwnNum;
            this.tmnNum = tmnNum;
            this.unitPrice = unitPrice;
            this.unitAmount = unitAmount;
            this.notes = notes;
        }
        public String getWorkCtx() {
            return workCtx;
        }
        public void setWorkCtx(String workCtx) {
            this.workCtx = workCtx;
        }
        public Float getTotalHumanDays() {
            return totalHumanDays;
        }
        public void setTotalHumanDays(Float totalHumanDays) {
            this.totalHumanDays = totalHumanDays;
        }
        public Integer getGwnNum() {
            return gwnNum;
        }
        public void setGwnNum(Integer gwnNum) {
            this.gwnNum = gwnNum;
        }
        public Integer getTmnNum() {
            return tmnNum;
        }
        public void setTmnNum(Integer tmnNum) {
            this.tmnNum = tmnNum;
        }
        public Float getUnitPrice() {
            return unitPrice;
        }
        public void setUnitPrice(Float unitPrice) {
            this.unitPrice = unitPrice;
        }
        public Float getUnitAmount() {
            return unitAmount;
        }
        public void setUnitAmount(Float unitAmount) {
            this.unitAmount = unitAmount;
        }
        public String getNotes() {
            return notes;
        }
        public void setNotes(String notes) {
            this.notes = notes;
        }
        
    }

    ③java导出excel方法
    package org;
    import java.io.FileOutputStream;
    import java.util.List;
    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.HSSFHeader;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    public class ExportExcel {
        public void getValue(List<WorkSheetDetail> userList,FileOutputStream fout){
              try{
                    //1.创建工作簿
                    HSSFWorkbook workbook = new HSSFWorkbook();
                    //1.1创建合并单元格对象
                    CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress1 = new CellRangeAddress(1,1,0,7);//起始行,结束行,起始列,结束列
                    //班组与时间start
                    CellRangeAddress callRangeAddress20 = new CellRangeAddress(2,2,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress21 = new CellRangeAddress(2,2,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress22 = new CellRangeAddress(2,2,5,7);//起始行,结束行,起始列,结束列
                    //班组与时间end
                    
                    //标题
                    CellRangeAddress callRangeAddress31 = new CellRangeAddress(3,4,0,0);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress32 = new CellRangeAddress(3,4,1,1);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress33 = new CellRangeAddress(3,4,2,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress34 = new CellRangeAddress(3,3,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress35 = new CellRangeAddress(3,4,5,5);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress36 = new CellRangeAddress(3,4,6,6);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress37 = new CellRangeAddress(3,4,7,7);//起始行,结束行,起始列,结束列
                    
                    //金额
                    CellRangeAddress callRangeAddressnumber1 = new CellRangeAddress(userList.size()+5,userList.size()+5,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressnumber2 = new CellRangeAddress(userList.size()+5,userList.size()+5,3,7);//起始行,结束行,起始列,结束列
     
                    //负责人
                    CellRangeAddress callRangeAddressPersion1 = new CellRangeAddress(userList.size()+6,userList.size()+6,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressPersion2 = new CellRangeAddress(userList.size()+6,userList.size()+6,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressPersion3 = new CellRangeAddress(userList.size()+6,userList.size()+6,5,7);//起始行,结束行,起始列,结束列
     
                    //说明
                    CellRangeAddress callRangeAddressinfo = new CellRangeAddress(userList.size()+7,userList.size()+7,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressinfo1 = new CellRangeAddress(userList.size()+8,userList.size()+8,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressinfo2 = new CellRangeAddress(userList.size()+9,userList.size()+9,0,7);//起始行,结束行,起始列,结束列
     
                    //部项目经理部
                    HSSFCellStyle headStyle = createCellStyle(workbook,(short)10,false,true);
                    //派工单
                    HSSFCellStyle erStyle = createCellStyle(workbook,(short)13,true,true);
                    //班组和时间
                    HSSFCellStyle sanStyle = createCellStyle(workbook,(short)10,false,false);
                    //标题样式
                    HSSFCellStyle colStyle = createCellStyle(workbook,(short)10,true,true);
                    //内容样式
                    HSSFCellStyle cellStyle = createCellStyle(workbook,(short)10,false,true);
                    //2.创建工作表
                    HSSFSheet sheet = workbook.createSheet("派单");
                    //2.1加载合并单元格对象
                    sheet.addMergedRegion(callRangeAddress);
                    sheet.addMergedRegion(callRangeAddress1);
                    sheet.addMergedRegion(callRangeAddress20);
                    sheet.addMergedRegion(callRangeAddress21);
                    sheet.addMergedRegion(callRangeAddress22);
                    sheet.addMergedRegion(callRangeAddress31);
                    sheet.addMergedRegion(callRangeAddress32);
                    sheet.addMergedRegion(callRangeAddress33);
                    sheet.addMergedRegion(callRangeAddress34);
                    sheet.addMergedRegion(callRangeAddress35);
                    sheet.addMergedRegion(callRangeAddress36);
                    sheet.addMergedRegion(callRangeAddress37);
                    sheet.addMergedRegion(callRangeAddressnumber1);
                    sheet.addMergedRegion(callRangeAddressnumber2);
                    sheet.addMergedRegion(callRangeAddressPersion1);
                    sheet.addMergedRegion(callRangeAddressPersion2);
                    sheet.addMergedRegion(callRangeAddressPersion3);
                    sheet.addMergedRegion(callRangeAddressinfo);
                    sheet.addMergedRegion(callRangeAddressinfo1);
                    sheet.addMergedRegion(callRangeAddressinfo2);
                    //设置默认列宽
                    sheet.setDefaultColumnWidth(15);
                    //3.创建行
                    //3.1创建头标题行;并且设置头标题
                    HSSFRow row = sheet.createRow(0);
                    HSSFCell cell = row.createCell(0);
                    //加载单元格样式
                    cell.setCellStyle(headStyle);
                    cell.setCellValue("xxxx项目部");
                    
                    HSSFRow rower = sheet.createRow(1);
                    HSSFCell celler = rower.createCell(0);
                    //加载单元格样式
                    celler.setCellStyle(erStyle);
                    celler.setCellValue("派 工 单");
                    
                    HSSFRow rowsan = sheet.createRow(2);
                    HSSFCell cellsan = rowsan.createCell(0);
                    HSSFCell cellsan1 = rowsan.createCell(3);
                    HSSFCell cellsan2 = rowsan.createCell(5);
                    //加载单元格样式
                    cellsan.setCellStyle(sanStyle);
                    cellsan.setCellValue("协作单位:x施工一堆");
                    cellsan1.setCellStyle(sanStyle);
                    cellsan1.setCellValue("");
                    cellsan2.setCellStyle(sanStyle);
                    cellsan2.setCellValue("时间:2017年 10月 20日");
                    
                    //3.2创建列标题;并且设置列标题
                    HSSFRow row2 = sheet.createRow(3);
                    String[] titles = {"序号","工作内容","用工总人数","工日数","","单价(元)","金额(元)","备注"};//""为占位字符串
                    for(int i=0;i<titles.length;i++)
                    {
                        HSSFCell cell2 = row2.createCell(i);
                        //加载单元格样式
                        cell2.setCellStyle(colStyle);
                        cell2.setCellValue(titles[i]);
                    }
                    
                    HSSFRow rowfour = sheet.createRow(4);
                    String[] titlefour = {"普工用工数","技工用工数"};
                    for(int i=0;i<titlefour.length;i++)
                    {
                        HSSFCell cell2 = rowfour.createCell(i+3);
                        //加载单元格样式
                        cell2.setCellStyle(colStyle);
                        cell2.setCellValue(titlefour[i]);
                    }
                    
                    
                    //4.操作单元格;将用户列表写入excel
                    if(userList != null)
                    {
                        int i=1;
                        for(int j=0;j<userList.size();j++)
                        {
                            //创建数据行,前面有两行,头标题行和列标题行
                            HSSFRow row3 = sheet.createRow(j+5);
                            HSSFCell cell0 = row3.createCell(0);
                            cell0.setCellStyle(cellStyle);
                            cell0.setCellValue(i++);
                            
                            HSSFCell cell1 = row3.createCell(1);
                            cell1.setCellStyle(cellStyle);
                            cell1.setCellValue(userList.get(j).getWorkCtx());
                            
                            HSSFCell cell2 = row3.createCell(2);
                            cell2.setCellStyle(cellStyle);
                            cell2.setCellValue(userList.get(j).getTotalHumanDays());
                            
                            HSSFCell cell3 = row3.createCell(3);
                            cell3.setCellStyle(cellStyle);
                            cell3.setCellValue(userList.get(j).getGwnNum());
                            
                            HSSFCell cell4 = row3.createCell(4);
                            cell4.setCellStyle(cellStyle);
                            cell4.setCellValue(userList.get(j).getTmnNum());
                            
                            HSSFCell cell5 = row3.createCell(5);
                            cell5.setCellStyle(cellStyle);
                            cell5.setCellValue(userList.get(j).getTotalHumanDays());
                            
                            HSSFCell cell6 = row3.createCell(6);
                            cell6.setCellStyle(cellStyle);
                            cell6.setCellValue(userList.get(j).getUnitAmount());
                            
                            HSSFCell cell7= row3.createCell(7);
                            cell7.setCellStyle(cellStyle);
                            cell7.setCellValue(userList.get(j).getUnitPrice());
                        }
                    }
                    
                    HSSFRow rownumber = sheet.createRow(userList.size()+5);
                    HSSFCell cellnumber = rownumber.createCell(0);
                    HSSFCell cellnumber1 = rownumber.createCell(3);
                    //加载单元格样式
                    cellnumber.setCellStyle(sanStyle);
                    cellnumber.setCellValue("金额合计(大写)");
                    cellnumber1.setCellStyle(sanStyle);
                    cellnumber1.setCellValue("¥ 78 元; 大写:柒拾捌元整");
     
                    HSSFRow rowpersion = sheet.createRow(userList.size()+6);
                    HSSFCell cellpersion = rowpersion.createCell(0);
                    HSSFCell cellpersion1 = rowpersion.createCell(3);
                    HSSFCell cellpersion2 = rowpersion.createCell(5);
     
                    //加载单元格样式
                    cellpersion.setCellStyle(sanStyle);
                    cellpersion.setCellValue("协作单位负责人:");
                    cellpersion1.setCellStyle(sanStyle);
                    cellpersion1.setCellValue("经办人:");
                    cellpersion2.setCellStyle(sanStyle);
                    cellpersion2.setCellValue("部门负责人:");
                    
                    HSSFRow rowinfo = sheet.createRow(userList.size()+7);
                    HSSFCell cellinfo = rowinfo.createCell(0);
                    cellinfo.setCellStyle(sanStyle);
                    cellinfo.setCellValue("说明:1、本标工单一式两联,第一联为派工人(工长)存根,第二联用作结算。");
                    
                    HSSFRow rowinfo1 = sheet.createRow(userList.size()+8);
                    HSSFCell cellinfo1 = rowinfo1.createCell(0);
                    cellinfo1.setCellStyle(sanStyle);
                    cellinfo1.setCellValue("2、本标工单必须在用工当日签认,否则不予认可;三日内交合同处汇总。");
                    
                    HSSFRow rowinfo2 = sheet.createRow(userList.size()+9);
                    HSSFCell cellinfo2 = rowinfo2.createCell(0);
                    cellinfo2.setCellStyle(sanStyle);
                    cellinfo2.setCellValue("3、工日数填写精确到半个工日。");
                    //5.输出
                    workbook.write(fout);
    //                workbook.close();
                    //out.close();
                }catch(Exception e)
                {
                    e.printStackTrace();
                }
        }
        
        /**
         * 
         * @param workbook
         * @param fontsize
         * @return 单元格样式
         */
        private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontsize,boolean flag,boolean flag1) {
            // TODO Auto-generated method stub
            HSSFCellStyle style = workbook.createCellStyle();
            //是否水平居中
            if(flag1){
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
            }
           
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            //创建字体
            HSSFFont font = workbook.createFont();
            //是否加粗字体
            if(flag){
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            }
            font.setFontHeightInPoints(fontsize);
            //加载字体
            style.setFont(font);
            return style;
        }
    }


    ④main方法
    package org;
     
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
     
    public class MainOut {
        public static void main(String args[]){
            //模拟部分数据
            List<WorkSheetDetail> detail = new ArrayList<WorkSheetDetail>();
     
            WorkSheetDetail d1 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d2 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d3 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d4 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d5 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            detail.add(d1);
            detail.add(d2);
            detail.add(d3);
            detail.add(d4);
            detail.add(d5);
            try  
            {  
                FileOutputStream fout = new FileOutputStream("E:/students.xls");
                new ExportExcel().getValue(detail, fout);
                fout.close();  
            }  
            catch (Exception e)  
            {  
                e.printStackTrace();  
            }  
     
        }
    }

    ⑤截图

     

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

    展开全文
  • Java导出Excel合并单元格

    千次阅读 2019-02-07 13:56:11
    Java导出Excel合并单元格
                   

    1、问题背景

         利用POI导出Excel表格,在导出的过程中涉及到双表头,即需要合并单元格


    2、实现源码

    /** *  * @Project:Report * @Title:MergeCell.java * @Package:com.you.excel * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午2:36:46 * @Version: */package com.you.excel;import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.Region;/** * <p>合并单元格</p> * @ClassName:MergeCell * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午2:36:46 *  */public class MergeCell /**  * 合并单元格  * @Title:MergeCell  * @Description:  * @param args  * @Date:2015年11月4日 下午2:36:46  * @return: void   * @throws Exception  */ @SuppressWarnings({ "resource", "deprecation" }) public static void main(String[] args) throws Exception  {  //创建workbook   HSSFWorkbook workbook = new HSSFWorkbook();   //创建sheet页     HSSFSheet sheet = workbook.createSheet("学生表");   //创建单元格  HSSFRow row = sheet.createRow(0);   HSSFCell c0 = row.createCell(0);   c0.setCellValue(new HSSFRichTextString("学号"));   HSSFCell c1 = row.createCell(1);   c1.setCellValue(new HSSFRichTextString("姓名"));   HSSFCell c2 = row.createCell(2);   c2.setCellValue(new HSSFRichTextString("性别"));   HSSFCell c3 = row.createCell(3);   c3.setCellValue(new HSSFRichTextString("年龄"));   HSSFCell c4 = row.createCell(4);   c4.setCellValue(new HSSFRichTextString("2015年分数"));   HSSFCell c5 = row.createCell(7);   c5.setCellValue(new HSSFRichTextString("2014年分数"));   HSSFRow row1 = sheet.createRow(1);   HSSFCell c6 = row1.createCell(4);   c6.setCellValue(new HSSFRichTextString("语文"));   HSSFCell c7 = row1.createCell(5);   c7.setCellValue(new HSSFRichTextString("数学"));   HSSFCell c8 = row1.createCell(6);   c8.setCellValue(new HSSFRichTextString("外语"));  HSSFCell c9 = row1.createCell(7);   c9.setCellValue(new HSSFRichTextString("语文"));   HSSFCell c10 = row1.createCell(8);   c10.setCellValue(new HSSFRichTextString("数学"));   HSSFCell c11 = row1.createCell(9);   c11.setCellValue(new HSSFRichTextString("外语"));    Region region1 = new Region(0, (short)0, 1, (short)0);   Region region2 = new Region(0, (short)1, 1, (short)1);   Region region3 = new Region(0, (short)2, 1, (short)2);   Region region4 = new Region(0, (short)3, 1, (short)3);   Region region5 = new Region(0, (short)4, 0, (short)6);   Region region6 = new Region(0, (short)7, 0, (short)9);   sheet.addMergedRegion(region1);   sheet.addMergedRegion(region2);   sheet.addMergedRegion(region3);   sheet.addMergedRegion(region4);   sheet.addMergedRegion(region5);   sheet.addMergedRegion(region6);     FileOutputStream stream = new FileOutputStream("d:/student.xls");   workbook.write(stream); }}

    3、实现结果


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 合并单元格代码: CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 1, 0, 0); sheet.addMergedRegion(cellRangeAddress); //加入边框 setBorderStyle(BorderStyle.THIN, cellRangeAddress, sheet);...

    合并单元格代码:

    //合并单元格
    CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 1, 0, 0);
    sheet.addMergedRegion(cellRangeAddress);
    
    //加入边框
    setBorderStyle(BorderStyle.THIN, cellRangeAddress, sheet);

    CellRangeAddress参数说明

    前二个参数:第几行到第几行合并

    后二个参数:第几列到第几列合并

    合并后加入边框代码:

    /**
     * 合并单元格设置边框
     * @param
     * @param cellRangeTitle
     * @param sheet
     */
    private void setBorderStyle(BorderStyle borderStyle, CellRangeAddress cellRangeTitle, Sheet sheet){
        RegionUtil.setBorderBottom(borderStyle, cellRangeTitle, sheet);//下边框
        RegionUtil.setBorderLeft(borderStyle, cellRangeTitle, sheet);//左边框
        RegionUtil.setBorderRight(borderStyle, cellRangeTitle, sheet);//右边框
        RegionUtil.setBorderTop(borderStyle, cellRangeTitle, sheet);//上边框
    }

     

    展开全文
  • JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) ...

    JAVA基础

    1. JAVA异常分类及处理
    2. 异常分类
    3. 异常的处理方式
    4. Throw和throws的区别
    5. JAVA反射
    6. 动态语言
    7. 反射机制概念 (运行状态中知道类所有的属性和方法)
    8. Java反射API
    9. 反射使用步骤(获取Class对象、调用对象方法)
    10. 获取Class对象的3种方法
    11. 创建对象的两种方法
    12. JAVA注解
    13. JAVA内部类
    14. JAVA泛型
    15. JAVA序列化(创建可复用的Java对象)
    16. JAVA复制

    JAVA集合

    1. 接口继承关系和实现
    2. List
    3. ArrayList(数组)
    4. Vector(数组实现、线程同步)
    5. LinkList(链表)
    6. Set
    7. HashSet(Hash表)
    8. TreeSet(二叉树)
    9. LinkHashSet(HashSet+LinkedHashMap)
    10. Map
    11. HashMap(数组+链表+红黑树)
    12. JAVA7实现
    13. JAVA8实现
    14. ConcurrentHashMap
    15. Segment段
    16. 线程安全(Segment 继承 ReentrantLock 加锁)
    17. 并行度(默认16)
    18. HashTable(线程安全)
    19. TreeMap(可排序)
    20. LinkHashMap(记录插入顺序)

    JAVA多线程并发

    1. JAVA并发知识库
    2. JAVA线程实现/创建方式
    3. 4种线程池
    4. 线程生命周期(状态)
    5. 终止线程4种方式
    6. sleep与wait 区别
    7. start与run区别
    8. JAVA后台线程
    9. JAVA锁
    10. 线程基本方法
    11. 线程上下文切换
    12. 同步锁与死锁
    13. 线程池原理
    14. JAVA阻塞队列原理
    15. CyclicBarrier、CountDownLatch、Semaphore的用法
    16. volatile关键字的作用(变量可见性、禁止重排序)
    17. 如何在两个线程之间共享数据
    18. ThreadLocal作用(线程本地存储)
    19. synchronized和ReentrantLock的区别
    20. ConcurrentHashMap并发
    21. Java中用到的线程调度
    22. 进程调度算法
    23. 什么是CAS(比较并交换-乐观锁机制-锁自旋)
    24. 什么是 AQS(抽象的队列同步器)

    JVM

    1. 线程
    2. JVM内存区域
    3. JVM运行时内存
    4. 垃圾回收与算法
    5. JAVA 四种引用类型
    6. GC分代收集算法 VS 分区收集算法
    7. GC垃圾收集器
    8. JAVA IO/NIO
    9. JVM 类加载机制

    Spring 原理

    1. Spring 特点
    2. 轻量级
    3. 控制反转
    4. 面向切面
    5. 容器
    6. 框架集合
    7. Spring 核心组件
    8. Spring 常用模块
    9. Spring 主要包
    10. Spring 常用注解
    11. Spring IOC原理
    12. Spring APO原理
    13. Spring MVC原理
    14. Spring Boot原理
    15. JPA原理
    16. Mybatis缓存
    17. Tomcat架构

    微服务

    1. 服务注册发现
    2. 客户端注册(zookeeper)
    3. 第三方注册(独立的服务Registrar)
    4. 客户端发现
    5. 服务端发现
    6. Consul
    7. Eureka
    8. SmartStack
    9. Etcd
    10. API 网关
    11. 请求转发
    12. 响应合并
    13. 协议转换
    14. 数据转换
    15. 安全认证
    16. 配置中心
    17. zookeeper配置中心
    18. 配置中心数据分类
    19. 事件调度(kafka)
    20. 服务跟踪(starter-sleuth)
    21. 服务熔断(Hystrix)
    22. Hystrix断路器机制
    23. API管理

    Netty 与RPC

    1. Netty 原理
    2. Netty 高性能
    3. 多路复用通讯方式
    4. 异步通讯NIO
    5. 零拷贝(DIRECT BUFFERS使用堆外直接内存)
    6. 内存池(基于内存池的缓冲区重用机制)
    7. 高效的Reactor线程模型
    8. 无锁设计、线程绑定
    9. 高性能的序列化框架
    10. Netty RPC实现
    11. 关键技术
    12. 核心流程
    13. 消息编解码
    14. 通讯过程
    15. RMI实现方式
    16. 实现步骤
    17. Protoclol Buffer
    18. Thrift

    分布式缓存

    1. 缓存雪崩
    2. 缓存穿透
    3. 缓存预热
    4. 缓存更新
    5. 缓存降级

    网络

    1. 网络7层架构
    2. TCP/IP原理
    3. 网络访问层(Network Access Layer)
    4. 网络层(Internet Layer)
    5. 传输层(Tramsport Layer-TCP/UDP)
    6. 应用层(Application Layer)
    7. TCP三次握手/四次挥手
    8. HTTP原理
    9. 传输流程
    10. HTTP状态
    11. HTTPS
    12. CDN 原理
    13. 分发服务系统
    14. 负载均衡系统
    15. 管理系统

    日志

    1. Slf4j
    2. Log4j
    3. LogBack
    4. Logback优点
    5. ELK

    Zookeeper

    1. Zookeeper概念
    2. Zookeeper角色
    3. Leader
    4. Follower
    5. Observer
    6. ZAB协议
    7. 事务编号 Zxid(事务请求计数器+ epoch)
    8. epoch
    9. Zab协议有两种模式-恢复模式(选主)、广播模式(同步)
    10. ZAB协议4阶段
    11. Leader election(选举阶段-选出准Leader)
    12. ZAB协议JAVA实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段))
    13. 投票机制
    14. Zookeeper工作原理(原子广播)
    15. Znode有四种形式的目录节点

    Kafka

    1. Kafka概念
    2. Kafka数据存储设计
    3. partition的数据文件(offset,MessageSize,data)
    4. 数据文件分段segment(顺序读写、分段命令、二分查找)
    5. 数据文件索引(分段索引、稀疏存储)
    6. 生产者设计
    7. 负载均衡(partition会均衡分布到不同broker上)
    8. 批量发送
    9. 压缩(GZIP或Snappy)
    10. 消费者设计
    11. Consumer Group

    RabbitMQ

    1. RabbitMQ概念
    2. RabbitMQ架构
    3. Exchange 类型

    Hbase

    1. Hbase概念
    2. 列式存储
    3. Hbase核心概念
    4. Hbase核心架构
    5. Hbase的写逻辑
    6. HBase vs Cassandra
    7. MongoDB
    8. MongoDB概念
    9. MongoDB特点

    Cassandra

    1. Cassandra概念
    2. 数据模型
    3. Cassandra一致Hash和虚拟节点
    4. Gossip协议
    5. 数据复制
    6. 数据写请求和协调者
    7. 数据读请求和后台修复
    8. 数据存储(CommitLog、MemTable、SSTable)
    9. 二级索引(对要索引的value摘要,生成RowKey)
    10. 数据读写

    设计模式

    1. 设计原则
    2. 工厂方法模式
    3. 抽象工厂模式
    4. 单例模式
    5. 建造者模式
    6. 原型模式
    7. 适配器模式
    8. 装饰器模式
    9. 代理模式
    10. 外观模式
    11. 桥接模式
    12. 组合模式
    13. 享元模式
    14. 策略模式
    15. 模板方法模式
    16. 观察者模式
    17. 迭代的模式
    18. 责任链模式
    19. 命令模式
    20. 备忘录模式

    负载均衡

    1. 四层负载均衡 vs 七层负载均衡
    2. 负载均衡算法/策略
    3. LVS
    4. Keepalive
    5. Nginx反向代理负载均衡
    6. HAProxy

    数据库

    1. 存储引擎
    2. 索引
    3. 数据库三范式
    4. 数据库是事务
    5. 存储过程(特定功能的SQL 语句集)
    6. 触发器(一段能自动执行的程序)
    7. 数据库并发策略
    8. 数据库锁
    9. 基于Redis分布式锁
    10. 分区分表
    11. 两阶段提交协议
    12. 三阶段提交协议
    13. 柔性事务
    14. CAP

    一致性算法

    1. Paxos
    2. Zab
    3. Raft
    4. NWR
    5. Gossip
    6. 一致性Hash
    7. 一致性Hash特性
    8. 一致性Hash原理

    JAVA算法

    1. 二分查找
    2. 冒泡排序算法
    3. 插入排序算法
    4. 快速排序算法
    5. 希尔排序算法
    6. 归并排序算法
    7. 桶排序算法
    8. 基数排序算法
    9. 剪枝算法
    10. 回溯算法
    11. 最短路径算法
    12. 最大的数组算法
    13. 最长公共子序算法
    14. 最小生成树算法

    数据结构

    1. 栈(stack)
    2. 队列(queue)
    3. 链表(Link)
    4. 散列表(Hash Table)
    5. 排序二叉树
    6. 红黑树
    7. B-TREE
    8. 位图

    加密算法

    1. AES
    2. RSA
    3. CRC
    4. MD5

    Hadoop

    1. Hadoop概念
    2. HDFS
    3. Client
    4. NameNode
    5. Secondary NameNode
    6. DataNode
    7. MapReduce
    8. JobTracker
    9. TaskTracker
    10. Task
    11. Reduce Task 执行过程
    12. Hadoop MapReduce 作业的生命周期
    13. 作业提交与初始化
    14. 任务调度与监控。
    15. 任务运行环境准备
    16. 任务执行
    17. 作业完成

    Spark

    1. Spark概念
    2. 核心架构
    3. 核心组件
    4. SPARK编程模型
    5. SPARK计算模型
    6. SPARK运行流程
    7. SPARK RDD流程
    8. SPARK RDD

    Storm

    1. Storm概念
    2. 集群架构
    3. Nimbus(master-代码分发给Supervisor)
    4. Supervisor(slave-管理Worker进程的启动和终止)
    5. Worker(具体处理组件逻辑的进程)
    6. Task
    7. ZooKeeper
    8. 编程模型(spout->tuple->bolt)
    9. opology运行
    10. Storm Streaming Grouping
    11. ResourceManager
    12. NodeManager
    13. ApplicationMaster
    14. YARN运行流程

    机器学习

    1. 决策树
    2. 随机森林算法
    3. 逻辑回归
    4. SVM
    5. 朴素贝叶斯
    6. K 最近邻算法
    7. K 均值算法
    8. Adaboost 算法
    9. 神经网络
    10. 马尔可夫

    云计算

    1. SaaS
    2. PaaS
    3. IaaS
    4. Docker
    5. Openstack
    6. Namespaces
    7. 进程(CLONE_NEWPID 实现的进程隔离)
    8. Libnetwork与网络隔离
    9. 资源隔离与CGroups
    10. 镜像与UnionFS
    11. 存储驱动

    总结

    虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

    上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料都是免费分享的,有需要学习的小伙伴可以直接点点点点点这里免费下载

    程隔离)
    8. Libnetwork与网络隔离
    9. 资源隔离与CGroups
    10. 镜像与UnionFS
    11. 存储驱动

    总结

    虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

    [外链图片转存中…(img-voTB9ker-1626279164529)]

    [外链图片转存中…(img-9CfJcD1I-1626279164532)]

    上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料都是免费分享的,有需要学习的小伙伴可以直接点点点点点这里免费下载

    有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

    展开全文
  • POI 导出excel文件下拉框问题 1.https://blog.csdn.net/sdaujsj1/article/details/81004209 java导出Excel合并单元格 2https://blog.csdn.net/datangxiajun/article/details/78308979
  • java导出excel合并单元格及设置

    千次阅读 2019-04-23 15:16:12
    功能是导出表格 package checkout_excel; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class MainOut { public static void main(String args[]){ //...
  • java导出excel合并单元格

    千次阅读 2018-12-31 13:17:32
    1、java导出excel用到POI所有jar包 ,大家可以直接到下面地址下载点击打开链接 2、导出excel的方法 package org; import java.io.FileOutputStream; import java.util.List; import org.apache.poi.hssf....
  • 主要给大家介绍了关于java实现合并单元格的同时并导出excel的相关资料,文中先进行了简单的介绍,之后给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
  • 1、引入maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>...2、此处我们以合并多行数据为例,效果如下: .
  • Java的技术体系主要由支撑Java程序运行的虚拟机,提供各开发领域接口支持的Java,Java编程语言及许多第三方Jvav框架构成。 其中,以Java的虚拟器为今天的着重点 以下是我整理收藏的一些JVM大厂面试经典问题与相应答案...
  • 参考代码cellStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setBorderBottom(HSSFCellStyle....
  • 首先,看一下期望达到的效果: ...import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; /** * Created with IntelliJ IDEA. * * @Auther: zp * @Date: 2021/05/25/18:1.
  • 支持大数据量导出excel。自动合并相同数据单元格,可根据id自动识别是否合并,支持自定义类型数据转换,根据实体类自动识别。
  • JAVA excel合并单元格原生poi 合并后的效果 直接上代码 (该方法为如果指定行的单元格里面的值一致则进行合并,直接粘贴使用即可) * * @param sheet * @param colIdx 合并的列 * @param startRow 起始行 * @...
  • 合并单元格添加边框 RegionUtil.setBorderTop(1 , cellRange, sheet, workbook); RegionUtil.setBorderBottom( 1 , cellRange, sheet, workbook); RegionUtil.setBorderLeft( 1 , cellRange, sheet, workbook)...
  • * @param mergeColumns 合并单元格的列 */ public void createExcel ( String [ ] headers , List < Map < String , String > > dataset , String [ ] mergeColumns , HttpServletResponse ...
  • excel poi工具类 导入 导出 合并单元格 计算公式
  • 主要介绍了Java导出excel合并同一列中相同内容的行,需要的朋友可以参考下
  • easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
  • 1、poi导出Excel 2、合并单元,根据自己业务进行处理 3、设置自动列宽 ExportExcelUtils import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,230
精华内容 2,092
关键字:

java导出excel合并单元格

java 订阅