读写Excel的常用技术:(语言不重要,Python也可以)
- POI (效率高,操作复杂,支持功能多)
POI提供API给Java程序对Microsoft Office格式档案读写功能.
HSSF(Horrible SpreadSheet Format)“讨厌的电子表格格式”。通过HSSF,使用纯Java代码读取、写入、修改Excel文件。
(1). HSSF 读写Microsoft Excel格式档案的功能
(2). XSSF 读写Microsoft Excel OOXML格式档案的功能
(3). HWPF 读写Microsoft Word格式档案的功能
(4). HSLF 读写Microsoft PowerPoint格式档案的功能
(5). HDGF 读写Microsoft Visio格式档案的功能
(6). iText 生成PDF/rtf的文档,可将XML、HTML转化为PDF
- JXL(效率低,操作简单,支持功能较少)
Java Excel是开源项目,可以读取Excel文件、创建、更新文件.
- FASTEXCEL(了解即可)
纯java开发的excel文件读写组件,支持97-2003文件格式。只读取单元格的字符信息,其他属性不支持,只需要很小的内存
前置概念:
- 工作簿 相当于Excel文件(.xlsx、.xls等)
- 工作表sheet:
- 行记录Row:
- 单元格Cell:
- 单元列Column:
- 行和列的作用是决定单元格cell的坐标的,所以程序操作Excel数据,也主要是通过行列确定cell的坐标,进而改变值。
POI简单实现对Excel文件的读写操作:
1.写操作:
package com.yinlei.excel;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class PoiExcelDemo {
public static void main(String[] args) {
String[] titles = {"妹子编号","妹子姓名","妹子爱好"};
//创建Excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建工作簿sheet
HSSFSheet sheet = workbook.createSheet();
//创建第一行
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
//插入第一行数据
for (int i = 0; i < titles.length; i++) {
cell = row.createCell(i);
cell.setCellValue(titles[i]);
}
//追加数据
for (int i = 1; i < 10; i++) {
HSSFRow nextrow = sheet.createRow(i);
//定义单元格
HSSFCell cell2 = nextrow.createCell(0);
cell2.setCellValue("meimei"+i);
cell2 = nextrow.createCell(1);
cell2.setCellValue("BeautifulGirl"+i);
cell2 = nextrow.createCell(2);
cell2.setCellValue("泰国人妖");
}
//创建一个文件
File file = new File("F:\\poi_test.xls");
try {
file.createNewFile();
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(workbook!=null){
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.读操作:
package com.yinlei.excel;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.IOException;
public class PoiReadExcel {
public static void main(String[] args) {
//打开excel文件
File file = new File("F:\\poi_test.xls");
try {
//创建Excel,读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
//读取第一个工作页sheet
// HSSFSheet sheet = workbook.getSheet("sheet0");
HSSFSheet sheet = workbook.getSheetAt(0);//读取第一张工作表
int firstRowNum = 0;
//获取sheet中最后一行行号
int lastRowNum = sheet.getLastRowNum();
for (int i = firstRowNum; i < lastRowNum; i++) {
HSSFRow row = sheet.getRow(i);
//获取当前行最后单元格列号
int lastCellNum = row.getLastCellNum();
//获取工作表中的数据
for (int j = 0; j < lastCellNum; j++) {
HSSFCell cell = row.getCell(j);
String value = cell.getStringCellValue();
System.out.print(value+" ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
JXL简单实现对Excel文件的读写操作:
1.写操作:
package com.yinlei.excel;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import java.io.File;
import java.io.IOException;
public class JxlExcelDemo {
/**
* JXL创建Excel文件
* @param args
*/
public static void main(String[] args) {
String[] title = {"序号","姓名","性别"};
//创建Excel文件
File file = new File("F:\\jxl_test.xls");
try {
file.createNewFile();
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet1
WritableSheet sheet = workbook.createSheet("sheet1",0);
//向Sheet1中添加数据
Label label=null;//标题
//第一行设置列名
for(int i =0; i <title.length;i++ ){
label = new Label(i,0,title[i]);//参数2是row,行
sheet.addCell(label);
}
//添加数据
for (int i = 1; i < 10; i++) {//i = 1;表示第2行
label = new Label(0,i,"a"+i);
sheet.addCell(label);
label = new Label(1,i,"user"+i);//i的2时表示第二行的第2列
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
}
//关闭流
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
程序没报错,打开F盘会看到生成的文件,然后打开这个文件:
2.读操作:
package com.yinlei.excel;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.File;
import java.io.IOException;
public class JxlReadExcel {
public static void main(String[] args) {
Workbook workbook = null;
try {
//创建workbook,并指定路径
workbook = Workbook.getWorkbook(new File("F:\\jxl_test.xls"));
//获取sheet工作表
Sheet sheet = workbook.getSheet(0);
//获取数据
for (int i = 0; i <sheet.getRows() ; i++) {
for (int j = 0; j < sheet.getColumns(); j++) {
Cell cell = sheet.getCell(j,i);
System.out.print(cell.getContents()+" ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(workbook!=null){
workbook.close();
}
}
}
}
注意文件后缀格式:
.xls(97-2003) / xlsx(2007以上版本)
对于.xlsx需要XSSF组件。
实例代码中要用到的jar包:
maven仓库下载即可。