【问题标题】:Python Openpyxl sheet.dimensionsPython Openpyxl sheet.dimensions
【发布时间】:2019-02-04 04:02:11
【问题描述】:

我有一个包含数据的电子表格,并且想知道包含数据的区域的第一个和最后一个单元格。我将 Python 与 Openpyxl 一起使用。 sheet.dimensions 属性返回非空单元格区域的左上角和右下角单元格。 如何将 sheet.dimensions 的结果放入 2 个变量中。示例:sheet.dimensions 的结果是 A2:C20。 我需要一个包含范围的第一个单元格的变量(在本例中为 A2)和另一个包含范围的最后一个单元格的变量(在本例中为 C20)。 我期待像 sheet.dimensions.first 和 .last 这样的东西,但到目前为止我找不到答案。

the spreadsheet

程序基本如下:

导入openpyxl

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

sheet = book.active

打印(sheet.dimensions)

book.save("结果测试 1.xlsx")

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

【问题讨论】:

  • 你能告诉我们你到目前为止尝试了什么吗?很高兴看到MCVE

标签: excel python-3.x openpyxl


【解决方案1】:

我发现openpyxl有以下属性:

  • sheet.min_row
  • sheet.max_row
  • sheet.min_column
  • sheet.max_column

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

导入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

打印(mi_row,mi_col,ma_row,ma_col)

对于 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)

【讨论】:

    【解决方案2】:

    会认为只在字符串返回上使用split 方法会让你开始。这将为您提供两个单元格地址,然后 Openpyxl 具有用作参数的方法来返回单元格对象(在这些地址处)。

    语法是这样的,不应该有超过一个冒号,但可能需要为工作表上的单个单元格捕获奇怪的情况(也许根本没有冒号)。会认为这可能会完成这项工作:

    upper_left, lower_right = return_string.split(":")

    【讨论】:

      【解决方案3】:

      有点晚了,但对于其他使用 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}")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多