Install open3pyxl library on Debian system
# apt-get install open3pyxl
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Install open3pyxl library on user virtual environment (not messing with python used by Debian)
(venv) [user]@[hostname]:~/mypyenv$ pip list
Package Version
------- -------
pip 25.1.1
(venv) [user]@[hostname]:~/mypyenv$ pip install openpyxl
Collecting openpyxl
Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting et-xmlfile (from openpyxl)
Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-2.0.0 openpyxl-3.1.5
(venv) [user]@[hostname]:~/mypyenv$ pip list
Package Version
---------- -------
et_xmlfile 2.0.0
openpyxl 3.1.5
pip 25.1.1
Here is sample script to enumerate row and column
import openpyxl
from datetime import datetime
path = "./[replace_with_your_file].xlsx"
# wb_obj = openpyxl.load_workbook(path) # Open xlsx without option
wb_obj = openpyxl.load_workbook(path, data_only=True) # Open xlsx with option Data Only
## object sheet
# using active sheet
#sheet_obj = wb_obj.active
## using Sheet1
sheet_obj = wb_obj["Sheet1"]
# Sheet start from 1,1 not 0,0
# Access cell at row 1, column 1
#cell_obj = sheet_obj.cell(row=1, column=1)
#print("Cell 1 column 1 is ",cell_obj.value)
# to print row 1 column 20
#cell_obj = sheet_obj.cell(row=1, column=20)
#print("Cell 1 column 20 is ",cell_obj.value)
# Enumerate row
# first row is header
# max_row may contains empty row
for i in range (2, sheet_obj.max_row):
cell_obj = sheet_obj.cell(row=i, column=1)
if cell_obj.value is not None:
# enumerate column
# we need fix column e.q 6 column from 1 to 6
# Do not use max_column
# for j in range (1,
max_column
): # Do not use this, use fix number
for j in range (1, 6):
mycell_obj = sheet_obj.cell(row=i, column=j)
#if mycell_obj is not None: # if you use
max_column
, this will not working, only working for row
print(mycell_obj.value, " | ", end='') # print without new line
print() # print a new line
else:
# the row is empty we break
print() # print a new line
break