您可以通过将一行中的所有单元格值设置为 'None' 来使用 openpyxl 删除 Python 中的行吗?
Can you delete rows in Python with openpyxl by setting all cell values in a row to 'None'?
我正在使用 openpyxl 尝试从电子表格中删除行。我知道有一个专门用于删除行的函数,但是,我试图在不知道该函数的情况下解决这个问题,现在我想知道为什么我的方法不起作用。
为了简化问题,我建立了一个电子表格,并在其中的一些单元格中填入了字母。在这种情况下,第一个 print(sheet.max_row)
打印出“9”。将所有单元格值设置为 None
后,我希望行数为 0,但是,第二个打印语句再次打印“9”。
是否可以通过将一行中的所有单元格设置为 None 来减少行数?
import openpyxl
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter, column_index_from_string
spreadsheet = load_workbook(filename = pathToSpreadsheet) #pathToSpreadsheet represents the absolute path I had to the spreadsheet that I created.
sheet = spreadsheet.active
print(sheet.max_row) # Printed "9".
rowCount = sheet.max_row
columnCount = sheet.max_column
finalBoundary = get_column_letter(columnCount) + str(rowCount)
allCellObjects = sheet["A1":finalBoundary]
for rowOfCells in allCellObjects:
for cell in rowOfCells:
cell.value = None
print(sheet.max_row) # Also printed "9".
感谢您的时间和精力!
简答NO.
但是,您可以使用单元格坐标从 sheet 访问单元格并将其删除。
for rowOfCells in allCellObjects:
for cell in rowOfCells:
del sheet[cell.coordinate]
print(sheet.max_row)
更详尽的答案是,Openpyxl 中的作品sheet 将其 _cells
存储为 dict
,以坐标为键。 max_row
属性 定义为
@property
def max_row(self):
"""The maximum row index containing data (1-based)
:type: int
"""
max_row = 1
if self._cells:
rows = set(c[0] for c in self._cells)
max_row = max(rows)
return max_row
所以如果单元格是 None,keys/coordinates 仍然会占优势,例如:_cells = {(1,1):None, (1,2):None, (5,4): None}
。
max_row
然后仍会为我们提供密钥的最大 y 分量。
我正在使用 openpyxl 尝试从电子表格中删除行。我知道有一个专门用于删除行的函数,但是,我试图在不知道该函数的情况下解决这个问题,现在我想知道为什么我的方法不起作用。
为了简化问题,我建立了一个电子表格,并在其中的一些单元格中填入了字母。在这种情况下,第一个 print(sheet.max_row)
打印出“9”。将所有单元格值设置为 None
后,我希望行数为 0,但是,第二个打印语句再次打印“9”。
是否可以通过将一行中的所有单元格设置为 None 来减少行数?
import openpyxl
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter, column_index_from_string
spreadsheet = load_workbook(filename = pathToSpreadsheet) #pathToSpreadsheet represents the absolute path I had to the spreadsheet that I created.
sheet = spreadsheet.active
print(sheet.max_row) # Printed "9".
rowCount = sheet.max_row
columnCount = sheet.max_column
finalBoundary = get_column_letter(columnCount) + str(rowCount)
allCellObjects = sheet["A1":finalBoundary]
for rowOfCells in allCellObjects:
for cell in rowOfCells:
cell.value = None
print(sheet.max_row) # Also printed "9".
感谢您的时间和精力!
简答NO. 但是,您可以使用单元格坐标从 sheet 访问单元格并将其删除。
for rowOfCells in allCellObjects:
for cell in rowOfCells:
del sheet[cell.coordinate]
print(sheet.max_row)
更详尽的答案是,Openpyxl 中的作品sheet 将其 _cells
存储为 dict
,以坐标为键。 max_row
属性 定义为
@property
def max_row(self):
"""The maximum row index containing data (1-based)
:type: int
"""
max_row = 1
if self._cells:
rows = set(c[0] for c in self._cells)
max_row = max(rows)
return max_row
所以如果单元格是 None,keys/coordinates 仍然会占优势,例如:_cells = {(1,1):None, (1,2):None, (5,4): None}
。
max_row
然后仍会为我们提供密钥的最大 y 分量。