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

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

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

 一、两种API

 poijxl
支持的Excel格式xls、xlsxxls
需要导入的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<KaoqinBean> recordsIntoList(Sheet sheet){
		List<KaoqinBean> KaoqinList = new ArrayList<KaoqinBean>();

		//获得总列数
		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<StatisticsBean> 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<StatisticsList.size();i++)
        {
        	row=sheet.createRow(i+1);
        	row.createCell(0).setCellValue(StatisticsList.get(i).getName());//名字
        	row.createCell(1).setCellValue(StatisticsList.get(i).getAttendance()==null?0:StatisticsList.get(i).getAttendance());//出勤天数
        	row.createCell(2).setCellValue(StatisticsList.get(i).getLateCount()==null?0:StatisticsList.get(i).getLateCount());//迟到
        	row.createCell(3).setCellValue(StatisticsList.get(i).getFine());//罚款
        	row.createCell(4).setCellValue(StatisticsList.get(i).getNot_clock_in_morning());//上班卡
        	row.createCell(5).setCellValue(StatisticsList.get(i).getNot_clock_in_night());//下班卡
        	row.createCell(6).setCellValue(StatisticsList.get(i).getNot_clock_in_AllDay());//全天卡
        	row.createCell(7).setCellValue(StatisticsList.get(i).getAbsenteeism());//旷工
        	row.createCell(8).setCellValue(StatisticsList.get(i).getRemarks());//备注
        }
        File file = new File("./本月考勤统计.xlsx");
        FileOutputStream fileoutputStream = new FileOutputStream(file);
        workbook.write(fileoutputStream);
        fileoutputStream.close();
}

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的示例。有问题的同学可以留言回复我。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值