horacepython 发表于 2023-5-10 23:15:21

Excel 中行号和列号提取

t1 = sh1.used_range.last_cell
print (t1)

使用xlwings得到了已使用区域的last_cell,地址如下:
<Range Sheet0!$R$606>

怎么把对应的列“R”和行“606”提取出来?
(需要提取“R”,而不是序号18)

isdkz 发表于 2023-5-10 23:15:47

可以使用xlwings中的 address 方法来获取单元格地址,然后使用正则表达式提取出列号和行号。具体实现如下:

import re

# 获取单元格地址
cell_address = sh1.used_range.last_cell.address

# 提取出列号和行号
match = re.match(r'\$?(+)\$?(\d+)', cell_address)
column = match.group(1)
row = int(match.group(2))

print(column)# 输出列号:R
print(row)# 输出行号:606


其中,正则表达式 \$?(+)\$?(\d+) 可以匹配类似于 $R$606 、 R606 、 $R606 、 R$606 等格式的单元格地址。 match.group(1) 获取到的是列号, match.group(2) 获取到的是行号。

sfqxx 发表于 2023-5-10 23:18:59

可以使用xlwings的Range对象的row和column属性分别获取对应的行号和列字母。如下所示:


import xlwings as xw

# 打开工作簿
wb = xw.Book('Test.xls')

# 获取已使用区域的last_cell
t1 = wb.sheets['Sheet0'].used_range.last_cell

# 分别获取行、列信息
row_num = t1.row
col_letter = xw.utils.column_index_from_string(t1.column)

print(f"列:{col_letter},行:{row_num}")

注意,需要将列字母转化为列号,可以使用`xw.utils.column_index_from_string`函数实现,它会返回一个 int 类型的列号。
有用请设置最佳答案

歌者文明清理员 发表于 2023-5-10 23:21:02

print(str(t1).replace('$', ''))

歌者文明清理员 发表于 2023-5-10 23:21:29

isdkz 发表于 2023-5-10 23:15
可以使用xlwings中的 address 方法来获取单元格地址,然后使用正则表达式提取出列号和行号。具体实现如下: ...

将简单的问题复杂化{:10_277:}

horacepython 发表于 2023-5-10 23:31:11

sfqxx 发表于 2023-5-10 23:18
可以使用xlwings的Range对象的row和column属性分别获取对应的行号和列字母。如下所示:




col_letter = xw.utils.column_index_from_string(t1.column)
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
    col_letter = xw.utils.column_index_from_string(t1.column)
AttributeError: module 'xlwings.utils' has no attribute 'column_index_from_string'

您好,我这出现了错误提示,是不是哪不对?另外,需要 提取“R”,不是18哦,谢谢!

horacepython 发表于 2023-5-10 23:32:36

isdkz 发表于 2023-5-10 23:15
可以使用xlwings中的 address 方法来获取单元格地址,然后使用正则表达式提取出列号和行号。具体实现如下: ...

谢谢回复,这个能实现结果,但好像正则表达式有点难,有没有更易于理解的方法?

isdkz 发表于 2023-5-10 23:42:39

horacepython 发表于 2023-5-10 23:32
谢谢回复,这个能实现结果,但好像正则表达式有点难,有没有更易于理解的方法?

当然,对于不熟悉正则表达式的人来说,这种方法可能会显得有些复杂。你也可以使用 Python 的字符串处理方法来达到同样的效果。以下是一个更直观的方法:

import re

# 获取单元格地址
cell_address = sh1.used_range.last_cell.address

# 去除"$"符号
cell_address = cell_address.replace('$', '')

# 分割字符串,提取列号和行号
column, row = re.split('(\d+)', cell_address)

print(column)# 输出列号:R
print(int(row))# 输出行号:606

这段代码首先将地址中的"$"符号去掉,然后利用 Python 的字符串 split 方法将列号和行号分割开。这个方法更直观,但是假设单元格地址的格式始终是先列后行,并且列名中不包含数字。

Axiujiu 发表于 2023-5-11 08:53:04

感谢,小甲鱼师傅,yyds!!!

Axiujiu 发表于 2023-5-12 08:58:51

感激分享,认真学习。
页: [1]
查看完整版本: Excel 中行号和列号提取