前一段時間Java處理Excel文件都是使用JXL這個庫,後來發現這個庫並不支持xlsx這種高版本的格式,而且不能處理大量的數據,就找到了POI這個庫html
Apache POI項目的任務是根據Office Open XML標準(OOXML)和Microsoft的OLE 2複合文檔格式(OLE2)建立和維護Java API,以處理各類文件格式。簡而言之,能夠使用Java讀取和寫入Microsoft Excel文件。此外,您能夠使用Java讀取和寫入Microsoft Word和Microsoft PowerPoint文件c++
從poi.apache.org/download.ht… 下載最新的POI庫,以後解壓,獲取咱們須要的jar
apache
建立一個sheet的步驟時首先必須來建立一個工做簿對象(XSSFWorkbook),第二不就是在使用XSSFWorkbook對象建立一個sheetbash
//創件一個工做簿
XSSFWorkbook workbook = new XSSFWorkbook();
//建立一個電子表格
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");複製代碼
XSSFWorkbook類:能夠對對Excel進行讀寫,它兼容.xls和.xlsx格式,支持office的2007或者更高版本,
HSSFWorkbook類:能夠對對Excel進行讀寫,它兼容.xls格式,不支持高版本的office
因此通常咱們會使用XSSFWorkbook來操做表格,看看如何向單元格里保存數據ui
public class WriteSheetTest {
private static final String PATH = "WriteSheet.xlsx"; //文件路徑
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(PATH);
//建立一個工做簿
XSSFWorkbook workbook = new XSSFWorkbook();
//建立一個電子表格
XSSFSheet sheet = workbook.createSheet("mySheet");
//行對象
XSSFRow row ;
for(int r = 0 ;r<3;r++) {
//1.建立一個行對象
row = sheet.createRow(r);
for(int c = 0;c<3;c++) {
//2.建立一個單元格
Cell cell = row.createCell(c);
cell.setCellValue(r+c);
}
}
FileOutputStream fos = new FileOutputStream(PATH);
workbook.write(fos);
workbook.close();
}
}複製代碼
public class Readsheet
{
static XSSFRow row;
public static void main(String[] args) throws Exception
{
FileInputStream fis = new FileInputStream(
new File("WriteSheet.xlsx"));
//打開須要讀取的文件
XSSFWorkbook workbook = new XSSFWorkbook(fis);
//按照SHEET的名稱讀取一個電子表格
XSSFSheet sheet = workbook.getSheet("mySheet");
// int size = sheet.getLastRowNum();
// System.out.println(size);
// int s= sheet.getPhysicalNumberOfRows();
// System.out.println(s);
//獲取一個行的迭代器
Iterator<Row> rowIterator = sheet.rowIterator();
while(rowIterator.hasNext()) {
row = (XSSFRow) rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellTypeEnum() ) {
case NUMERIC:
double val = cell.getNumericCellValue();
System.out.print(val+"\t\t");
break ;
case STRING:
String str = cell.getStringCellValue();
System.out.print(str+"\t\t");
}
}
System.out.println();
}
fis.close();
}
}複製代碼
運行結果:
0.0 1.0 2.0
1.0 2.0 3.0
2.0 3.0 4.0
這裏須要注意,在讀取單元格的值時須要先判斷數據類型,否則獲取數據會報數據類型錯誤。spa