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.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.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());
}
}