Python Openpyxl sheet.dimensions

flseospp  于 2023-10-21  发布在  Python
关注(0)|答案(3)|浏览(147)

我有一个数据电子表格,想知道包含数据的范围的第一个和最后一个单元格。我使用Python和OpenPyxl。属性返回非空单元格区域的左上角和右下角单元格。
我怎样才能把板材尺寸的结果放在2个变量中。示例:板材尺寸的结果为A2:C20。
我需要一个变量包含范围的第一个单元格(本例中为A2),另一个变量包含范围的最后一个单元格(本例中为C20)。
我期待的东西像表。尺寸。第一次和最后一次,但到目前为止,我找不到答案。
the spreadsheet
该程序的基本内容如下:

import openpyxl

book = openpyxl.load_workbook('test 1.xlsx', data_only=True)
sheet = book.active

print (sheet.dimensions)

book.save("result test 1.xlsx")

当程序运行时,它给出的结果是A2:C20。

uubf1zoe

uubf1zoe1#

我发现openpyxl有以下属性:

  • sheet.min_row
  • 工作表.max_row
  • 最小列
  • 页面最大列

这些正是我需要的数字,有了这些数字,我就知道处理整个工作表需要多少次迭代。范例:

import openpyxl

book = openpyxl.load_workbook('test 1.xlsx', data_only=True)
sheet = book.active

mi_row = sheet.min_row
ma_row = sheet.max_row
mi_col = sheet.min_column
ma_col = sheet.max_column

print(mi_row, mi_col, ma_row, ma_col)

for row in sheet.iter_rows(min_row=mi_row, min_col=mi_col, max_row=ma_row, max_col=ma_col):
    for cell in row:
        pop = (cell.value)
        print(pop)
dgjrabp2

dgjrabp22#

会认为只要在字符串返回上使用split方法就可以开始了。这将给您给予两个单元地址,Openpyxl随后有方法将其用作返回单元对象(在这些地址)的参数。
这样的话,就不应该有一个以上的冒号,尽管可能需要为工作表上的单个单元格(也许根本没有冒号)设置奇怪的情况。会认为这可能会起作用:
upper_left, lower_right = return_string.split(":")

xlpyo6sf

xlpyo6sf3#

有点晚了,但对于其他使用openpyxl的人来说,它有一些有用的实用函数来做这件事,并且可以处理任何奇怪的边缘情况。

from openpyxl import load_workbook
from openpyxl.utils.cell import range_boundaries, get_column_letter

wb_path = 'test 1.xlsx'
wb = load_workbook(wb_path, data_only=True)
ws = wb.active

# utility functions offer robust handling of excel range strings
test_ranges = [
    "A1:C3",  # -> A1 and C3
    "$A1:C$3",  # -> A1 and C3
    "A2",  # -> A2 and A2
    ws.dimensions,  # OP's answer
]

for rng in test_ranges:
    # where the magic happens
    sc, sr, ec, er = range_boundaries(rng)
    start_cell = get_column_letter(sc) + str(sr)
    end_cell = get_column_letter(ec) + str(er)
    print(f"{start_cell} and {end_cell}")

相关问题