好久没有上来写博客了,发现我的上一篇文章已经差不多间隔了一年。打算慢慢开始捡回来一些曾经想要做的东西。
废话不多说,现在就开始我们今天的主题,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<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的示例。有问题的同学可以留言回复我。