JExcel API
简介:
大多数情况下,应用程序需要生成一些报告。 在excel中生成这些报告可能是一个不错的方法,因为大多数人都知道如何使用excel,除此之外,它还提供了共享报告的灵活性。 在这个简短的系列教程中,我们将看到如何使用JExcel API处理Java中的Excel文件。
读取excel文件
在本教程中,我们将使用JExcel API以Java语言读取Excel文件。 这里是我们将阅读的Excel文件:
在本教程中,请确保您下载最新版本的jexcelapi,并将其放在您的计算机或eclipse项目的classpath路径下。 或者,您可以下载附在本页末尾的eclipse项目,它已经包含了API。
这是读取excel文件并显示其内容的程序的Java源代码:
public static void main(String[] args) { try { //从指定位置的文件创建工作簿对象;根据计算机上的位置更改文件的路径。 Workbook wrk1 = Workbook.getWorkbook(new File("C:/test.xls"));
//获取工作簿中第一个工作表的引用 Sheet sheet1 = wrk1.getSheet(0);
//使用工作表的getCel(int col, int row)方法获取对单元的引用 Cell colArow1 = sheet1.getCell(0, 0); Cell colBrow1 = sheet1.getCell(1, 0); Cell colArow2 = sheet1.getCell(0, 1);
//使用单元格引用的getContents()方法获取单元格的内容,返回值为一个字符串 String str_colArow1 = colArow1.getContents(); String str_colBrow1 = colBrow1.getContents(); String str_colArow2 = colArow2.getContents(); // 显示单元格内容 System.out.println("Contents of cell Col A Row 1: \"" + str_colArow1 + "\""); System.out.println("Contents of cell Col B Row 1: \"" + str_colBrow1 + "\""); System.out.println("Contents of cell Col A Row 2: \"" + str_colArow2 + "\"");
} catch (BiffException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
1)下面一行创建封装Excel文件的Workbook对象。 本例中,getWorkbook()方法接受指向位于“C:/test.xls”处的Excel文件的File对象。
Workbook wrk1 = Workbook.getWorkbook(new File("C:/test.xls"));
2)下面的行用于获取Excel文件中第一个工作表。 以类似方式,如果您正在处理的Excel文件有多个工作表,则可以获取任何其他工作表。
Sheet sheet1 = wrk1.getSheet(0);
3)下面的代码根据传递给getCell方法的参数为我们提供了对工作表中特定单元格的引用。 第一个参数表示列,第二个参数表示行。 确保只访问非空单元格,否则此方法将抛出ArrayIndexOutOfBoundsException。
Cell colArow1 = sheet1.getCell(0, 0);
4)下面这行调用getContents()方法提取Cell的内容。 内容以字符串形式返回。
String str_colArow1 = colArow1.getContents();
运行结果:
使用不同的数据类型读取Excel文件
正如在前面的教程中指出的那样,在实际应用程序中,您可能不得不处理除String之外的多个数据类型的Excel文件数据。 在本教程中,我们将使用不同的数据类型读取Java中的excel文件。
我们将尝试读取下面的excel,因为可以看出,excel在前四个单元中有Date,Number,Boolean和Label(常规字符串)数据。
这是读取excel文件并显示其内容的程序的Java源代码:
public static void main(String[] args) { //从指定位置的文件创建工作簿对象;根据计算机上的位置更改文件的路径。 Workbook wrk1; try { wrk1 = Workbook.getWorkbook(new File("C:/test.xls")); //获取工作簿中第一个工作表的引用 Sheet sheet1 = wrk1.getSheet(0); //使用工作表的getCel(int col, int row)方法获取对单元的引用 Cell cell1 = sheet1.getCell(0, 0); Cell cell2 = sheet1.getCell(1, 0); Cell cell3 = sheet1.getCell(2, 0); Cell cell4 = sheet1.getCell(3, 0); DateCell dCell = null; NumberCell nCell = null; BooleanCell bCell = null; LabelCell lCell = null; // 检查单元格内容的类型,并将该对象转换为适当的引用类型 if (cell1.getType() == CellType.DATE) dCell = (DateCell) cell1; if (cell2.getType() == CellType.NUMBER) nCell = (NumberCell) cell2; if (cell3.getType() == CellType.BOOLEAN) bCell = (BooleanCell) cell3; if (cell4.getType() == CellType.LABEL) lCell = (LabelCell) cell4; // 显示单元格内容 System.out.println("Value of Date Cell is: " + dCell.getDate()); System.out.println("Value of Number Cell is: " + nCell.getValue()); System.out.println("Value of Boolean Cell is: " + bCell.getValue()); System.out.println("Value of Label Cell is: " + lCell.getString()); } catch (BiffException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
1)下面一行创建封装Excel文件的Workbook对象。 本例中,getWorkbook()方法接受指向位于“C:/test.xls”处的Excel文件的File对象。
Workbook wrk1 = Workbook.getWorkbook(new File("C:/test.xls"));
2)下面的行用于获取Excel文件中第一个工作表。 以类似方式,如果您正在处理的Excel文件有多个工作表,则可以获取任何其他工作表。
Sheet sheet1 = wrk1.getSheet(0);
3)下面的代码根据传递给getCell方法的参数为我们提供了对工作表中特定单元格的引用。 第一个参数表示列,第二个参数表示行。 确保只访问非空单元格,否则此方法将抛出ArrayIndexOutOfBoundsException。
Cell cell1 = sheet1.getCell(0, 0);
4)下面几行创建DateCell(日期类型数据)、NumberCell(数值类型数据)、BooleanCell(布尔类型数据)、:LabelCell(字符串数据)
DateCell dCell=null; NumberCell nCell=null; BooleanCell bCell=null; LabelCell lCell=null;
5)在下面的行中,我们调用Cell对象的getType()方法。 此方法返回表示Cell内容的数据类型的枚举。并将其转换为相应类型的Cell对象。
if(cell1.getType() == CellType.DATE) dCell = (DateCell)cell1; if(cell2.getType() == CellType.NUMBER) nCell = (NumberCell)cell2; if(cell3.getType() == CellType.BOOLEAN) bCell = (BooleanCell)cell3; if(cell4.getType() == CellType.LABEL) lCell = (LabelCell)cell4;
6)最后我们打印单元格的值。 DateCell对象的getDate()方法返回Cell的日期内容。 NumberCell和BooleanCell对象的getValue()方法分别返回单元格的数值(双精度)和布尔值内容。 LabelCell对象的getString()方法返回Cell上的String内容。
System.out.println("Value of Date Cell is: " + dCell.getDate()); System.out.println("Value of Number Cell is: " + nCell.getValue()); System.out.println("Value of Boolean Cell is: " + bCell.getValue()); System.out.println("Value of Label Cell is: " + lCell.getString());
输出结果:
总之,在本教程中,我们看到了如何使用jexcelapi读取包含Java中不同数据类型的Excel文件。 在本系列的下一篇教程中,我们将看到如何写入excel文件。
附件:
JavaExcelReadDataTypes.zip (659KB)
写入Excel