java对excel的操作

来源:互联网 发布:网络歌手香香 编辑:程序博客网 时间:2024/06/05 09:36

1、读取excel

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;


import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


/**
 * 读取excel
 * @author fdghjgkjhgk
 *
 */
public class ReadExcelUtil {

public static void readExcel(String sourceFile){
Workbook wb = null;
try {
 InputStream is = new FileInputStream(sourceFile);
 //1.读取 Excel 数据表的第一步是创建 Workbook( 术语:工作薄 ),
 wb = Workbook.getWorkbook(is);
 
 //2.一旦创建了 Workbook,我们就可以通过它来访问 Excel Sheet( 术语:工作表 )。
 // 获取第一张 Sheet 表
 Sheet sheet = wb.getSheet(0);
 
 //3.我们既可能通过 Sheet 的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从 0 开始,就像数组一样。
       //一旦得到了 Sheet,我们就可以通过它来访问 Excel Cell( 术语:单元格 )。
 //获取第一行,第一列的值
 Cell c00 = sheet.getCell(0, 0);
 String strC00 = c00.getContents();
 
 //获取第一行,第二列的值
 Cell c10 = sheet.getCell(1,0);
 String strC10 = c10.getContents();
 
 //获取第一行,第三列的值
 Cell c20 = sheet.getCell(2, 0);
 String strC20 = c20.getContents();
 
 //获取第二行,第一列的值
 Cell c01 = sheet.getCell(0, 1);
 String strC01 = c01.getContents();
 
 Cell c21 = sheet.getCell(2, 1);
 String strC21 = c21.getContents();
 
 System.out.println("Cell(2, 1)" + " value : " + strC21 + "; type : " + c21.getType());
 
 System.out.println("Cell(0, 1)" + " value : " + strC01 + "; type : " + c01.getType());
 
 System.out.println("Cell(0, 0)" + " value : " + strC00 + "; type : " + c00.getType());
 System.out.println("Cell(1, 0)" + " value : " + strC10 + "; type : " + c10.getType());
 System.out.println("Cell(2, 0)" + " value : " + strC20 + "; type : " + c20.getType());
 
 //循环Excel中所有的内容
 int rows = sheet.getRows();
 for(int i=0;i<rows;i++){
  Cell[] cell = sheet.getRow(i);
  //System.out.println("第"+(i+1)+"行:");
  for(Cell curCell : cell){
   System.out.print("       "+curCell.getContents());
  }
  System.out.println();
 }
 
   
 //获得工作薄(Workbook)中工作表(Sheet)的个数
 int sheetCount = wb.getNumberOfSheets();
 System.out.println("sheetCount:"+sheetCount);
 
 
 //返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:
 Sheet[] sheetArr = wb.getSheets();
 System.out.println("sheetArr:"+Arrays.toString(sheetArr));
 
 //返回正在使用的 API 的版本号
 String apiVersion = wb.getVersion();
 System.out.println("apiVersion:"+apiVersion);
 
 //获取 Sheet 表中所包含的总列数,示例:
  int rsColumns = sheet.getColumns();
  System.out.println("rsColumns:"+rsColumns);
 
  //获取 Sheet 表中所包含的总行数,示例:
  int rsRows = sheet.getRows();
  System.out.println("rsRows:"+rsRows);
 
  //获取某一行的所有单元格,返回的是单元格对象数组,示例子:
   Cell[] cell = sheet.getRow(0);
} catch (FileNotFoundException e) {
 e.printStackTrace();
} catch (BiffException e) {
 e.printStackTrace();
} catch (IOException e) {
 e.printStackTrace();
}finally{
 if(wb!=null){
  // 操作完成时,关闭对象,释放占用的内存空间
  wb.close();
 }
}
 }
}




public class JavaExcelTest {

public static void main(String[] args) {
ReadExcelUtil.readExcel("D:/bbbb.xls");
//WriteExcelUtil.writeExcel("C:/Users/fdghjgkjhgk/Desktop/bbbb.xls");
}

}


2、写入excel

import java.io.File;
import java.io.IOException;
import java.util.Date;


import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Colour;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;


/**
 * 此程序先建一个excel表,再往excel表插入数据
 * @author fdghjgkjhgk
 *
 */
public class WriteExcelUtil {

public static void writeExcel(String targetfile) {
 WritableWorkbook wwb = null;
 try {
  // 构建 Workbook 对象 , 只读 Workbook 对象
  // Method 1:创建可写入的 Excel 工作薄
  wwb = Workbook.createWorkbook(new File(targetfile));
  // Method 2:将 WritableWorkbook 直接写入到输出流
  
  // 创建 Excel 工作表
  WritableSheet wSheet = wwb.createSheet("集中录入数据统计", 0);
  //字形
  WritableFont font1 = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
  WritableFont font2 = new WritableFont(WritableFont.ARIAL,8);
  WritableCellFormat cf1 = new WritableCellFormat(font1);
  WritableCellFormat cf2 = new WritableCellFormat(font2);
  
  // 1. 添加 Label 对象
  Label c00 = new Label(0, 0, "小白",cf1);
  wSheet.addCell(c00);
  Label c10 = new Label(1, 0, "男",cf1);
  wSheet.addCell(c10);
  Label c20 = new Label(2, 0, "是多少",cf1);
  wSheet.addCell(c20);
  Label c30 = new Label(3, 0, "统计时间",cf1);
  wSheet.addCell(c30);
  
  jxl.write.Label c01 = new jxl.write.Label(0, 2, "小白",cf2);
  wSheet.addCell(c01);
  jxl.write.Label c11 = new jxl.write.Label(1, 2, "男",cf2);
  wSheet.addCell(c11);
  jxl.write.Number c21 = new jxl.write.Number(2, 2, 2309,cf2);
  wSheet.addCell(c21);
  
  /*jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-MM-dd hh:mm:ss");
  jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
  DateTime c31 =  new DateTime(3,1,new Date(),wcfDF);
  wSheet.addCell(c31);*/
  // 注意加上這句話,写入 Exel 工作表
  //在关闭 Excel 对象之前,你必须要先调用 write() 方法,因为先前的操作都是存储在缓存中的,所以要通过该方法将操作的内容保存在文件中。如果你先关闭了 Excel 对象,那么只能得到一张空的工作薄了。
  wwb.write();
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  // 关闭 Excel 工作薄对象
  try {
   if(wwb!=null){
    wwb.close();
   }
  } catch (WriteException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}


}

3、向原有的excel表追加数据

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


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.poifs.filesystem.POIFSFileSystem;


/**
 * 这是在原有的excel表中追加数据
 * @author fdghjgkjhgk
 *
 */
public class TestExcel {

public static void main(String[] args) throws Exception {    
        FileInputStream fs=new FileInputStream("D://bbbb.xls");  //获取D://bbbb.xls  
        POIFSFileSystem ps=new POIFSFileSystem(fs);  //使用POI提供的方法得到excel的信息  
        HSSFWorkbook wb=new HSSFWorkbook(ps);    
        HSSFSheet sheet=wb.getSheetAt(0);  //获取到工作表,因为一个excel可能有多个工作表  
        HSSFRow row=sheet.getRow(0);  //获取第一行(excel中的行默认从0开始,所以这就是为什么,一个excel必须有字段列头),即,字段列头,便于赋值  
        System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum());  //分别得到最后一行的行号,和一条记录的最后一个单元格  
          
        FileOutputStream out=new FileOutputStream("D://bbbb.xls");  //向D://bbbb.xls中写数据  
        row=sheet.createRow((short)(sheet.getLastRowNum()+1)); //在现有行号后追加数据  
        row.createCell((short) 0).setCellValue("小强"); //设置第一个(从0开始)单元格的数据  
        row.createCell((short) 1).setCellValue("男"); //设置第二个(从0开始)单元格的数据
        row.createCell((short) 2).setCellValue(1000042);
  
          
        out.flush();  
        wb.write(out);    
        out.close();    
        System.out.println(row.getPhysicalNumberOfCells()+" "+row.getLastCellNum());    
    }    
}





1 0
原创粉丝点击