Java與Excel操作深度教學:從基礎到進階應用與實務案例

本教學深入介紹如何以Java操作Excel,從Apache POI安裝、基本讀寫、進階格式設定,到效能優化與常見問題解析,並結合實務案例,協助專案管理與團隊協作自動化。

🧮 還在用 Excel 管理專案?試試這些更聰明的工具 🚀

從 Excel 升級到專業專案管理 × 自動化平台

還在用 Excel 追進度?monday.com 幫你把任務、時程、甘特圖、報表全部自動化! 支援 Excel 一鍵匯入,輕鬆轉換成更直覺的視覺化專案看板。 全球 22.5 萬家公司愛用,AI 輔助讓團隊溝通更順暢。
⭐ 最多人使用

從任務到 OKR,一站式專案與團隊協作平台

整合文件、OKR、任務與自動化流程,AI 助你更快完成工作。 也支援從 Excel 匯入專案資料。

輕鬆整理文件 × 規劃專案 × 建立資料庫

Notion AI 幫你自動生成 SOP、專案摘要與任務追蹤頁面。 從 Excel 匯入表格,打造你自己的工作空間。

Java操作Excel總覽

Java在自動化報表、資料匯入匯出、專案管理等領域,常需與Excel互動。主流解決方案為Apache POI,其支援.xls(Excel 97-2003)與.xlsx(Excel 2007及以上)格式,並能進行讀寫、格式設定、公式、圖片等多元操作。
POI適用於:
– 自動化產生專案進度報表
– 批次資料整理與轉換
– 系統與團隊協作工具(如Monday.com)整合,實現流程自動化

POI與其他Java Excel庫比較

工具 支援格式 特點與適用情境 授權
Apache POI .xls, .xlsx 功能最完整,社群活躍,適合多數應用 Apache-2.0
JExcelAPI .xls 較輕量,僅支援舊格式,功能有限 LGPL
EasyExcel .xlsx 針對大量資料效能優化,API簡潔 Apache-2.0

建議: 一般專案選用POI最為靈活,若需處理大量資料可評估EasyExcel。

授權與商用注意事項

Apache POI採Apache-2.0授權,商用無須付費,但需保留授權聲明。若專案有特殊合規需求,建議再次確認授權條款。


開發環境與POI安裝

POI模組說明與選擇

  • poi:基本功能,支援.xls
  • poi-ooxml:支援.xlsx
  • poi-ooxml-schemas:進階格式
  • ooxml-schemas:處理複雜XML結構

安裝方式

Maven:

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

Gradle:

implementation 'org.apache.poi:poi-ooxml:5.2.3'

手動安裝:
可至Apache POI官方網站下載JAR包,加入專案。

建議: 優先選用最新穩定版,確保安全與新功能。


讀取Excel檔案

3.1 基本讀取(Workbook/Sheet/Row/Cell)

以下範例展示如何讀取Excel檔案的第一個Sheet與所有儲存格:

FileInputStream fis = new FileInputStream("檔案路徑.xlsx");
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);

for (Row row : sheet) {
    for (Cell cell : row) {
        System.out.print(cell.toString() + "\t");
    }
    System.out.println();
}
workbook.close();
fis.close();

3.2 處理不同型別儲存格

Excel儲存格型別多元,常見有文字、數字、日期、布林、空值。正確判斷型別可避免錯誤:

for (Row row : sheet) {
    for (Cell cell : row) {
        switch (cell.getCellType()) {
            case STRING:
                System.out.println(cell.getStringCellValue());
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case BLANK:
                System.out.println("(空值)");
                break;
            default:
                System.out.println("未知型別");
        }
    }
}

常見錯誤:
– 直接以getStringCellValue()讀取數字或日期會拋出例外。
– 日期需用DateUtil.isCellDateFormatted(cell)判斷。

3.3 讀取多Sheet、批次讀取

若需處理多個工作表,可遍歷所有Sheet:

for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
    Sheet sheet = workbook.getSheetAt(i);
    // 依需求處理每個Sheet
}

產業應用情境:
專案管理時,常將不同部門進度分Sheet儲存,批次讀取可自動彙總進度。


寫入與建立Excel檔案

4.1 基本寫入(建立Workbook/Sheet/Row/Cell)

建立新Excel檔案並寫入資料:

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("專案進度");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("任務名稱");

FileOutputStream fos = new FileOutputStream("output.xlsx");
workbook.write(fos);
fos.close();
workbook.close();

4.2 批次寫入、覆寫檔案

大量資料建議分批寫入,避免記憶體溢位。可參考下列方式:

for (int i = 0; i < 10000; i++) {
    Row row = sheet.createRow(i);
    row.createCell(0).setCellValue("任務" + i);
}

注意:
– 若需覆寫檔案,請確認檔案未被其他程式占用。
– 寫入後務必close()資源。

4.3 設定儲存格格式(顏色、字型、邊框、合併儲存格、資料驗證)

設定格式:

CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
font.setColor(IndexedColors.BLUE.getIndex());
style.setFont(font);
cell.setCellStyle(style);

合併儲存格:

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));

資料驗證(下拉選單):

DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createExplicitListConstraint(new String[]{"進行中", "已完成"});
CellRangeAddressList addressList = new CellRangeAddressList(1, 100, 1, 1);
DataValidation validation = helper.createValidation(constraint, addressList);
sheet.addValidationData(validation);

4.4 插入公式、圖片

插入公式:

Cell formulaCell = row.createCell(2);
formulaCell.setCellFormula("A2+B2");

插入圖片:

InputStream is = new FileInputStream("logo.png");
byte[] bytes = IOUtils.toByteArray(is);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
is.close();

CreationHelper helper = workbook.getCreationHelper();
Drawing<?> drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0);
anchor.setRow1(1);
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize();

實務案例:
自動產生含公司Logo與公式的專案進度報表,提升專業形象與效率。


進階應用與實務案例

5.1 自動化報表產生

專案經理可透過Java程式自動彙整各部門進度,產生格式統一、含公式與條件格式的Excel報表,減少人工彙整錯誤。

5.2 批次資料匯入/匯出

如人資部門批次匯入員工資料,或IT部門批次匯出系統日誌,皆可利用POI自動化處理,提升效率與準確性。

5.3 整合團隊協作工具

將Excel自動產生的任務清單,匯入Monday.com或ClickUp等協作平台,實現任務分派、進度追蹤自動化,減少重複輸入,提升團隊協作效率。


常見錯誤與效能優化

常見錯誤

問題描述 原因與解法
中文亂碼 未正確設定檔案編碼,建議使用UTF-8
檔案損毀 未正確關閉workbook/stream,務必close()
記憶體溢位 大量資料建議使用SXSSFWorkbook(POI提供的流式寫入)
型別錯誤 讀取前應判斷cell型別,避免強制轉型

效能優化建議

  • 批次處理大量資料時,建議使用SXSSFWorkbook(支援流式寫入,減少記憶體占用)。
  • 讀取大檔案時,僅載入必要Sheet或區塊。
  • 釋放資源,避免檔案描述符耗盡。

產業實例:
金融業每日自動產生萬筆交易報表,採用SXSSFWorkbook有效避免記憶體溢位。


FAQ:Java操作Excel常見問題

如何處理Excel中的中文與特殊字元?

請確保Java程式與Excel檔案皆採用UTF-8編碼,並於寫入時避免手動轉碼。

如何正確處理日期格式?

判斷儲存格型別後,若為日期型,建議用DateUtil.isCellDateFormatted(cell)判斷,並可自訂格式化輸出。

如何避免大檔案導致記憶體溢位?

建議使用SXSSFWorkbook進行流式寫入,或分批讀寫。

如何處理空值或缺漏資料?

讀取前先判斷cell == nullcell.getCellType() == CellType.BLANK,避免NullPointerException。

POI支援哪些Excel版本?

POI支援.xls(Excel 97-2003)與.xlsx(Excel 2007及以上),建議優先使用.xlsx以獲得完整功能。


結論與工具推薦

Java結合Apache POI能高效處理Excel各類需求,無論是自動化報表、批次資料處理,還是與團隊協作平台整合,皆可大幅提升專案效率。若需進一步優化團隊流程,建議結合Monday.com等現代專案協作工具,實現資料自動同步、任務追蹤與進度視覺化,讓專案管理更上一層樓。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

✨ 讓專案管理變簡單,團隊更強大!

在專案推進的每一步,效率就是競爭力。monday.com 整合進度追蹤、團隊協作與資源分配,讓你隨時掌握全局、快速解決問題。
全球18萬家專業團隊已經採用,你還在等什麼?