使用POI来读写exccel很方便,但是一开始用的时候有点蒙,这里我将我学习时写的例子给大家分享一下,希望对你学习有点帮助。
顺便说一下,jxl也可以操作excel,如果有兴趣,可以参考:http://blog.csdn.net/liu_005/article/details/49404687
【POI的jar包下载地址:http://download.csdn.net/detail/liu_005/9211493】
【读excel】
其中读excel比较简单,先通过输入流创建工作文件,获取工作簿,通过工作簿获取行,通过行获取单元格,进而获取每个单元格中的内容。不过这里有一点需要考虑下就是你的数据中是否与空行存在,如果有还是要处理下,不然会有空指针异常。
// 利用POI读excel文件
public static void readExcel() throws IOException
{
// System.out.println("in");
String fileName = "E:/testPoi.xls";// 源文件
File f = new File(fileName);
FileInputStream is = new FileInputStream(f);// 创建文件流
HSSFWorkbook wb = new HSSFWorkbook(is); // 创建工作文件
HSSFSheet sheet = wb.getSheetAt(0); // 获取第一个工作簿
int maxRow = sheet.getLastRowNum();// 已写最大行数(从0开始)
for (int i = 0; i <= maxRow; i++)
{
HSSFRow row = sheet.getRow(i);// 获取行
// 如果数据行中间有空行,可以用这个跳过;如果没有空行,当然这条语句可以删除
if(row == null)
{
continue;
}
for (int j = 0; j < row.getLastCellNum(); j++)
{
System.out.print(row.getCell(j) + " ");// 获取行中单元格的内容
}
System.out.println();
}
is.close();
}
【写excel (包括修改已存在的excle文档)】
在写excel时稍微复杂一点,需要先将已存在的文档(如果是第一次插入数据,可以理解为已存在的文档为空)读入输入流中,构造工作文件。然后获取已写的最大行数,利用最大行数创建下一行和创建行中的每个单元格(根据需要创建),最后将你想要写入文件的内容设置为单元格的值。
// 利用POI写excel文件
public static void writeExcel(String[][] inStrings) throws IOException
{
String fileName = "E:/testPoi.xls";// 源文件
File f = new File(fileName);
FileInputStream is = new FileInputStream(f);// 创建文件流
HSSFWorkbook wb = new HSSFWorkbook(is); // 创建工作文件
HSSFSheet sheet = wb.getSheetAt(0); // 获取第一个工作簿
for (int j = 0; j < inStrings.length; j++)
{
int nowMaxRow = sheet.getLastRowNum();// 获取目前已写的最大行号(从0开始)
System.out.println("lastRowNum: " + nowMaxRow);
HSSFRow row = sheet.createRow(nowMaxRow + 1);// row是工作簿中的一行
for (int i = 0; i < inStrings[j].length; i++)
{
HSSFCell cell = row.createCell(i);// cell是行中的一个单元格
cell.setCellValue(inStrings[j][i]);
}
}
// 创建输出流
FileOutputStream fileOut = new FileOutputStream(f);
// 将写后流写入文件
wb.write(fileOut);
// 关闭流
is.close();
fileOut.close();
}
【测试】
以下是一个简单的测试。
public static void main(String[] args) throws IOException
{
// 测试写入的时候的输入数据
String[][] putStrings = { { "90", "y-=", "=--", "y34", "yu74" },
{ "we", "y-=", "=--", "y34", "yu74" },
{ "9d", "fg", "=--", "y34", "yoop4" },
{ "yuui", "yqw", "=--", "ygf", "yu74" }
};
// 测试写入
// writeExcel(putStrings);
// 测试读出
readExcel();
}