POI导出excel

只需修改值contentList和合并便可

public HSSFWorkbook getOrderExport() {   

       HSSFWorkbook workbook = new HSSFWorkbook();
       //头部字体
        HSSFFont titleFont = workbook.createFont(); 
        titleFont.setColor(HSSFFont.SS_NONE);
        titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
       //头部样式
       HSSFCellStyle titleStyle = workbook.createCellStyle(); 
       titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);  //内容排列的方式
       titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
       titleStyle.setFont(titleFont); 
       titleStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
       titleStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
       titleStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
       titleStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
       //内容字体
       HSSFFont contentFont = workbook.createFont(); 
       titleFont.setColor(HSSFFont.SS_NONE);

       //内容(文字类型)样式
       HSSFCellStyle contentStrStyle = workbook.createCellStyle(); 
       contentStrStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //内容排列的方式
       contentStrStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
       contentStrStyle.setFont(contentFont); 
       contentStrStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
       contentStrStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
       contentStrStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
       contentStrStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框

       //内容(数字类型-金额)样式
       HSSFCellStyle contentMoneyStyle = workbook.createCellStyle(); 
       contentMoneyStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);  //内容排列的方式
       contentMoneyStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
       contentMoneyStyle.setFont(contentFont); 
       contentMoneyStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
       contentMoneyStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
       contentMoneyStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
       contentMoneyStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
       HSSFDataFormat fmt = workbook.createDataFormat();
       contentMoneyStyle.setDataFormat(fmt.getFormat("#,##0.00"));

       //内容(数字类型-数量)样式
       HSSFCellStyle contentNumStyle = workbook.createCellStyle(); 
       contentNumStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);  //内容排列的方式
       contentNumStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
       contentNumStyle.setFont(contentFont); 
       contentNumStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
       contentNumStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
       contentNumStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
       contentNumStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框

       HSSFSheet sheet = workbook.createSheet("sheet0");//创建一个sheet
       HSSFRow row = null;
       HSSFCell cell = null;




         //获取数据 
       List<Order> list =new ArrayList();
       Order order =new Order();
       order.setId("11123123");
       order.setOrderNum("11313");
       order.setQuantity(12);
       order.setAmount(12.2f);
       order.setStatus(1);
       Customer c=new Customer();
       c.setUsername("admin");
       c.setPassword("admin");
       order.setCustomer(c);

       Order order2 =new Order();
       order2.setId("11123123");
       order2.setOrderNum("11313");
       order2.setQuantity(12);
       order2.setAmount(12.2f);
       order2.setStatus(1);
       Customer c1=new Customer();
       c1.setUsername("admin");
       c1.setPassword("admin");
       order2.setCustomer(c1);

       list.add(order);
       list.add(order2);
       String[] title = new String[]{};//头部字段数组
       Integer[] tauto = new Integer[]{};//头部宽度需要自适应的单元格数组
       String[] celltype = new String[]{};//内容是否为数字格式显示的单元格数组(字符串:"string",数字-整型:"int",数字-金额:"money")
       inttitleRowNum = 0;//标题栏头部的行数    
       List<String[]> contentList = new ArrayList<String[]>();//存储数据的list


       titleRowNum = 1;//表头行数
       //设置自动调整宽度
       tauto = new Integer[]{0,3,4,5};
       title = new String[]{"id编号","订单号","数量","付款总金额",    //表头
              "订单状态","订单所属客户"};
       celltype = new String[]{"string","string","string","string","string","string"};  //表头类型


       //迭代数据到List数组
       for(Order obj: list){          
           String[] content = new String[]{
                  obj.getId(),
                  obj.getOrderNum(),
                  String.valueOf(obj.getQuantity()),
                  String.valueOf(obj.getAmount()),
                  String.valueOf(obj.getStatus()),
                  obj.getCustomer().getUsername()
           };
           contentList.add(content);//添加到list
       }


       //设置title宽度自动适应
       for(inti:tauto){
           sheet.autoSizeColumn(i);
       }

       //创建表头
       row = sheet.createRow(titleRowNum-1);  //创建行
       for(intt=0;t<title.length;t++){
           cell = row.createCell(t); //创建第row行的t列:
           cell.setCellStyle(titleStyle);//表头行用的样式
           cell.setCellValue(title[t]);//列值
       }
       //锁定头部
       for(inti=0;i<=titleRowNum;i++){
           sheet.createFreezePane(0,titleRowNum);//锁定头
       }

       //创建内容
       for(inti=0;i<contentList.size();i++){
           String[] contentAttr = contentList.get(i);

           row = sheet.createRow(i+titleRowNum);//创建行
           for(intj=0;j<contentAttr.length;j++){   //循环插入数据
              cell = row.createCell(j);
              String contentValue = contentAttr[j].trim();
              //根据表头类型格式化值  以及样式
              if("int".equals(celltype[j])){
                  cell.setCellStyle(contentNumStyle);
                  cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
              }elseif("money".equals(celltype[j])){
                  cell.setCellStyle(contentMoneyStyle);
                  cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                  //contentValue = MoneyUtil.formatMoney(contentValue);
                  contentValue = contentValue;
              }else{
                  cell.setCellStyle(contentStrStyle);
                  cell.setCellType(HSSFCell.CELL_TYPE_STRING);
              }
              cell.setCellValue(contentValue);
           }
       }

       //合并单元格  根据Id相同来合并   
        for(inti =0;i<contentList.size();i++){  //存储值的list
               String [] content =contentList.get(i);  //获取第一组值
               intnext =0;//标记结束的行
               inttitleRows=1; //表头行
               introwsBegin=titleRows+i;//开始合并的行
               introwsEnd=0;//结束合并的行;

               String currentId = content[0];//当前行的id的Id
              for(intj=i+1;j<contentList.size();j++){
                 String [] currentId_j =contentList.get(j);
                 if(currentId.equals(currentId_j[0])){ //ID相等
                     rowsEnd=titleRows+j;
                     next=j;
                 }
              }    

               //合并
              if(rowsEnd>1){
                 //合并方法 sheet.addMergedRegion(CellRangeAddress region)
               //CellRangeAddress构造方法   四个值,分别是首行、最后一行、首列、最后一列
                 //合并ID                                                                  
                 sheet.addMergedRegion(new CellRangeAddress(rowsBegin,rowsEnd,0,0));     
                 //合并订单所属客户
                 sheet.addMergedRegion(new CellRangeAddress(rowsBegin,rowsEnd,5,5));
              }
              if(next>0){
                 i=next;  //跳转到结束行的下一行 
              }
        }

       return workbook;
           }

导出结果:

导出结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java的POI导出Excel文件的步骤: 1. 首先,需要在项目中引入POI的依赖,可以通过Maven或手动下载jar包的方式引入。 2. 创建一个工作簿对象,可以通过HSSFWorkbook或XSSFWorkbook类来创建,前者用于创建xls格式的Excel文件,后者用于创建xlsx格式的Excel文件。 3. 创建一个工作表对象,可以通过工作簿对象的createSheet()方法来创建。 4. 创建行和单元格对象,可以通过工作表对象的createRow()和createCell()方法来创建。 5. 设置单元格的值,可以通过单元格对象的setCellValue()方法来设置。 6. 将工作簿对象写入到输出流中,可以通过工作簿对象的write()方法来实现。 以下是一个简单的示例代码,用于将数据导出Excel文件中: ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class ExcelExporter { public static void export() throws IOException { // 创建工作簿对象 Workbook workbook = new HSSFWorkbook(); // 创建工作表对象 Sheet sheet = workbook.createSheet("Sheet1"); // 创建行对象 Row row = sheet.createRow(0); // 创建单元格对象 Cell cell = row.createCell(0); // 设置单元格的值 cell.setCellValue("Hello, World!"); // 将工作簿对象写入到输出流中 FileOutputStream fos = new FileOutputStream("output.xls"); workbook.write(fos); fos.close(); } } ``` 调用export()方法即可将数据导出到名为output.xls的Excel文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值