【永恒的瞬间】
☜Give me hapy ☞

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

HSSFCellStyle类代表一种单元格样式。可以通过这些类来设置单元格的边框样式、背景颜色、字体、水平和垂直方式的对齐。
如:
          HSSFWorkbook workbook = new HSSFWorkbook();    //建立一个工作薄
          HSSFCellStyle titleStyle=workbook.createCellStyle();     //在工作薄的基础上建立一个样式
          titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);    //设置边框样式
          titleStyle.setBorderLeft((short)1);     //左边框
          titleStyle.setBorderRight((short)1);    //右边框
          titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);    //顶边框
          titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);    //填充的背景颜色
          titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);    //填充图案

假设什么定义了一个样式,想在填充第一个单元格的时候填充红,第二格单元格填充蓝色。
如果:
          HSSFCellStyle cellStyle = workbook.createCellStyle();    //创建一个样式

          cellStyle.setFillForegroundColor(HSSFColor.RED.index);    //设置颜色为红色
          cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

          HSSFCell cell1 = row.createCell((short)1);     //给单元格cell1填充红色
          cell1.setCellStyle(cellStyle);

若:       cellStyle.setFillForegroundColor(HSSFColor.BLUE.index);    //设置颜色为蓝色
        
          HSSFCell cell2 = row.createCell((short)2);    //给单元格cell2填充蓝色
          cell2.setCellStyle(cellStyle);

这个时候会出现的现象是单元格cell1和cell2都变成了蓝色。遇到这种情况,要预先定义两种不同的单元格样式。


当一个EXCEL文件同时需要很多大同小异的单元格样式时,这样一一定义很麻烦。POI HSSF提供了一个HSSFCellUtil类(在org.apache.poi.           hssf.usermodel.contrib包),里面有几个方法可以绕过HSSFCellStyle直接设定单元格的样式,但这几个方法会抛出NestableException异           常,要处理这个异常,需要引用Apache的几个Common包:
commons-beanutils.jar
commons-beanutils-bean-collections.jar
commons-beanutils-core.jar
commons-lang.jar
commons-logging-api.jar

以下是其他各种情况的处理:
1、中文处理:
要在通过POI生成的EXCEL中正常显示中文,需要为单元格设置编码:
          cell.setEncoding(HSSFCell.ENCODING_UTF_16);
          cell.setCellValue("部门");

2、合并单元格:
HSSFSheet.addMergedRegion(new Region())方法可以合并单元格,Region()中的一个构造函数含有四个参数,分别代表起始行、起始列、结束        行、结束列:
          sheet.addMergedRegion(new Region(initRow, (short)(initCol-2), initRow + lists.size() - 1, (short)(initCol-2)));

3、公式的处理:
HSSFCell.setCellFormula()方法用来在EXCEL单元格中写入公式。
          cell = row.createCell((short)(dataFlag));
          cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
              cell.setCellFormula("SUM(" + getColLetter(initCol) + (listFlag+1) +":" + getColLetter(dataFlag-1) + (listFlag+1) +                   ")");
          cell.setCellStyle(nameStyle);

4、链接的处理:
在POI中往单元格中写链接,是用HYPERLINK函数搞定的。
HYPERLINK函数包含两个参数,第一个参数是指向的URL地址,第二个参数是显示字串。
     cell = row.createCell((short)(dataFlag));
     cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
     cell.setCellFormula("HYPERLINK(\"
http://www.xxxxx.com/xxx.jsp?id=1\",\"homepage\")");
     cell.setCellStyle(linkStyle);
为了使链接效果更好,我们可以给链接所在单元格定义一种样式,使链接显示为有下划线的蓝色字串:
    HSSFCellStyle linkStyle = workbook.createCellStyle();
    linkStyle.setBorderBottom((short)1);
    linkStyle.setBorderLeft((short)1);
    linkStyle.setBorderRight((short)1);
    linkStyle.setBorderTop((short)1);
    linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
    linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    HSSFFont font = workbook.createFont();
    font.setFontName(HSSFFont.FONT_ARIAL);
    font.setUnderline((byte)1);
    font.setColor(HSSFColor.BLUE.index);
    linkStyle.setFont(font);

关于代码对应的颜色如下:

posted on 2007-04-25 19:18 ☜♥☞MengChuChen 阅读(2048) 评论(0)  编辑  收藏 所属分类: java_code

只有注册用户登录后才能发表评论。


网站导航: