首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从openpyxl中的坐标值获取行号和列号

从openpyxl中的坐标值获取行号和列号
EN

Stack Overflow用户
提问于 2012-10-15 19:26:23
回答 9查看 108.4K关注 0票数 46

我正在尝试将excel中的坐标值转换为openpyxl中的行号和列号。

例如,如果我的单元格坐标是D4,我想要找到相应的行号和列号,以便在以后的操作中使用,在row = 3,column = 3的情况下。我可以使用返回4ws.cell('D4').row轻松地获得行号,然后只需减去1即可。但是类似的参数ws.cell('D4').column返回D,我不知道如何轻松地将其转换为int形式,以便进行后续操作。所以我向你们这些聪明的stackoverflow朋友们求助。你能帮帮我吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-10-15 19:39:30

您需要的是openpyxl.utils.coordinate_from_string()openpyxl.utils.column_index_from_string()

代码语言:javascript
运行
AI代码解释
复制
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string
xy = coordinate_from_string('A4') # returns ('A',4)
col = column_index_from_string(xy[0]) # returns 1
row = xy[1]
票数 73
EN

Stack Overflow用户

发布于 2015-11-08 20:30:47

openpyxl有一个名为get_column_letter的函数,可以将数字转换为列字母。

代码语言:javascript
运行
AI代码解释
复制
from openpyxl.utils import get_column_letter
print(get_column_letter(1))

1 --> A

50 --> AX

1234-- AUL

我一直在这样使用它:

代码语言:javascript
运行
AI代码解释
复制
from openpyxl import Workbook
from openpyxl.utils import get_column_letter

#create excel type item
wb = Workbook()
# select the active worksheet
ws = wb.active

counter = 0
for column in range(1,6):
    column_letter = get_column_letter(column)
    for row in range(1,11):
        counter = counter +1
        ws[column_letter + str(row)] = counter

wb.save("sample.xlsx")

票数 65
EN

Stack Overflow用户

发布于 2015-10-26 20:46:27

这是基于内森的回答。基本上,当行和/或列的宽度超过一个字符时,他的答案不能正常工作。抱歉,我有点过火了。下面是完整的脚本:

代码语言:javascript
运行
AI代码解释
复制
def main():
    from sys import argv, stderr

    cells = None

    if len(argv) == 1:
        cells = ['Ab102', 'C10', 'AFHE3920']
    else:
        cells = argv[1:]

    from re import match as rematch

    for cell in cells:
        cell = cell.lower()

        # generate matched object via regex (groups grouped by parentheses)
        m = rematch('([a-z]+)([0-9]+)', cell)

        if m is None:
            from sys import stderr
            print('Invalid cell: {}'.format(cell), file=stderr)
        else:
            row = 0
            for ch in m.group(1):
                # ord('a') == 97, so ord(ch) - 96 == 1
                row += ord(ch) - 96
            col = int(m.group(2))

            print('Cell: [{},{}] '.format(row, col))

if __name__ == '__main__':
    main()

Tl;dr和一堆评论...

代码语言:javascript
运行
AI代码解释
复制
# make cells with multiple characters in length for row/column
# feel free to change these values
cells = ['Ab102', 'C10', 'AFHE3920']

# import regex
from re import match as rematch

# run through all the cells we made
for cell in cells:
    # make sure the cells are lower-case ... just easier
    cell = cell.lower()

    # generate matched object via regex (groups grouped by parentheses)
    ############################################################################
    # [a-z] matches a character that is a lower-case letter
    # [0-9] matches a character that is a number
    # The + means there must be at least one and repeats for the character it matches
    # the parentheses group the objects (useful with .group())
    m = rematch('([a-z]+)([0-9]+)', cell)

    # if m is None, then there was no match
    if m is None:
        # let's tell the user that there was no match because it was an invalid cell
        from sys import stderr
        print('Invalid cell: {}'.format(cell), file=stderr)
    else:
        # we have a valid cell!
        # let's grab the row and column from it

        row = 0

        # run through all of the characters in m.group(1) (the letter part)
        for ch in m.group(1):
            # ord('a') == 97, so ord(ch) - 96 == 1
            row += ord(ch) - 96
        col = int(m.group(2))

        # phew! that was a lot of work for one cell ;)
        print('Cell: [{},{}] '.format(row, col))

print('I hope that helps :) ... of course, you could have just used Adam\'s answer,\
but that isn\'t as fun, now is it? ;)')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12902621

复制
相关文章
替换空格
https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
代码随想录
2021/07/16
4.7K0
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
用户3003813
2018/09/06
3.1K0
替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 public class Solution { public String replaceSpace(StringBuffer str) { if(str==null){ return null; } StringBuilder newStr = new St
desperate633
2018/08/27
2.4K0
替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。       看到这个题目,我们首先应该想到的是原来一个空格字符,替换之后变成'%'、'2'和'0'这3个字符,因此字符串会变长。如果是在原来的字符串上做替换,那么就有可能覆盖修改在该字符串后面的内存。如果是创建新的字符串并在新的字符串上做替换,那么我们可以自己分配足够多的内存。       在这里介绍一种时间复杂度为O(n)的解法。        我们可以先遍历
猿人谷
2018/01/17
2.8K0
替换空格
空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。
呼延十
2019/07/01
2.3K0
[剑指offer] 替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
尾尾部落
2018/09/04
1.9K0
[剑指offer][Java]替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
蛮三刀酱
2019/03/26
2.1K0
空格替换
描述 设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。 你的程序还需要返回被替换后的字符串的长度。 注意事项:如果使用 Java 或 Python, 程序中请用字符数组表示字符串。 样例 对于字符串 "Hello World" , 长度为 11 替换空格之后,参数中的字符串需要变为 "Hello%20World",并且把新长度 17 作为结果返回。 思路 循环遍历字符数组 碰到空字符则将空字符后所有的字符向后移动两位
一份执着✘
2018/06/04
2.6K0
替换空格_02
咱也不知道这题是不是有啥奇怪的思路要做?直接就下面这行代码结束了。 public String replaceSpace (String s) { if (s==null||s.length()==0){ return ""; }else { return s.replaceAll(" ","%20"); } }
名字是乱打的
2021/12/23
1.7K0
替换空格_02
LintCode 空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。 你的程序还需要返回被替换后的字符串的长度。
desperate633
2018/08/22
7660
[剑指]2空格替换
1,题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20 Happy。 2,解题思路 这里我们直接用字符串遍历的方法,将每一个字符遍历出来进行判断; 若等于空格,则替换成%20,不等于空格,则加上其本身即可; 最后再转换成字符串对象; 3,程序代码 public static String replaceSpace(StringBuffer str) { StringBuffer sb=n
程序员的时光001
2020/07/22
8950
004-替换空格
替换空格 请实现一个函数,将一个字符串中的每个空格替换成"%20"。 We Are Happy 输出 We%20Are%20Happy分析 遍历字符串 Python class Solution: def replaceSpace(self, s): # s 源字符串 s = list(s) count=len(s) for i in range(0,count): if s[i]==' ':
单车变摩托
2019/04/04
7260
牛客网 替换空格
一个空格最后替换成'%''2''0',一个字符替换为三个字符,相当于增加了2个字符;
怠惰的未禾
2023/04/27
1.5K0
从后往前替换空格
① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。
MickyInvQ
2021/10/26
1K0
【剑指offer】替换空格
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
7410
【剑指Offer】替换空格
但是,显然这种已经有的方法不是面试官想要得到的答案,所以你得另寻方法,自己写个方法,如果写不出,那肯定给面试官不能留下一个好的印象。
Rochester
2020/09/10
6260
字符串:替换空格
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
代码随想录
2020/09/10
4.6K0
字符串:替换空格
Sword To Offer 002 - 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
Reck Zhang
2021/08/11
5750
牛客网-替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
手撕代码八百里
2020/07/28
8570
word文档尾部空格没有下划线
问题出在兼容性上面了,office版本太多了!解决方法如下: 1.word2003——工具-〉选项-〉兼容性-〉找到“为尾部空格添加下划线”的选项打勾即可 2.word2007——点击左上角的“MS Office按钮”——word选项——高级——兼容性选项——版式选项——为尾部空格添加下划线 3.word2016——文件——选项——高级——兼容性选项——microsoft office 2013-2016——确定 修改后效果:
P轴
2022/11/18
9400

相似问题

用下划线替换空格

132

用下划线替换空格

50

${file%/*}用下划线替换空格

18

内容替换功能:用下划线替换空格

13

JQuery -用空格替换下划线

45
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文