Java操作Excel表的基础使用
excel最常用2010版本
wps 为国产版本 标识S
版本 | 格式 |
---|---|
1997-2003 | xls |
2007-2016 | xlsx |
单位:
sheet - 页
row - 行
cell - 单元格
excel 解析的几种方案
- POI — apache — HSSF
- JXL — 纯java
- FastExcel — 纯java (本文章中没有FastExcel的演示)
tip:如果想生成pdf格式的文件可以使用itext技术
细节对比
poi | jxl | |
---|---|---|
内存消耗 | 高 | 低 |
操作难易度 | 相对困难 | 相对简单 |
中文支持 | 需要设置 | 支持 |
复杂功能[1] | 完全支持 | 部分支持 |
跨平台 | no | yes |
[1]修饰单元格属性,字体,数字,日期操作
结论:
JXL 内存消耗少 效率高 速度快 适合大量excel存储读取
POI 功能全面 支持复杂操作 适合企业级报表生成
jxl方式
<!-- jxl-->
<dependency><!--必备-->
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
public static void main(String[] args){
createExcel_JXL();
// reedExcel_JXL();
}
private static void createExcel_JXL() {
// 定义label数组
String[] title = {"id","name","sex"};
// 创建Excel文件
File file = new File("d:/test_excel/exceljxl123.xls");
try{
file.createNewFile();
// 创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(file);
// 创建sheet
WritableSheet sheet = workbook.createSheet("sheet1",0);
Label label = null;
// 第一行设置列名
for( int i = 0, length=title.length;i<length;i++){
label = new Label(i,0,title[i]);
sheet.addCell(label);
}
// 追加数据
for (int i = 1;i<10;i++){
label = new Label(0,i,"id"+i);
sheet.addCell(label);
label = new Label(1,i,"姓名"+i);
sheet.addCell(label);
label = new Label(2,i,"男"+i);
sheet.addCell(label);
}
// 写入数据
workbook.write();
// 关闭流
workbook.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("写入完成");
}
private static void reedExcel_JXL() {
String[] title = {"id","name","sex"};
File file = new File("d:/test_excel/exceljxl123.xls");
try{
// 创建workbook
Workbook workbook = Workbook.getWorkbook(file);
// 获取第一个工作表sheet
Sheet sheet = workbook.getSheet(0);
// 获取数据
for(int x=0,row=sheet.getRows();x<row;x++){
for (int y =0,col=sheet.getColumns();y<col;y++ ){
Cell cell = sheet.getCell(y,x);
System.out.print(cell.getContents()+" ");
}
System.out.println();
}
System.out.println("读取完成");
}catch(Exception e){
e.printStackTrace();
}
}
poi方式
<!-- poi -->
<dependency> <!--必备-->
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--commons-io -->
<dependency> <!-- 操作File好用 可选-->
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
public static void main(String[] args){
createExcel_POI();
// reedExcel_POI();
}
private static void createExcel_POI() {
// 创建表头数组
String[] title = {"id","name","sex"};
// 创建Excel文件
File file = new File("d:/test_excel/excelpoi123.xls");
// 创建Excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一个工作表sheet
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = null;
HSSFCell cell = null;
// 创建表头
row = sheet.createRow(0);
for (int i = 0;i < title.length;i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加数据
for (int i = 1;i<10;i++){
row = sheet.createRow(i);
cell = row.createCell(0);
cell.setCellValue("id"+i);
cell = row.createCell(1);
cell.setCellValue("姓名"+i);
cell = row.createCell(2);
cell.setCellValue("女"+i);
}
// 保存文件
try {
file.createNewFile();
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void reedExcel_POI() {
// 需要读取的文件
File file = new File("d:/test_temp/excelpoi123456.xls");
try{
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
// 获取工作表(多种方式)
// HSSFSheet sheet = workbook.getSheet("已知的sheet页名称");
HSSFSheet sheet = workbook.getSheetAt(0);// 0为第一页
// 读取数据
HSSFRow row = null;
HSSFCell cell = null;
for(int x=0,rowNum=sheet.getLastRowNum();x<rowNum;x++){
row = sheet.getRow(x);//获取该行
for (int y =0,colNum=row.getLastCellNum();y<colNum;y++ ){
cell = row.getCell(y);
System.out.print(cell.getStringCellValue()+" ");
}
System.out.println();
}
System.out.println("读取完成");
}catch(IOException e){
e.printStackTrace();
}
}