服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

2004年11月11日

最近因为项目需要,写了一个javaexcel文件的例子,里面有对日期和对公式的读取,开始的时候还真的费了不少的工夫呢,呵呵。后来知其然了之后,总算略有小成,姑且贴出来与大家共享。

不过目前还是有一个waring:就是读取merge型数据的时候报[warning] unknown ptg 2d (45) 不知谁有解决的办法,我先扔块砖,有玉的尽管砸过来就是了。

 

package com.zzxy.model;

import java.io.fileinputstream;

import java.io.fileoutputstream;

 

import java.text.decimalformat;

 

import java.util.date;

import org.apache.poi.hssf.record.formularecord;

import org.apache.poi.hssf.record.formula.areaptg;

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

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

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

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

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

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

//import org.apache.poi.hssf.usermodel.hssfdataformat;

import org.apache.poi.hssf.record.calccountrecord;

 

/**

 *

 * author

 *

 * java读取excel文件

 *

 * 一个excel文件的层次:excel文件->工作表->->单元格 对应到poi中,为:workbook->sheet->row->cell

 * 

 */

public class poitest {

 

 public static string outputfile = "c://temp//test.xls";

 

 public static string filetoberead = "c://temp//test.xls";

 

 public void createexcel() {

  try {

   // 创建新的excel 工作簿

   hssfworkbook workbook = new hssfworkbook();

   // excel工作簿中建一工作表,其名为缺省值

   // 如要新建一名为"效益指标"的工作表,其语句为:

   // hssfsheet sheet = workbook.createsheet("效益指标");

   hssfsheet sheet = workbook.createsheet();

   // 在索引0的位置创建行(最顶端的行)

   hssfrow row = sheet.createrow((short) 0);

   //在索引0的位置创建单元格(左上端)

   hssfcell cell = row.createcell((short) 0);

   // 定义单元格为字符串类型

   cell.setcelltype(hssfcell.cell_type_string);

   // 在单元格中输入一些内容

   cell.setcellvalue("sweater");

   // 新建一输出文件流

   fileoutputstream fout = new fileoutputstream(outputfile);

   // 把相应的excel 工作簿存盘

   workbook.write(fout);

   fout.flush();

   // 操作结束,关闭文件

   fout.close();

   system.out.println("文件生成...");

 

  } catch (exception e) {

   system.out.println("已运行 xlcreate() : " + e);

  }

 }

 

 /**

  * 读取excel,遍历各个小格获取其中信息,并判断其是否是手机号码,并对正确的手机号码进行显示

  *

  * 注意: 1.sheet 0开始,以workbook.getnumberofsheets()-1结束

  *       2.row,以0开始(getfirstrownum),以getlastrownum结束

  *       3.cell,以0开始(getfirstcellnum),以getlastcellnum结束, 结束的数目不知什么原因与显示的长度不同,可能会偏长

  */

 public void readexcel() {

  //将被表示成1.3922433397e10的数转化为13922433397

  //decimalformat df = new decimalformat("#");

 

  try {

   // 创建对excel工作簿文件的引用

   hssfworkbook workbook = new hssfworkbook(new fileinputstream(

     filetoberead));

//system.out.println("===sheetsnum===" + workbook.getnumberofsheets());//获取sheet

   for (int numsheets = 0; numsheets < workbook.getnumberofsheets(); numsheets++) {

    if (null != workbook.getsheetat(numsheets)) {

     hssfsheet asheet = workbook.getsheetat(numsheets);//获得一个sheet

     if(!asheet.isdisplayformulas())//判断是显示asheet中公式的值

         asheet.setdisplayformulas(true);

//system.out.println("+++getfirstrownum+++" + asheet.getfirstrownum());

//system.out.println("+++getlastrownum+++" + asheet.getlastrownum());

 

     for (int rownumofsheet = 0; rownumofsheet <= asheet

       .getlastrownum(); rownumofsheet++) {

      if (null != asheet.getrow(rownumofsheet)) {

       hssfrow arow = asheet.getrow(rownumofsheet);

 

//system.out.println(">>>getfirstcellnum<<<"+arow.getfirstcellnum());

//system.out.println(">>>getlastcellnum<<<"+arow.getlastcellnum());

       for (short cellnumofrow = 0; cellnumofrow <= arow

         .getlastcellnum(); cellnumofrow++) {

//system.out.println(">>>rownumofsheet<<<"+rownumofsheet);

//system.out.println(">>>cellnumofrow<<<"+cellnumofrow);

        if (null != arow.getcell(cellnumofrow)) {

         hssfcell acell = arow.getcell(cellnumofrow);

         int celltype = acell.getcelltype();

         switch (celltype) {

         case hssfcell.cell_type_numeric://numeric

          string strcell =string.valueof(acell.getnumericcellvalue()); 

         if(hssfdateutil.iscelldateformatted(acell))

          {

            //double sa = acell.getnumericcellvalue();

            //date dd = hssfdateutil.getjavadate(sa);

            //hssfdataformat tt = new hssfdataformat(workbook);

            //dd.tostring();

system.out.println(acell.getdatecellvalue());

          }

        else

system.out.println(strcell); 

          break;

         case hssfcell.cell_type_string://string

          strcell = acell.getstringcellvalue();

system.out.println(strcell);

         break;

         case hssfcell.cell_type_formula://formula

          //strcell =acell.getcellformula();

          strcell = string.valueof(acell.getnumericcellvalue());

system.out.println(strcell);

         break;

         case hssfcell.cell_type_blank://blank

          strcell = acell.getstringcellvalue();

system.out.println(strcell);

        break;

         default:

system.out.println("----------------格式读入不正确!");//其它格式的数据

         }

        }

 

       }

      }

 

     }

 

    }

system.out.println("//////////////////////////////sheet  end///////////////////////////////////////////");

   }

 

  } catch (exception e) {

   system.out.println("readexcelerror" + e);

  }

 

 }

 

 //阅读指定行和列的单元格的值,注意:行、列下标是从0开始的

  public void getspecial(short numrow ,short numcol) {

  try {

   // 创建对excel工作簿文件的引用

   hssfworkbook workbook = new hssfworkbook(new fileinputstream(filetoberead));

    if (null != workbook.getsheetat(0)) {

     hssfsheet asheet = workbook.getsheetat(0);//获得一个sheet

      if (null != asheet.getrow(numrow)) {

       hssfrow arow = asheet.getrow(numrow);

        if (null != arow.getcell(numcol)) {

         hssfcell acell = arow.getcell(numcol);

         int celltype = acell.getcelltype();

         switch (celltype) {

         case 0://numeric

          string strcell =string.valueof(acell.getnumericcellvalue());

         if(hssfdateutil.iscelldateformatted(acell))

system.out.println("00000000000000000"+acell.getdatecellvalue());

          else

system.out.println(strcell); 

          break;

         case 1://string

          strcell = acell.getstringcellvalue();

system.out.println("111111111111111111"+strcell);

         break;

         case 2://formula

          asheet.setdisplayformulas(true);

          strcell = string.valueof(acell.getnumericcellvalue());

system.out.println("2222222222222222222"+strcell);

        break;

         case 3://blank

          strcell = acell.getstringcellvalue();

system.out.println("3333333333333333333"+strcell);

        break;

         default:

system.out.println("----------------格式读入不正确!");//其它格式的数据

         }

        }

      }

 

    }

 

 

  } catch (exception e) {

   system.out.println("readexcelerror" + e);

  }

 

 }

 

  public static void main(string[] args) {

  poitest poi = new poitest();

  //poi.createexcel();

  poi.readexcel();

  poi.getspecial((short)4,(short)4);//第五行第五列的数据值

 }

}

 

扫描关注微信公众号