天天看點

JAVA 處理 Excel 的兩種常見方法 —— JXL(Workbook)和 POI(HSSFWorkbook、XSSFWorkbook)一、JXL 處理 Excel二、Poi 處理 Excel

JAVA 處理 Excel 的兩種常見方法

  • 一、JXL 處理 Excel
    • 1.1 Jxl 寫入Excel
    • 1.2 Jxl 讀取Excel
    • 1.3 Jxl 讀取 Excel 并寫入另一個 Excel
  • 二、Poi 處理 Excel
    • 2.1 HSSFWorkbook 處理 Excel
      • 2.1.1 HSSFWorkbook 介紹
      • 2.1.2 HSSFWorkbook 讀取 Excel
      • 2.1.3 HSSFWorkbook 寫入 Excel
    • 2.2 XSSFWorkbook 處理 Excel
      • 2.2.1 XSSFWorkbook 介紹
      • 2.2.2 XSSFWorkbook 讀取 Excel
      • 2.12.3 XSSFWorkbook 寫入 Excel

JAVA 處理 Excel 的兩種常見方法 Demo位址

一、JXL 處理 Excel

1.1 Jxl 寫入Excel

1.1.1 Jxl 依賴

依賴下載下傳位址Jxl依賴位址

<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
</dependency>
           

1.1.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zz</groupId>
    <artifactId>excel-demo</artifactId>
    <version>1.0</version>

    <dependencies>
        <!--jxl-->
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>
    </dependencies>

</project>
           

1.1.3 Java 代碼

/**
 * <p>
 * Jxl處理Excel
 * </p>
 *
 * @author W
 */
public class JxlForExcel {
    public static void main(String[] args) {
        wirteExcel();
    }

    /**
     * 寫入Excel
     */
    public static void wirteExcel() {
        WritableWorkbook wb = null;
        try {
            //檔案位址
            File file = new File("D:/ExcelDemo/demo1_write.xls");
            //建立檔案
            file.createNewFile();
            //建立Excel
            wb = Workbook.createWorkbook(file);
            //建立Sheet
            WritableSheet sheet1 = wb.createSheet("Sheet1", 1);
            //設定檔案第一行的titie
            String[] title = {"姓名", "性别", "成績"};
            //建立單元格
            Label label = null;
            for (int i = 0; i < title.length; i++) {
                label = new Label(i, 0, title[i]);
                sheet1.addCell(label);
            }
            //手動添加資料
            for (int i = 1; i < 5; i++) {
                //第一行第一列
                label = new Label(0, i, "張三");
                sheet1.addCell(label);
                //第一行第二列
                label = new Label(1, i, "男");
                sheet1.addCell(label);
                //第一行第三列
                label = new Label(2, i, "88");
                sheet1.addCell(label);
            }
            //寫入資料到Excel檔案
            wb.write();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (wb != null) {
                try {
                    wb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

1.2 Jxl 讀取Excel

1.1.1 要讀取的表格

表格共三個Sheet,其中隻有Sheet1和Sheet2有資料,Sheet為空白

JAVA 處理 Excel 的兩種常見方法 —— JXL(Workbook)和 POI(HSSFWorkbook、XSSFWorkbook)一、JXL 處理 Excel二、Poi 處理 Excel
JAVA 處理 Excel 的兩種常見方法 —— JXL(Workbook)和 POI(HSSFWorkbook、XSSFWorkbook)一、JXL 處理 Excel二、Poi 處理 Excel

1.1.2 Java 代碼

/**
 * <p>
 * Jxl處理Excel
 * </p>
 *
 * @author W
 */
public class JxlForExcel {
    public static void main(String[] args) {
        readExcel();
    }

    /**
     * 讀取EXCEL
     */
    public static void readExcel() {
        InputStream is = null;
        Workbook wb = null;
        try {
        	//檔案位址
        	File file = new File("D:/ExcelDemo/demo1.xls");
            //讀取檔案
            is = new FileInputStream(file.getAbsoluteFile());
            wb = Workbook.getWorkbook(is);
            //擷取Excel的總sheet數量
            int sheetsNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetsNum; i++) {
                System.out.println("========== Sheet" + (i + 1) + " ==========");
                //擷取Sheet對象
                Sheet sheet = wb.getSheet(i);
                //擷取該Sheet的總行數
                int rowsNum = sheet.getRows();
                for (int j = 0; j < rowsNum; j++) {
                    //擷取每行的總列數
                    int columnsNum = sheet.getColumns();
                    for (int k = 0; k < columnsNum; k++) {
                        //擷取每個單元格的值
                        String content = sheet.getCell(k, j).getContents();
                        System.out.print(content + " ");
                    }
                    System.out.println();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (wb != null) {
                wb.close();
            }
        }
    }
}
           

(3)輸出結果

========== Sheet1 ==========
序号 姓名 性别 
1 張三 男 
2 李四 女 
3 王二 男 
4 趙六 女 
5 吳七 保密 
========== Sheet2 ==========
序号 姓名 成績 
1 張三 98 
2 李四 85 
3 王二 73 
4 趙六 45 
5 吳七 34 
========== Sheet3 ==========
           

1.3 Jxl 讀取 Excel 并寫入另一個 Excel

1.3.1 Java 代碼

/**
 * <p>
 * Jxl處理Excel
 * </p>
 *
 * @author W
 */
public class JxlForExcel {
    public static void main(String[] args) {
        readAndWriteExcel();
    }

    /**
     * 讀取并寫入Excel
     */
    public static void readAndWriteExcel() {
        InputStream is = null;
        WritableWorkbook wwb = null;
        Workbook wb = null;
        try {
            //原Excel檔案位址
            File oldFile = new File("D:/ExcelDemo/demo1.xls");
            //新Excel檔案位址
            File newFile = new File("D:/ExcelDemo/new_demo1.xls");
            //建立新Excel檔案
            newFile.createNewFile();
            //建立Excel
            wwb = Workbook.createWorkbook(newFile);
            //讀取原Excel檔案
            is = new FileInputStream(oldFile.getAbsoluteFile());
            wb = Workbook.getWorkbook(is);
            //擷取原Excel的總sheet數量
            int sheetsNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetsNum; i++) {
                //在新Excel建立Sheet
                WritableSheet newSheet = wwb.createSheet("Sheet" + i, i);
                //擷取Sheet對象
                Sheet oldSheet = wb.getSheet(i);
                //擷取該Sheet的總行數
                int rowsNum = oldSheet.getRows();
                for (int j = 0; j < rowsNum; j++) {
                    //擷取每行的總列數
                    int columnsNum = oldSheet.getColumns();
                    Label label = null;
                    for (int k = 0; k < columnsNum; k++) {
                        //擷取每個單元格的值
                        String content = oldSheet.getCell(k, j).getContents();
                        //在新Excel中建立單元格
                        label = new Label(k, j, content);
                        //設定單元格值
                        newSheet.addCell(label);
                    }
                }
            }
            //寫入資料到新Excel
            wwb.write();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (wwb != null) {
                try {
                    wwb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (wb != null) {
                try {
                    wb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

二、Poi 處理 Excel

2.1 HSSFWorkbook 處理 Excel

2.1.1 HSSFWorkbook 介紹

(1)HSSFWorkbook 介紹

HSSFWorkbook 是操作Excel2003以前(包括2003)的版本,擴充名是.xls

(2)常用元件

HSSFWorkbook                      excel的文檔對象
HSSFSheet                         excel的表單
HSSFRow                           excel的行
HSSFCell                          excel的格子單元
HSSFFont                          excel字型
HSSFDataFormat                    日期格式
HSSFHeader                        sheet頭
HSSFFooter                        sheet尾(隻有列印的時候才能看到效果)
           

(3)樣式

HSSFCellStyle                       cell樣式
           

(3)輔助操作

HSSFDateUtil                        日期
HSSFPrintSetup                      列印
HSSFErrorConstants                  錯誤資訊表
           

(4)HSSFWorkbook 依賴

<dependency>
   <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<!-- 或者 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
           

2.1.2 HSSFWorkbook 讀取 Excel

(1)Java 代碼

要讀取的表格内容同上

/**
 * HSSFWorkbook 解析 .xls檔案
 *
 * @author W
 */
public class ReadExcelByHSSF {
    public static void main(String[] args) {
        InputStream is = null;
        HSSFWorkbook wb = null;
        try {
            //檔案位址
            File file = new File("D:/ExcelDemo/demo1.xls");
            //讀取檔案
            is = new FileInputStream(file);
            wb = new HSSFWorkbook(is);
            //擷取Excel的總sheet數量
            int sheetsNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetsNum; i++) {
                System.out.println("========== Sheet" + (i + 1) + " ==========");
                //擷取Sheet對象
                HSSFSheet sheet = wb.getSheetAt(i);
                //擷取該Sheet的總行數
                int rowNum = sheet.getLastRowNum();
                for (int j = 0; j < rowNum; j++) {
                    //擷取該行對象
                    HSSFRow rows = sheet.getRow(j);
                    //擷取每行的總單元格數
                    short cellNum = rows.getLastCellNum();
                    for (int k = 0; k < cellNum; k++) {
                        //擷取每個單元格的值
                        HSSFCell cell = rows.getCell(k);
                        //擷取單元格的資料類型
                        int cellType = cell.getCellType();
                        switch (cellType) {
                            //數字類型
                            case Cell.CELL_TYPE_NUMERIC:
                                int numValue = (int) cell.getNumericCellValue();
                                System.out.print(numValue + " ");
                                break;
                            //字元串類型
                            case Cell.CELL_TYPE_STRING:
                                String stringValue = cell.getStringCellValue();
                                System.out.print(stringValue + " ");
                                break;
                        }
                    }
                    System.out.println();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (wb != null) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

(2)輸出結果

========== Sheet1 ==========
序号 姓名 性别 
1 張三 男 
2 李四 女 
3 王二 男 
4 趙六 女 
========== Sheet2 ==========
序号 姓名 成績 
1 張三 98 
2 李四 85 
3 王二 73 
4 趙六 45 
========== Sheet3 ==========
           

2.1.3 HSSFWorkbook 寫入 Excel

(1)Java 代碼

/**
 * HSSFWorkbook 寫入 .xls檔案
 * 建立一個包含3個sheet,每個sheet為5行3列的 .xls檔案
 *
 * @author W
 */
public class WriteExcelByHSSF {

    public static void main(String[] args) {
        FileOutputStream os = null;
        HSSFWorkbook wb = null;
        try {
            //檔案位址
            File file = new File("D:/ExcelDemo/HSSFWorkbook_write.xls");
            os = new FileOutputStream(file);
            //建立檔案
            file.createNewFile();
            //建立工作對象
            wb = new HSSFWorkbook();
            //建立Sheet
            for (int i = 0; i < 3; i++) {
                HSSFSheet sheet = wb.createSheet("sheet" + i);
                //建立行
                for (int j = 0; j < 5; j++) {
                    HSSFRow row = sheet.createRow(j);
                    //建立單元格
                    for (int k = 0; k < 3; k++) {
                        //給單元格指派
                        HSSFCell cell = row.createCell(k);
                        cell.setCellValue("第" + j + "行,第" + k + "列");
                    }
                }

            }
            //寫入資料到Excel檔案
            wb.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (wb != null) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

(2)輸出結果

JAVA 處理 Excel 的兩種常見方法 —— JXL(Workbook)和 POI(HSSFWorkbook、XSSFWorkbook)一、JXL 處理 Excel二、Poi 處理 Excel

2.2 XSSFWorkbook 處理 Excel

2.2.1 XSSFWorkbook 介紹

(1)XSSFWorkbook 介紹

XSSFWorkbook 是操作Excel2007的版本,擴充名是.xlsx。

(2)XSSF的常用類

XSSFWorkbook:Excel文檔對象
XSSFSheet:Excel的表單
XSSFRow:Excel的行
XSSFCell:Excel的單元格
XSSFCellStyle:Excel單元格的實作
XSSFCellHeader:Excel的表單頭部
XSSFCellFooter:Excel的表單尾部
           

(3)依賴

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
           

2.2.2 XSSFWorkbook 讀取 Excel

(1)Java 代碼

要讀取的表格内容同上

/**
 * XSSFWorkbook 解析 .xlsx檔案
 *
 * @author W
 */
public class ReadExcelByXSSF {

    public static void main(String[] args) {
        FileInputStream is = null;
        XSSFWorkbook wb = null;
        try {
            //檔案位址
            File file = new File("D:/ExcelDemo/demo1.xlsx");
            //讀取檔案
            is = new FileInputStream(file);
            //擷取工作簿對象
            wb = new XSSFWorkbook(is);
            //擷取Excel的總sheet數量
            int sheetsNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetsNum; i++) {
                System.out.println("========== Sheet" + (i + 1) + " ==========");
                //擷取Sheet對象
                XSSFSheet sheet = wb.getSheetAt(i);
                //擷取該sheet的總行數
                int rowNum = sheet.getLastRowNum();
                for (int j = 0; j < rowNum; j++) {
                    //擷取行對象row
                    XSSFRow row = sheet.getRow(j);
                    //擷取每行的單元格數
                    short cellNum = row.getLastCellNum();
                    for (int k = 0; k < cellNum; k++) {
                        //擷取單元格對象
                        XSSFCell cell = row.getCell(k);
                        //根據單元格資料類型進行取值
                        switch (cell.getCellType()) {
                            case Cell.CELL_TYPE_NUMERIC:
                                int numValue = (int) cell.getNumericCellValue();
                                System.out.print(numValue + " ");
                                break;
                            case Cell.CELL_TYPE_STRING:
                                String stringValue = cell.getStringCellValue();
                                System.out.print(stringValue + " ");
                                break;
                        }
                    }
                    System.out.println("");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (wb != null) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

(2)輸出結果

========== Sheet1 ==========
序号 姓名 性别 
1 張三 男 
2 李四 女 
3 王二 男 
4 趙六 女 
========== Sheet2 ==========
序号 姓名 成績 
1 張三 98 
2 李四 85 
3 王二 73 
4 趙六 45 
========== Sheet3 ==========
           

2.12.3 XSSFWorkbook 寫入 Excel

(1)Java 代碼

/**
 * XSSFWorkbook 寫入 .xlsx檔案
 * 建立一個包含3個sheet,每個sheet為5行3列的 .xls檔案
 *
 * @author W
 */
public class WriteExcelByXSSF {

    public static void main(String[] args) {
        FileOutputStream os = null;
        XSSFWorkbook wb = null;
        try {
            //檔案位址
            File file = new File("D:/ExcelDemo/XSSFWorkbook_write.xlsx");
            os = new FileOutputStream(file);
            //建立檔案
            file.createNewFile();
            //建立工作對象
            wb = new XSSFWorkbook();
            //建立Sheet
            for (int i = 0; i < 3; i++) {
                XSSFSheet sheet = wb.createSheet("sheet" + i);
                //建立行
                for (int j = 0; j < 5; j++) {
                    XSSFRow row = sheet.createRow(j);
                    //建立單元格
                    for (int k = 0; k < 3; k++) {
                        //給單元格指派
                        XSSFCell cell = row.createCell(k);
                        cell.setCellValue("第" + j + "行,第" + k + "列");
                    }
                }

            }
            //寫入資料到Excel檔案
            wb.write(os);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (wb != null) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
           

(2)輸出結果

JAVA 處理 Excel 的兩種常見方法 —— JXL(Workbook)和 POI(HSSFWorkbook、XSSFWorkbook)一、JXL 處理 Excel二、Poi 處理 Excel