Quantcast
Channel: 尘封的记忆
Viewing all articles
Browse latest Browse all 46

Java操作Excel完美解决方案---Jakarta POI

$
0
0

java操作Excel的神奇之路

转载自:http://www.java3z.com/cwbwebhome/article/firend/fw1.jsp

本文档适用于有一定开发经验和擅于思考的人阅读!

只要有表格,就会有Microsoft Excel,用Microsoft Excel处理数据已成为不少人的习惯。

Jakarta POI API就为Java程序员提供了一条存取Microsoft文档格式的神奇之路,

其中最成熟的就是能存取Microsoft Excel文档的HSSF API。

本篇文章就举例示范如何利用Java 创建和读取Excel文档,并设置单元格的字体和格式。

为了保证示例程序的运行,必须安装Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站点是: http://jakarta.apache.org/poi/

如果没有找到包的朋友,可以加我的 QQ:107213911(24小时在线) 或者邮件联系 hehai.520@163.com

免费放送!

操作Excel的原理大体是这样:

1.创建一个Excel文件

2.读取Excel文件

3.进行读出和写入操作

应该就这么简单!

网上有此类文档,不过没有我的完全,可以将示例:CreateXL.java 直接放在工程下即可运行!

也可以根据自己需要更改.

示例中有关于表名设置为中文的问题迟迟没有解决,望大虾们指点.

这是本人第一次在网上发布文档,很希望朋友们多意见!

也希望站长指正后发布!

可能表述有些问题,如有不明白的朋友,请联系我!

示例: CreateXL.java

/** * Copyright by 2006 A&D. * writer: hike. */package comm;//如需设置字体,请导入以下两个包//import org.apache.poi.hssf.usermodel.HSSFCellStyle;//import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFCell;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class CreateXL { /**   *    *解决中文问题   */ public static String getUnicode(String toEncoded,String encoding){     String retString="";     if(toEncoded.equals("")||toEncoded.trim().equals(""))     {       return toEncoded;     }     try     {     byte[] b=toEncoded.getBytes(encoding);     sun.io.ByteToCharConverter    convertor=sun.io.ByteToCharConverter.getConverter(encoding);     char [] c=convertor.convertAll(b);     for(int i=0;i< c.length;i++)     {       retString+=String.valueOf(c[i]);     }     }catch(java.io.UnsupportedEncodingException usee)     {      System.out.println("不支持"+encoding+"编码方式");      usee.printStackTrace();     }catch(sun.io.MalformedInputException mfie)     {      System.out.println("输入参数无效!!!");      mfie.printStackTrace();     }     return retString; } /**   * 写入EXCEL   */ //Excel 文件要存放的位置,假定在D盘JTest目录下 public static String UPath="D:\\JTest"; //工作簿名称,可以取中文(就是另存为名称). public static String outputFile="D:/JTest/test.xls"; public static void main(String argv[]){   try{    // 如果UPath不存在,则创建路径    if(!new java.io.File(UPath).isDirectory()){     new java.io.File(UPath).mkdirs();     }        File objFile = new File(outputFile);        HSSFWorkbook workbook = null;        HSSFSheet sheet = null;        String table_name = "sheet1";        //创建文件    if(!objFile.exists()){     //文件不存在     //创建新的Excel 工作簿     System.out.println("检测到文件不存在,正在创建文件...");     workbook = new HSSFWorkbook();     //在Excel工作簿中建一工作表,其名为缺省值     //如要新建一名为"效益指标"的工作表,其语句为:     //HSSFSheet sheet = workbook.createSheet("效益指标");     //上一句是来自网上,其实表名并不支持中文,转换后也不行!     //如有人已解决,请给出,谢谢!     sheet = workbook.createSheet(table_name);          //新建一输出文件流     FileOutputStream fOut = new FileOutputStream(outputFile);          //把相应的Excel 工作簿存盘     workbook.write(fOut);     fOut.flush();          //操作结束,关闭文件     fOut.close();     }        //如果文件存在,将直接插入数据.    //创建对Excel工作簿文件的引用    workbook = new HSSFWorkbook(new FileInputStream(outputFile));        //创建对工作表的引用。    //本例是按名引用(让我们假定那张表有着缺省名"Sheet1")    sheet = workbook.getSheet(table_name);        //也可用getSheetAt(int index)按索引引用,    //在Excel文档中,第一张工作表的缺省索引是0,    //其语句为:HSSFSheet sheet = workbook.getSheetAt(0);    //读取左上端单元    //行和列都是以'0'开头,比如A1为'00'    for(int i=0; i< 2; i++){     for(int j=0; j< 5; j++){            //这儿,你可以测试读出一个已存在文件      //HSSFRow row = sheet.getRow(i);      //HSSFCell cell = row.getCell((short)j);      //输出单元内容,cell.getStringCellValue()就是取所在单元的值      //System.out.println("左上端单元是: " + cell.getStringCellValue());            //在索引0的位置创建行(最顶端的行)      //这儿,测试插入数据      //插入之前必需先创建      HSSFRow row = sheet.createRow((short)i);      //在索引0的位置创建单元格(左上端)      HSSFCell cell = row.createCell((short)j);            //在创建之后可以设置单元格格式      //具体用法将附于文档后面.      //记得要导入包            //定义单元格为字符串类型      //这两名非常重要,缺少,则不能显示中文,      //即使你调用编码转换方法,也不行.      cell.setCellType(HSSFCell.CELL_TYPE_STRING);      //指定编码格式      cell.setEncoding(HSSFCell.ENCODING_UTF_16);            //在单元格中输入一些内容      String text = ""+i+j+"";      //调用编码转换方法,只针对中文      text = getUnicode(text,"gb2312");      cell.setCellValue(text);            //新建一输出文件流      FileOutputStream fOut = new FileOutputStream(outputFile);            //把相应的Excel 工作簿存盘      workbook.write(fOut);      fOut.flush();            // 操作结束,关闭文件      fOut.close();      }     }        System.out.println("文件已生成!");    }   catch(Exception e) {    System.out.println("已运行 xlCreate() : " + e );    }   } }设置单元格格式

在这里,我们将只介绍一些和格式设置有关的语句,

我们假定workbook就是对一个工作簿的引用。在Java中,

第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:

例用开发工具追踪器,可以查看更多参数,自己慢慢去研究!

1、创建字体,设置其为红色、粗体:

HSSFFont font = workbook.createFont();

font.setColor(HSSFFont.COLOR_RED);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

2、创建格式

HSSFCellStyle cellStyle= workbook.createCellStyle();

cellStyle.setFont(font);

3、应用格式

HSSFCell cell = row.createCell((short) 0);

cell.setCellStyle(cellStyle);

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

cell.setCellValue("标题");


Viewing all articles
Browse latest Browse all 46

Trending Articles