电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> java>>java操作Excel的神奇之路:

java操作Excel的神奇之路

来源:网络 | 2007-5-27 | (有2712人读过)

本文档适用于有一定开发经验和擅于思考的人阅读!  
    只要有表格,就会有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("标题"); 

  


    
java热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号