python+xlwings:获取最大行数不是想要的行数。实际有效值行数值有20行,获取行数为40.
原因在于获取最大行数时,空行被设置了格式,导致也被计算了进来。
请问有没有什么办法能避过空行值?
可以使用xlwings的used_range属性来获取实际有效值所在的范围,然后再获取该范围的最大行数。示例代码如下:
import xlwings as xw
# 打开Excel文件
wb = xw.Book('example.xlsx')
# 获取第一个Sheet
sheet = wb.sheets[0]
# 获取实际有效值所在的范围
used_range = sheet.used_range
# 获取该范围的最大行数
max_row = used_range.last_cell.row
print(max_row)
这样就可以避免空行被计算在内的问题。
import xlwings as xw
rng = xw.books['工作簿名称'].sheets['工作表名称'].range('a1')
# 第一个应用第一个工作簿第一张sheet的第一个单元格
xw.apps[0].books[0].sheets[0].range('a1')
xw.apps[0].books[0].sheets[0].range(1,1) # 使用row+column定位,坐标从1开始
# 引用活动sheet的单元格,直接接xw,Range首字母大写
rng = xw.Range('a1') # a1
rng = xw.Range(1,1) # a1,行列用tuple进行引用,圆括号从1开始
rng = xw.Range((1,1),(3,3)) # a1:a3
# 也可以工作表对象接方括号引用单元格
sheet = xw.books['工作簿'].sheets['工作表名称']
rng = sheet['a1'] # a1单元格
rng = sheet['a1:b5'] # a1:b5单元格
rng = sheet[0,1] # b1单元格,也可以根据行列索引,从0开始为
rng = sheet[:10,:10] # a1:j10
# 单元格邻近范围
rng = sheet[0,0].current_region #a1单元格邻近区域=vba:currentregion
# 返回excel:ctrl键+方向键跳转单元格对象:上:up,下:down,左:left,右:right
# 等同于vba:end语法:xlup,xldown,xltoleft,xltoright
rng = sheet[0,0].end('down')
我可以通过xlwings的特殊功能UsedRange来获取到Excel表格中实际使用的行数。
具体步骤如下:
使用xlwings打开Excel文件并找到指定的表格sheet。
使用UsedRange方法获取到表格的实际使用范围,即包含数据的范围。例如,可以使用以下代码获取到第一列实际使用的行数:
```python import xlwings as xw
wb = xw.Book('example.xlsx') # 打开Excel文件 sheet = wb.sheets['Sheet1'] # 找到指定的表格sheet used_range = sheet.used_range # 获取实际使用范围 row_count = used_range.last_cell.row # 获取实际使用的行数 ```
上述代码中的used_range是一个Range对象,可以通过.last_cell属性获取到该范围的最后一个单元格。
```python import xlwings as xw
wb = xw.Book('example.xlsx') # 打开Excel文件 sheet = wb.sheets['Sheet1'] # 找到指定的表格sheet used_range = sheet.used_range # 获取实际使用范围 row_counts = [] for column in ["A", "B"]: # 遍历A列和B列 last_row = sheet.range(column + str(used_range.last_cell.row)).end('up').row # 寻找最后一个非空单元格 row_counts.append(last_row) # 将实际使用的行数添加到列表中 ```
上述代码中,使用了.range方法获取到每一列实际使用的范围,并使用.end方法找到每一列最后一个非空单元格,再通过.row属性获取该单元格所在的行号。将两列的实际使用行数存储在一个列表中。
注意,因为有空单元格的存在,直接使用last_cell属性可能无法获取到预期结果。因此可以使用.end('up')方法寻找最后一个非空单元格。
通过上述方法,我们可以避免空白行对表格操作的影响,获取到Excel表格中实际使用的行数。