首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openpyxl get_column_letter ValueError

Openpyxl get_column_letter ValueError
EN

Stack Overflow用户
提问于 2017-03-11 09:25:58
回答 2查看 2.3K关注 0票数 0

我正在用python制作一个excel比较工具。这是我的代码:

bananacell.py:

代码语言:javascript
复制
import time

print("Welcome to Banana Cell the open source excel tool!")
time.sleep(1)
import compare
compare.main()

compare.py:

代码语言:javascript
复制
import openpyxl, tkinter, time
from tkinter import Tk
from tkinter.filedialog import askopenfilename
from openpyxl.utils import get_column_letter


def main():
    print('Select file 1 from folder')
    root = Tk()
    filename = askopenfilename()
    root.withdraw()
    wb1 = openpyxl.load_workbook(filename)
    names1 = input('Sheet 1 name: ')
    sheet1 = wb1.get_sheet_by_name(str(names1))

    print('Select file 2 from folder')
    root1 = Tk()
    filename1 = askopenfilename()
    root1.withdraw()
    wb2 = openpyxl.load_workbook(str(filename1))
    names2 = input('Sheet 2 name: ')
    sheet2 = wb2.get_sheet_by_name(str(names2))

    object1 = list(sheet1['A1':get_column_letter(sheet1.max_row)])
    object2 = list(sheet2['A1':get_column_letter(sheet2.max_row)])

    for i in object1:
        for x in object2:
            if i != x:
                print('Diff found!')
                print (i.value, i.coordinate)
                print (x.value, x.coordinate)
                print('----------')
                break

但我一直得到以下ValueError:

有人知道怎么解决这个问题吗?任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-11 10:26:14

看来你达到了工作表中列的极限。

openpyxl支持的工作表中最大18,278列的是有限度的,以及更少 (16,384)和Apple (仅255列)中的更少

可以在代码中添加检查,如下所示:

代码语言:javascript
复制
MAX_COLUMNS = 18278

if active_sheet.max_column > MAX_COLUMNS:
    raise ValueError(
        'Too many columns in the sheet, the limit is {}, found: {}'.format(
            MAX_COLUMNS,
            ctive_sheet.max_column,
        )
    )

或者创建一个支持更多列的将请求拉到openpyxl :)

票数 2
EN

Stack Overflow用户

发布于 2017-03-11 19:01:07

这是错误的:

代码语言:javascript
复制
object1 = list(sheet1['A1':get_column_letter(sheet1.max_row)])  

你通过类似于sheet1['A1':D]的东西,你想要sheet1['A1':D1000]

我相信这个嵌套循环是行不通的:

for i in object1: for x in object2:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42733528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档