使用poi将数据导出为excel文件的几点注意

本文介绍使用Apache POI库处理Excel时遇到的常见问题及其解决方案,包括如何解决sheet选项卡中文乱码、cell单元格中文乱码问题,并提供了解决单元格合并后不显示边框的方法。

最近做项目要用到poi将数据导成excel文件,就遇到的几点麻烦的问题,发表下自己的意见。一般的用法,请使用google搜索,答案很多。

 1,sheet选项卡的中文乱码问题,解决办法

   

HSSFWorkbook wb = new HSSFWorkbook();    // create the new Workbook
HSSFSheet sheet0 = null;
HSSFSheet sheet1 
= null;
sheet0 
= wb.createSheet();         // create 1-2sheet
sheet1 = wb.createSheet();

wb.setSheetName(
0"接受委托迁改", HSSFCell.ENCODING_UTF_16);   //为sheet命名,避免中文乱码
wb.setSheetName(1"迁改方案", HSSFCell.ENCODING_UTF_16);

 

2,cell.setCellValue();时出现中文乱码,解决方法:

cell.setEncoding(HSSFCell.ENCODING_UTF_16); //这是解决这个问题的关键

cell.setCellValue("迁改方案审查日期:");

 

3,单元格合并后,不显示边框的问题,解决方法

不显现边框是由于,你合并后,没有为边缘部分的cell设置边框,而导致:

例如:

合并一个2行3列的 cell

先设置样式:

/**
     * setCellStyle 方法
     * <p>设置普通样式</p>
     * @param style
     
*/

    
private static void setCellStyle(HSSFCellStyle style) {
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);                         
//水平居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);              //垂直居中

        
//设置单无格的边框为粗体,边框颜色
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBottomBorderColor(HSSFColor.BLACK.index);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setLeftBorderColor(HSSFColor.BLACK.index);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setRightBorderColor(HSSFColor.BLACK.index);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setTopBorderColor(HSSFColor.BLACK.index);

        style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);         
// 设置单元格背景色;
        style.setWrapText(true);                                               //文本区域随内容多少自动调整

        
    }

设置字体:

 

private static void setFontStyle1(HSSFFont font) {
        font.setColor(HSSFFont.COLOR_NORMAL);                                   
// 设置单元格字体的颜色.
        font.setFontHeight((short180);                                        // 设置字体大小
        font.setFontName("Courier New");                                        // 设置单元格字体   
    }

合并:

 

public static void twoRowThreeCon(HSSFWorkbook wb , HSSFSheet sheet){
         
//设置1-3列的宽度
        sheet.setColumnWidth((short0, (short) ((30 * 8/ ((double1 / 115)));
        sheet.setColumnWidth((
short1, (short) ((30 * 8/ ((double1 / 15)));
        sheet.setColumnWidth((
short2, (short) ((30 * 8/ ((double1 / 15)));

        
// 创建字体格式
        HSSFFont font = wb.createFont(); 
        setFontStyle(font);
  
         
// 创建单元格风格
          HSSFCellStyle style = wb.createCellStyle();
          style.setFont(font); 
           setCellStyle(style);
       
        
forint i = 0 ; i < 2 ; i ++){
                     row 
= sheet.createRow(countrow);
                     row.setHeight((
short0x200);    //设置行高
                 for(int j = 0 ; j < 3 ; j++){
                                 cell 
= row.createCell((short)k);
                                 cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellStyle(style);      
                                 
if(i==0&&j==0){
                                            cell.setCellValue(
"..........................");    //给合并后的单元格赋值
                                  }

                      }

           }


        
//合并,指定合并区域,前二个参数为开始处X,Y坐标.后二个为结束的坐标.
    sheet.addMergedRegion(new Region(0, (short0,1 , (short) 2));                     
}

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值