我的 python 代码如何自动知道在 Excel 中的哪一行停止
how can my python code automatically know which row to stop at in Excel
我有一个 Excel 工作表。下面的代码将应用于每一行数据。现在它指定为 100 行。每次我 运行 这段代码时,行数都会改变。我必须手动打开我的脚本并调整行数。有没有办法每次都没有手动过程,并且自动计算相关的行数。我在编码方面没有太多知识。请帮忙。
import openpyxl
wb = openpyxl.load_workbook('Formal Units.xlsx', data_only=True)
sheet = wb['Sheet1']
last_row = 100
data_column = 26
result_column = 10
for i in range(2, last_row):
if sheet.cell(row=i, column=data_column).value == "R":
sheet.cell(row=i, column=result_column).value = "Y"
else:
sheet.cell(row=i, column=result_column).value = "N"
wb.save('Formal Units.xlsx')
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
wb.worksheets[0]['h6'] = None
print((wb.worksheets[0].max_row, wb.worksheets[0].max_column))
def find_edges(sheet):
row = sheet.max_row
while row > 0:
cells = sheet[row]
if all([cell.value is None for cell in cells]):
row -= 1
else:
break
if row == 0:
return 0, 0
column = sheet.max_column
while column > 0:
cells = next(sheet.iter_cols(min_col=column, max_col=column, max_row=row))
if all([cell.value is None for cell in cells]):
column -= 1
else:
break
return row, column
print(find_edges(wb.worksheets[0]))
您可以使用 iter_row
迭代行以获取 openpyxl Cell 对象或仅 values
以获取单元格值。
在你的例子中:
import openpyxl
wb = openpyxl.load_workbook('Formal Units.xlsx', data_only=True)
sheet = wb['Sheet1']
rows_generator = sheet.values
data_column = 26
result_column = 10
headers = next(rows_generator) # comment if you don't have header row
for (i, row) in enumerate(rows_generator, start=2): # if you don't have header row start=1
sheet.cell(row=i, column=result_column).value = 'Y' if row[data_column-1] == 'R' else 'N' # -1, because list is 0 indexed
wb.save('Formal Units.xlsx')
我有一个 Excel 工作表。下面的代码将应用于每一行数据。现在它指定为 100 行。每次我 运行 这段代码时,行数都会改变。我必须手动打开我的脚本并调整行数。有没有办法每次都没有手动过程,并且自动计算相关的行数。我在编码方面没有太多知识。请帮忙。
import openpyxl
wb = openpyxl.load_workbook('Formal Units.xlsx', data_only=True)
sheet = wb['Sheet1']
last_row = 100
data_column = 26
result_column = 10
for i in range(2, last_row):
if sheet.cell(row=i, column=data_column).value == "R":
sheet.cell(row=i, column=result_column).value = "Y"
else:
sheet.cell(row=i, column=result_column).value = "N"
wb.save('Formal Units.xlsx')
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
wb.worksheets[0]['h6'] = None
print((wb.worksheets[0].max_row, wb.worksheets[0].max_column))
def find_edges(sheet):
row = sheet.max_row
while row > 0:
cells = sheet[row]
if all([cell.value is None for cell in cells]):
row -= 1
else:
break
if row == 0:
return 0, 0
column = sheet.max_column
while column > 0:
cells = next(sheet.iter_cols(min_col=column, max_col=column, max_row=row))
if all([cell.value is None for cell in cells]):
column -= 1
else:
break
return row, column
print(find_edges(wb.worksheets[0]))
您可以使用 iter_row
迭代行以获取 openpyxl Cell 对象或仅 values
以获取单元格值。
在你的例子中:
import openpyxl
wb = openpyxl.load_workbook('Formal Units.xlsx', data_only=True)
sheet = wb['Sheet1']
rows_generator = sheet.values
data_column = 26
result_column = 10
headers = next(rows_generator) # comment if you don't have header row
for (i, row) in enumerate(rows_generator, start=2): # if you don't have header row start=1
sheet.cell(row=i, column=result_column).value = 'Y' if row[data_column-1] == 'R' else 'N' # -1, because list is 0 indexed
wb.save('Formal Units.xlsx')