Reputation: 1429
openpyxl
seems to be a great method for using Python to read Excel files, but I've run into a constant problem. I need to detect whether a cell is empty or not, but can't seem to compare any of the cell properties. I tried casting as a string and using ""
but that didn't work. The type of cell when it is empty is None
, or NoneType
but I can't figure out how to compare an object to that.
Suggestions? I understand openpyxl
is under development, but maybe this is more a general Python problem.
Upvotes: 32
Views: 134937
Reputation: 1
In my case the fix was compare with None as String
if cell(row,col).value == "None":
print(" Ignore cell ... ")
Upvotes: 0
Reputation: 1946
The
if cell.value is None:
is the best option to use for this case.
if you wish to use it in an iteration, you can use it like this:
ws=wb.active
names=ws['C']
for x in names:
if x.value is None:
break
print(x.value)
The problem with ws.max_column
and ws.max_row
is that it will count blank columns as well, thus defeating the purpose.
Upvotes: 4
Reputation: 53
You can change the cell or cells you wish to validate Also you can code, for example:
import openpyxl
wb = openpyxl.load_workbook("file.xlsx")
sheet = wb.get_sheet_by_name('Sheet1')
if sheet.cell(row = 1, column=7).value == None:
print("Blank")
else:
print("No blank")
Upvotes: 0
Reputation: 6664
This worked for me.
if cell.value is None:
print("Blank")
else:
print("Not Blank")
Upvotes: 24
Reputation: 582
To do something when cell is not empty add:
if cell.value:
which in python is the same as if cell value is not None (i.e.: if not cell.value == None:)
Note to avoid checking empty cells you can use
worksheet.get_highest_row()
and
worksheet.get_highest_column()
Also I found it useful (although might not be a nice solution) if you want to use the contents of the cell as a string regardless of type you can use:
unicode(cell.value)
Upvotes: 33