`
rain_2372
  • 浏览: 683024 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java操作excel(HSSF样式) .

    博客分类:
  • java
阅读更多
java操作excel(HSSF样式一)
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);





另:

package *.*;   
  
import java.util.ArrayList;   
import java.util.Iterator;   
  
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.HSSFRow;   
import org.apache.poi.hssf.usermodel.HSSFSheet;   
import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  
public class FontCellStyle {   
private static HSSFFont fontStyle = null;   
private static HSSFCellStyle cellStyle = null;   
  
/*设置字体格式*/  
public static HSSFFont getHdrFont(HSSFWorkbook wb) {   
fontStyle = wb.createFont();   
fontStyle.setFontName("宋体");   
fontStyle.setFontHeightInPoints((short)20);   
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);   
return fontStyle;   
}   
public static HSSFFont getFtrFont(HSSFWorkbook wb) {   
fontStyle = wb.createFont();   
fontStyle.setFontName("宋体");   
fontStyle.setFontHeightInPoints((short)12);   
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);   
return fontStyle;   
}   
public static HSSFFont getContentFont(HSSFWorkbook wb) {   
fontStyle = wb.createFont();   
fontStyle.setFontName("宋体");   
fontStyle.setFontHeightInPoints((short)12);   
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);   
return fontStyle;   
}   
public static HSSFFont getMergeConflictFont(HSSFWorkbook wb) {   
fontStyle = wb.createFont();   
fontStyle.setFontName("Arial");   
fontStyle.setFontHeightInPoints((short)12);   
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);   
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);   
return fontStyle;   
}   
/*设置Excel单元格格式,引用到字体格式*/  
public static HSSFCellStyle getAnyCellStyle(HSSFWorkbook wb,HSSFFont font,short align,short valign,short indent,boolean wrapText) {   
cellStyle =wb.createCellStyle();   
if(font != null) cellStyle.setFont(font);   
if(align > 0) cellStyle.setAlignment(align);   
if(valign > 0) cellStyle.setVerticalAlignment(valign);   
if(indent > 0) cellStyle.setIndention(indent);   
cellStyle.setWrapText(wrapText);   
return cellStyle;   
}   
  
/*设置Excel单元格行高、列宽*/  
public static void setDefaultHighWidth(HSSFSheet sheet) {   
sheet.setDefaultRowHeightInPoints(10);   
sheet.setDefaultColumnWidth((short) 20);   
}   
public static void setDefaultCellHighWidthInRange(HSSFSheet sheet,short[] eachCellWidth,int high) {   
//假定第一行和第一行所需的单元个已经建立好了,也就是说,在这之前已经调用了DesignXlsHeaderFooter.setXlsHeader   
sheet.setDefaultRowHeightInPoints(high);//设置默认高   
/*设置各列单元格宽度*/  
for(int i = 0;i < eachCellWidth.length;i++) {   
//System.out.print(""+i+"/t");   
sheet.setColumnWidth((short) i,(short) ((eachCellWidth[i])*256));   
}   
//System.out.println();   
/*
Iterator arrayItr = eachCellWidth.iterator();
short width;
short pos = 0;
while(arrayItr.hasNext()) {
width = Short.parseShort((String)arrayItr.next());
sheet.setColumnWidth(pos,width);
pos++;
}
*/  
}//end_setDefaultCellHighWidthInRange   
}   
  
  
/*调用方式*/  
  
/*设置整体excel单元格格式*/  
  
FileOutputStream fos = null;   
try {   
fos = new FileOutputStream(rptRealPathAndName);   
} catch (FileNotFoundException e) {   
// TODO Auto-generated catch block   
//System.out.println("创建文件失败。。。");   
log.info("In WriteRptByType.writeRptTypeFive(),create file failed!!!");   
log.error(e.getMessage());   
//e.printStackTrace();   
return -1;   
}   
HSSFWorkbook workBook = new HSSFWorkbook();   
HSSFSheet sheet = workBook.createSheet();;   
workBook.setSheetName(0,"移动",HSSFWorkbook.ENCODING_UTF_16);   
HSSFCellStyle cellStyleHdr = FontCellStyle.getAnyCellStyle(workBook,FontCellStyle.getHdrFont(workBook),HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_CENTER, (short)-1, true);   
  
HSSFRow curRow = sheet.createRow(0);   
HSSFCell curCell= curRow.createCell((short)0);   
curCell.setEncoding(HSSFCell.ENCODING_UTF_16);   
curCell.setCellStyle(cellStyleHdr );   
curCell.setCellValue("可以写入汉字,无乱码");   
  
/*.............写入文件.............*/  
  
try {   
workBook.write(fos);   
fos.close();   
} catch (IOException e) {   
// TODO Auto-generated catch block   
//System.out.println("写错误。。。");   
succFlag = -1;   
log.error("报表写错误:"+e.getMessage());   
//e.printStackTrace();   

分享到:
评论

相关推荐

    org.apache.poi.hssf.converter,office转html所需包

    HSSF模型允许开发者操作工作簿(Workbook)、工作表(Sheet)、行(Row)、单元格(Cell)等对象,进行数据的读取和写入。 2. **XSSF API**:如果需要处理较新的Excel文件格式(.xlsx),则需要使用XSSF API,它是...

    JAVA解析Excel源代码.zip

    本资源"JAVA解析Excel源代码.zip"包含了用于解析Excel文件的Java源代码,可以帮助开发者理解如何在Java环境下读取、操作和分析Excel数据。下面我们将深入探讨相关知识点。 1. **Apache POI库**: Apache POI是Java...

    HSSF:纯java的Excel解决方案

    HSSF为此提供了一个理想的解决方案,它使得开发者可以在服务器端通过Java代码生成具有格式的Excel文件,而无需依赖客户端的操作系统或特定的应用程序。 Apache POI项目始于对OLE2对象的处理,HSSF作为其成熟的部分...

    java 打印 EXCEL与PDF.rar

    Java提供多种库来读取、写入和操作Excel文件,其中最常用的是Apache POI项目。Apache POI是一个开源库,支持Microsoft Office格式,包括HSSF(用于旧版的BIFF文件格式,适用于Excel 97-2003)和XSSF(用于OOXML文件...

    JAVA_poi读取Excel.pdf

    JAVA POI 读取 Excel JAVA POI 是 Apache 的一个子项目,提供了一个纯 Java 的 Excel 解决方案,可以用来读取和写入 Excel 文件。下面是关于 JAVA POI 读取 Excel 的知识点摘要。 POI 简介 POI 是 Apache 的一个...

    JAVA Excel API教程.pdf

    Java Excel API为开发者提供了强大的工具来操作Excel文件。通过合理选择库并掌握其基本和高级用法,可以极大地提高开发效率,并在企业级应用中实现高效的数据处理和报告功能。希望本教程能帮助您更好地理解和运用...

    poi操作Excel,HSSF,XSSF两种方式(.xls与.xlsx)导入导出

    使用HSSF,你可以创建新的工作簿,添加工作表,插入数据,设置单元格样式,以及执行其他与Excel相关的操作。以下是一个简单的HSSF示例: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org....

    java操作excel代码.pdf

    整体来看,上述内容涉及了通过Java和Apache POI库操作Excel文件的基本步骤,从创建Excel文档、设置样式、合并单元格,到填充数据,最后将文档写入文件系统。这些步骤和知识点适用于需要在Java应用程序中处理Excel...

    Java操作Excel电子表格

    ### Java操作Excel电子表格 #### 一、简介与背景 在日常工作中,Excel电子表格是进行数据处理的重要工具之一。由于其广泛的应用场景,很多时候我们需要通过编程的方式对Excel文件进行读写操作。Java作为一种广泛...

    java操作excel

    Java操作Excel是常见的数据处理需求,特别是在数据分析、报表生成或者数据导入导出等场景中。在Java中,我们可以借助Apache POI库来实现对Excel文件的读写操作。Apache POI是一个开源项目,提供了API来处理Microsoft...

    java的POI操作Excel文件.doc

    #### 五、HSSF样式设置 除了基本的数据操作之外,POI 还提供了丰富的样式设置功能,允许开发者自定义单元格的字体、颜色、边框等属性。例如,设置单元格的背景色和字体样式: ```java // 创建样式 HSSFCellStyle ...

    java操作excel的jar包.rar

    在Java中使用POI可以实现对Excel电子表格的强大控制,比如创建新的工作簿、修改现有数据、公式计算、样式设置等。以下是对Java操作Excel和相关技术的详细解释: 1. **Apache POI**: Apache POI 是一个Java API,...

    JAVA_POI读取操作EXCEL教程.pdf

    ### JAVA POI 读取操作EXCEL教程 #### 一、概述 `Java_Poi`是一款功能强大的开源库,主要用于处理Microsoft Excel文件。通过使用Java_Poi,开发者可以在Java应用程序中实现对Excel文件的读取、写入以及复杂的格式...

    操作Excel的jar.zip

    在Java编程环境中,有时我们需要对Excel文件进行读取、写入或者修改操作,这就需要用到特定的库。"操作Excel的jar.zip"是一个包含多种Java库的压缩包,它提供了处理Excel文件所需的功能。以下是这些库的详细介绍: ...

    java中将数据和图片导出到Excel文件

    ### Java中将数据和图片导出到Excel文件 在Java编程环境下实现数据及图片导出至Excel文件是一项常见的任务,特别是在处理报表、数据分析等场景时。本文将详细解析如何通过Java代码来完成这一过程,包括如何创建...

    Java操作Excel完美解决方案

    通过使用Jakarta POI的HSSF API,Java开发者能够轻松地实现对Excel文件的读写操作,从而极大地提高了数据处理的效率。无论是简单的数据导入导出还是复杂的报表生成,Jakarta POI都能提供强大的支持。希望本文能帮助...

    最全最实用的Java操作Excel教程

    ### Java操作Excel教程详解 #### 一、POI简介与背景 **Jakarta POI** 是Apache的一个子项目,它的主要目标是处理OLE2对象。POI提供了一组用于操作Microsoft Office文件(如Word和Excel)的Java API。其中,**HSSF*...

    java操作excel的实例

    在Java编程环境中,操作Excel是一项常见的任务,尤其在数据处理、报表生成或数据分析等领域。Excel文件格式主要有.xls(老版本)和.xlsx(新版本),两者都可以通过Java进行读写操作。以下将详细介绍如何使用Java来...

    java POI 详解

    Java POI 详解 Java POI 详解是 Java 软件工程师教育系列教程中的一个重要章节,旨在讲述 Java 中 POI 包的使用详解。...Java POI 详解为 Java 开发者提供了一个强大的工具,可以轻松地实现 Excel 文件的读写操作。

Global site tag (gtag.js) - Google Analytics