import sys
import os
from java.io import FileInputStream
from org.apache.poi.ss.usermodel import WorkbookFactory, CellType
from org.apache.poi.xssf.usermodel import XSSFWorkbook
from org.apache.poi.hssf.usermodel import HSSFWorkbook
def log_error(message, exception=None):
logger = system.util.getLogger("ExcelReader")
logger.error(message)
if exception:
if hasattr(system, 'util') and hasattr(system.util, 'getStackTrace'):
logger.error("stack error: %s" % system.util.getStackTrace(exception))
else:
logger.error("error info: %s" % str(exception))
def get_cell_value(cell):
if not cell:
return ""
try:
cell_type = cell.getCellType()
if cell_type == CellType.STRING:
return cell.getStringCellValue() or ""
elif cell_type == CellType.NUMERIC:
if cell.getCellStyle().getDataFormatString() in [
'm/d/yy', 'm/d/yyyy', 'mm/dd/yyyy', 'yyyy-mm-dd'
]:
return str(cell.getDateCellValue())
else:
num_val = cell.getNumericCellValue()
if abs(num_val - round(num_val)) < 1e-6:
return str(int(num_val))
else:
return str(num_val)
elif cell_type == CellType.BOOLEAN:
return str(cell.getBooleanCellValue())
elif cell_type == CellType.BLANK or cell_type == CellType._NONE:
return ""
else:
return str(cell.toString())
except:
return ""
def read_excel_poi(file_path, sheet_name=0, header_row=0):
try:
if not os.path.exists(file_path):
log_error("empty : %s" % file_path)
return []
fis = FileInputStream(file_path)
if file_path.lower().endswith('.xlsx'):
workbook = XSSFWorkbook(fis)
else:
workbook = HSSFWorkbook(fis)
sheet_idx = sheet_name if isinstance(sheet_name, int) else workbook.getSheetIndex(sheet_name)
if sheet_idx == -1:
workbook.close()
fis.close()
return []
sheet = workbook.getSheetAt(sheet_idx)
data = []
headers = []
max_rows = sheet.getPhysicalNumberOfRows()
if header_row < max_rows:
header_row_obj = sheet.getRow(header_row)
if header_row_obj:
num_cols = header_row_obj.getLastCellNum()
headers = [get_cell_value(header_row_obj.getCell(c)) for c in range(num_cols)]
headers = [h.strip() for h in headers if h.strip()]
for row_idx in range(header_row + 1, max_rows):
row = sheet.getRow(row_idx)
if row:
row_data = [get_cell_value(row.getCell(c)) for c in range(row.getLastCellNum())]
if headers:
while len(row_data) < len(headers):
row_data.append("")
row_dict = dict(zip(headers, row_data))
else:
row_dict = {"Col{i+1}": row_data[i] for i in range(len(row_data))}
data.append(row_dict)
workbook.close()
fis.close()
return data
except Exception as e:
error_msg = "Excel error: %s" % str(e)
log_error(error_msg, e)
print(error_msg)
return []
I run this script in button event,but can’t get the data

