前期做项目需要用到java操作Excel,跟随慕课网上课程学习,找到了Java操作Excel的三种方式,发现实际应用中基本还是以POI方式为主,现总结如下。
POI解析Excel示例及解决长数字变科学计数法或double的问题见http://blog.csdn.net/sunglee_1992/article/details/53033600
HSSF是Horrible SpreadSheet Format的缩写,即“讨厌的电子表格格式”。通过HSSF,你可以用纯Java代码来读取,写入,修改Excel文件。
HSSF——读写Microsoft Excel格式档案的功能。
XSSF——读写Microsoft Excel OOXML格式档案的功能。
HWPF——读写Microsoft Word格式档案的功能。
HSLF——读写Microsoft PowerPoint格式档案的功能。
HDGF——读写Microsoft Visio格式档案的功能。
如果想生成pdf文件:
通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF 文件。
下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText的类库了。
POI实例(创建并写入数据)
public class PoiExpExcel {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] title = { "id", "name", "sex" };
//创建Excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个工作表sheet
HSSFSheet sheet = workbook.createSheet();
//创建第一行
HSSFRow row = sheet.createRow(0);
//插入第一行数据id,name,sex
HSSFCell cell = null;
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
//追加数据
for (int i = 1; i < 11; i++) {
//创建后续行
HSSFRow nextrow = sheet.createRow(i);
//定义单元格
HSSFCell cell2 = nextrow.createCell(0);
//为第一个单元格赋值
cell2.setCellValue("a" + i);
//为第二个单元格赋值
cell2 = nextrow.createCell(1);
cell2.setCellValue("user" + i);
cell2 = nextrow.createCell(2);
cell2.setCellValue("男");
}
//创建一个文件
File file = new File("d:/poi_test.xls");
try {
file.createNewFile();
//将Excel内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
POI实例(读取Excel文件的内容)
public class PoiReadExcel {
public static void main(String[] args) {
// TODO Auto-generated method stub
//需要解析的Excel文件
File file = new File("d:/poi_test.xls");
try {
//创建Excel,读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
//获取第一个工作表
//方法一
/*HSSFSheet sheet = workbook.getSheet("Sheet0");*/
//方法二
HSSFSheet sheet = workbook.getSheetAt(0);
//读取表中的数据
int firstRowNum = 0;
//表中最后一行行号
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; 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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java Excel是一开放源码项目,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。包括常见格式的设置:字体、颜色、背景、合并单元格等。
JXL实例(创建并写入数据):
public class JxlExcle {
public static void main(String[] args) {
// TODO Auto-generated method stub
//用数组存表头
String[] title = {"id","name","sex"};
//创建Excel文件
File file = new File("e:/jxl_test.xls");
try {
file.createNewFile();
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet
WritableSheet sheet = workbook.createSheet("sheet1", 0);
Label label = null;
for (int i = 0; i < title.length; i++) {
label = new Label(i,0,title[i]); // 参1列,参2行,参3值
sheet.addCell(label);
}
//追加数据
for (int i = 1; i < 10; i++) {
label = new Label(0,i,"a"+i);
sheet.addCell(label);
label = new Label(1,i,"user"+i);
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
}
//写入数据
workbook.write();
//关闭流
workbook.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
JXL实例(读取Excel文件的内容):
public class JxlReadExcel {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//创建workbook
Workbook workbook = Workbook.getWorkbook(new File("e:/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();
}
workbook.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
FastExcel是一个采用纯Java开发的excel文件读写组件,支持Excel97——2003文件格式。
FastExcel只能读取单元格的字符信息,而其他属性如颜色、字体等就不支持了,因此FastExcel只需要很小的内存。
即将HSSF替换为XSSF,可以生成解析和写入更高版本的Excel文件。
public class XSSFPoiExpExcel {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] title = { "id", "name", "sex" };
//创建Excel工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个工作表sheet
XSSFSheet sheet = workbook.createSheet();
//创建第一行
Row row = sheet.createRow(0);
//插入第一行数据id,name,sex
Cell cell = null;
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
//追加数据
for (int i = 1; i < 11; i++) {
//创建后续行
Row nextrow = sheet.createRow(i);
//定义单元格
Cell cell2 = nextrow.createCell(0);
//为第一个单元格赋值
cell2.setCellValue("a" + i);
//为第二个单元格赋值
cell2 = nextrow.createCell(1);
cell2.setCellValue("user" + i);
cell2 = nextrow.createCell(2);
cell2.setCellValue("男");
}
//创建一个文件
File file = new File("d:/poi_test.xlsx");
try {
file.createNewFile();
//将Excel内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}