2018/07/04 JAVA中对EXCEL的实践

好久没有上来写博客了,发现我的上一篇文章已经差不多间隔了一年。打算慢慢开始捡回来一些曾经想要做的东西。

废话不多说,现在就开始我们今天的主题,JAVA操作EXCEL,实现数据的录入和写出。我将以我最近做的一个小东西为例去讲解相关知识,虽然可能不全面,但是相对比较易上手。

 一、两种API

  poi jxl
支持的Excel格式 xls、xlsx xls
需要导入的jar包

poi-3.12-20150511.jar

poi-excellant-3.12-20150511.jar

poi-ooxxml-3.12-2015011.jar

poi-ooxml-schemas-3.12-20150511.jar

poi-scratchpad-3.12-20150511.jar

xmlbeans-2.6.0.jar

jxl.jar

二、Excel文件的读取示例

    1.jxl读取Excel表格

        注意!划重点!   jxl只支持xls格式,jxl只支持xls格式,jxl只支持xls格式!!!

        以下是jxl读取Excel的简单代码demo:

package importXls;

import java.io.File;
import java.io.IOException;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
 * poi读取文件的样例
 * @author Administrator
 *
 */
public class ImportXls {
	
	public static void main(String[] args) throws BiffException, IOException {
		File xlsFile = new File("E://testData//test.xls");
	      // 获得工作簿对象
	      Workbook workbook = Workbook.getWorkbook(xlsFile);
	      // 获得所有工作表
	      Sheet[] sheets = workbook.getSheets();
	      // 遍历工作表
	      if (sheets != null)
	      {
	         for (Sheet sheet : sheets)
	         {
	            // 获得行数
	            int rows = sheet.getRows();
	            // 获得列数
	            int cols = sheet.getColumns();
	            // 读取数据
	            for (int row = 0; row < rows; row++)
	            {
	               for (int col = 0; col < cols; col++)
	               {
	                  System.out.printf("%10s", sheet.getCell(col, row)
	                        .getContents());
	               }
	               System.out.println();
	            }
	         }
	      }
	      workbook.close();
	}
}

    2.poi读取Excel表格

        以下是jxl读取Excel的简单代码demo:

	private final static String Excel_2003 = ".xls"; //2003 版本的excel
	private final static String Excel_2007 = ".xlsx"; //2007 版本的excel

	public Sheet readExcel(File xlsFile) throws  Exception{
	      // 获得工作簿对象
	      Workbook workbook = this.getWorkbook(new FileInputStream(xlsFile),xlsFile.getName());
	      // 获得所有工作表
	      Sheet sheets = workbook.getSheetAt(0);
		return sheets;
	}

	public Workbook getWorkbook(FileInputStream inStr,String fileName) throws Exception {
		Workbook work = null;
		String fileType = fileName.substring(fileName.lastIndexOf("."));
		if(Excel_2003.equals(fileType)){
			work=new HSSFWorkbook(inStr);//2003 版本的excel
		}else if(Excel_2007.equals(fileType)) {
			work=new XSSFWorkbook(inStr);//2007 版本的excel
		}else {
			throw new Exception("解析文件格式有误!");
		}
		return work;
	}

	//原始考勤记录入LIST
	public List recordsIntoList(Sheet sheet){
		List KaoqinList = new ArrayList();

		//获得总列数
		int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
		//获得总行数
		int rowNum=sheet.getLastRowNum();
		
        // 读取数据
        for (int row = 1; row < rowNum-1; row++)
        {
        	KaoqinBean kaoqin=new KaoqinBean();
        	kaoqin.setNum(sheet.getRow(row).getCell(0).toString());
        	kaoqin.setName(sheet.getRow(row).getCell(1).toString());
        	kaoqin.setDept(sheet.getRow(row).getCell(2).toString());
        	kaoqin.setDay(sheet.getRow(row).getCell(3).toString());
        	//时间格式的读取可能会出现错误, 例如如果该单元格的格式是日期,显示的值是19:00:00,如果使用
        	//sheet.getRow(row).getCell(3).toString()去读取,返回的值会是31-十二月-1899,导致程序错误。
        	//所以下面先判断单元格的格式,如果是时间格式,用sheet.getRow(row).getCell(4).getDateCellValue()读取
        	//再用toString()换成字符串
        	if (sheet.getRow(row).getCell(4).getCellType() == org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC) {
        	      if (DateUtil.isCellDateFormatted(sheet.getRow(row).getCell(4))) {
        	    	  String value=sheet.getRow(row).getCell(4).getDateCellValue().toString();
        	         kaoqin.setDate(value.split(" ")[3]);
        	      }
        	}else{
        		kaoqin.setDate(sheet.getRow(row).getCell(4).toString());
        	}
        	KaoqinList.add(kaoqin);
        }
		return KaoqinList;
	}

    3.jxl写入EXCEL

        目前还没有用jxl去写入过EXCEL,因为jxl读取EXCEL做完之后发现它只能操作xls,就没有再研究它了。

        如果有需要的同学,可以留言私聊我

    4.poi写入EXCEL

	//写入excel
public void writeExcel(List StatisticsList) throws IOException{
	//这里也是要根据你需要写入的EXCEL文件格式实例化不同的类
	//new HSSFWorkbook()  2003 版本的excel
	//或者是
	//new XSSFWorkbook()  2007 版本的excel
	Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("0");
        Row row=sheet.createRow(0);
    	row.createCell(0).setCellValue("姓名");//名字
    	row.createCell(1).setCellValue("出勤天数");//出勤天数
    	row.createCell(2).setCellValue("迟到(次数)(以下包含免费   迟到三次次数)");//迟到
    	row.createCell(3).setCellValue("扣款金额");//罚款
    	row.createCell(4).setCellValue("没打上班卡");//上班卡
    	row.createCell(5).setCellValue("没打下班卡");//下班卡
    	row.createCell(6).setCellValue("全天没打卡");//全天卡
    	row.createCell(7).setCellValue("旷工(超过半小时)");//旷工
    	row.createCell(8).setCellValue("备注");//备注
        for(int i=0;i

poi操作需要引入的类

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

以上就是目前已实践的java操作EXCEL的示例。有问题的同学可以留言回复我。





你可能感兴趣的:(java)