POI做导出Excel设置单元格中字体大小颜色,合并行列

public class ExcelTest {
  /**  
  * @param args  
  */  
  public static void main(String[] args) throws IOException {   
 
      try {   
          HSSFWorkbook wb = new HSSFWorkbook();   
          HSSFSheet sheet = wb.createSheet("new   sheet");   
          HSSFCellStyle style = wb.createCellStyle(); // 样式对象   
 
          style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直   
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平   
          /**字体begin*/
          style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
          //背景颜色
//          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//          style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//          style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         
          //生成一个字体
          HSSFFont font=wb.createFont();
          font.setColor(HSSFColor.BLACK.index);//HSSFColor.VIOLET.index //字体颜色
          font.setFontHeightInPoints((short)12);
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         //字体增粗
         //把字体应用到当前的样式
          style.setFont(font);
          /**字体end*/
          HSSFRow row = sheet.createRow((short) 0);   
          HSSFRow row2 = sheet.createRow((short) 1);   
         
          // 四个参数分别是:起始行,起始列,结束行,结束列   
          sheet.addMergedRegion(new Region(0, (short) 0, 5, (short) 0));   
          HSSFCell ce = row.createCell((short) 0);   
          ce.setCellValue("项目\\日期"); // 表格的第一行第一列显示的数据   
          ce.setCellStyle(style); // 样式,居中   
          int num = 0;   
          for (int i = 0; i < 9; i++) { // 循环9次,每一次都要跨单元格显示   
              // 计算从那个单元格跨到那一格   
              int celln = 0;   
              int celle = 0;   
              if (i == 0) {   
                  celln = 0;   
                  celle = 1;   
              } else {   
                  celln = (i * 2);   
                  celle = (i * 2 + 1);   
              }   
              // 单元格合并   
              // 四个参数分别是:起始行,起始列,结束行,结束列   
              sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,   
                      (short) (celle + 1)));   
              HSSFCell cell = row.createCell((short) (celln + 1));   
              cell.setCellValue("merging" + i); // 跨单元格显示的数据   
              cell.setCellStyle(style); // 样式   
              // 不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”   
              HSSFCell cell1 = row2.createCell((short) celle);   
              HSSFCell cell2 = row2.createCell((short) (celle + 1));   
              cell1.setCellValue("数量");   
              cell1.setCellStyle(style);   
              cell2.setCellValue("金额");   
              cell2.setCellStyle(style);   
              num++;   
          }   
 
          // 在后面加上合计百分比   
 
          // 合计 在最后加上,还要跨一个单元格     //四个参数分别是:起始行,起始列,结束行,结束列   
          sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,   
                  (short) (2 * num + 2)));   
          HSSFCell cell = row.createCell((short) (2 * num + 1));   
          cell.setCellValue("合计");   
          cell.setCellStyle(style); 
          HSSFCell cell1 = row2.createCell((short) (2 * num + 1));   
          HSSFCell cell2 = row2.createCell((short) (2 * num + 2));   
          cell1.setCellValue("数量");   
          cell1.setCellStyle(style);   
          cell2.setCellValue("金额");   
          cell2.setCellStyle(style);   
 
          // 百分比 同上   
          sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,   
                  (short) (2 * num + 4)));   
          HSSFCell cellb = row.createCell((short) (2 * num + 3));   
          cellb.setCellValue("百分比");   
          cellb.setCellStyle(style);   
          HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));   
          HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));   
          cellb1.setCellValue("数量");   
          cellb1.setCellStyle(style);   
          cellb2.setCellValue("金额");   
          cellb2.setCellStyle(style); 
         
          //输出一些数据 然后再输出表头
         
          FileOutputStream fileOut = new FileOutputStream("D://workbook.xls");   
          wb.write(fileOut);   
          fileOut.close();   
          System.out.print("OK");   
      } catch (Exception ex) {   
          ex.printStackTrace();   
      }   
 
  }   
 

 

 

//设置单元格字体颜色

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CreationHelper;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.RichTextString;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

public class test {

public static void main(String[] args) {

Workbook workbook = new HSSFWorkbook();

Sheet sheet = workbook.createSheet();

Cell cell = sheet.createRow(0).createCell(0);

CreationHelper helper = workbook.getCreationHelper();

RichTextString str = helper.createRichTextString("a\nb\nc\nd\ne\n");// 在这里使用\n表示回车

Font[] fonts = new Font[5];

fonts[0] = workbook.createFont();

fonts[0].setColor(HSSFColor.YELLOW.index);

fonts[1] = workbook.createFont();

fonts[1].setColor(HSSFColor.RED.index);

fonts[2] = workbook.createFont();

fonts[2].setColor(HSSFColor.BLUE.index);

fonts[3] = workbook.createFont();

fonts[3].setColor(HSSFColor.ROSE.index);

fonts[4] = workbook.createFont();

fonts[4].setColor(HSSFColor.BLACK.index);

for (int i = 0; i < 5; i++) {

str.applyFont(i * 2, (i + 1) * 2, fonts[i]);

}

cell.setCellValue(str);

try {

FileOutputStream out = new FileOutputStream(new File("d:\\1.xls"));

workbook.write(out);

out.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值