首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 調用 Java 模塊 SmartXLS 和 JPype 修改 Excel 文件並保留圖表

     編輯:更多程式設計知識

Python 原生庫 (xlrd/xlwt/openpyxl) 對圖表支持有限。利用 JPype 啟動 JVM,調用 Java 庫 SmartXLS,可完整讀寫 Excel 並保留圖表、格式、宏。

環境準備

  1. 安裝 JDK (8/11/17),配置 JAVA_HOME。
  2. 安裝 JPype:pip install jpype1 (JPype1 是維護分支)。
  3. 下載 SmartXLS.jar (商業庫,有免費試用版),放項目目錄。

核心代碼


# -*- coding: utf-8 -*-
from __future__ import print_function, division
import os
import jpype

# 1. 啟動 JVM (僅一次,程序啟動時)
# classpath 包含 SmartXLS.jar
jar_path = os.path.abspath("SX.jar")  # 或 SmartXLS.jar
jpype.startJVM(
    jpype.getDefaultJVMPath(),
    '-Djava.class.path=' + jar_path,
    '-Xmx512m'  # 根據文件大小調整堆內存
)

try:
    # 2. 獲取 Java 類
    WorkBook = jpype.JClass('com.smartxls.WorkBook')
    
    # 3. 實例化並操作
    wb = WorkBook()
    wb.read("input.xlsx")          # 讀取文件
    wb.setNumber(0, 2, 0, 20.0)    # Sheet 0, 行 2, 列 0 寫入數值 20.0
    # wb.setText(0, 1, 1, "Hello") # 寫入文本
    wb.write("output.xlsx")        # 寫出文件,保留圖表/格式
    print("Excel 修改完成,圖表已保留")
finally:
    # 4. 關閉 JVM (程序結束時)
    jpype.shutdownJVM()

關鍵 API 對照

操作SmartXLS 方法
讀取文件read(String path)
寫入數值setNumber(sheet, row, col, value)
寫入文本setText(sheet, row, col, text)
寫入公式setFormula(sheet, row, col, formula)
獲取單元格getCell(sheet, row, col) 返回 Cell 對象
插入/刪除行列insertRow/Col, deleteRow/Col
複製/移動 SheetcopySheet, moveSheet
圖表操作getCharts(), addChart() 等
保存write(String path)

注意事項

  • JVM 單例:進程中只能啟動一次 JVM,startJVM 放模塊級或單例初始化。
  • 線程附著:非主線程調用需 jpype.attachThreadToJVM(),用完 detachThreadFromJVM()。
  • 異常處理:Java 異常映射為 Python 異常,用 try/except 捕獲。
  • 路徑分隔符:Windows 用 ;,Linux/Mac 用 : 分隔 classpath 多路徑。
  • 授權:SmartXLS 商業庫,生產環境需購買授權,試用版有水印/限制。
  • 替代方案:pythonnet 調用 .NET 版 SmartXLS (NPOI/EPPlus),或 subprocess 調用 LibreOffice 無頭模式轉換。

總結

JPype + SmartXLS 是 Python 完整操作 Excel (含圖表、宏、複雜格式) 的強大方案。關鍵點:正確啟動/關閉 JVM、類路徑配置、線程附著、授權合規。對於純數據讀寫,優先考慮 openpyxl/pandas 純 Python 方案,無 JVM 依賴更輕量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved