2017-03-11 13 views
0

私はツールをPythonで比較しています。Openpyxl get_column_letter ValueError

bananacell.py:

import time 

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

compare.py:

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を取得し続ける:

enter image description here

ん。ここに私のコードです誰もがこれを修正する方法を知っていますか?どんな助けもありがとう。

答えて

2

シートの列の上限に達したように見えます。

There's a limit(openpyxlでサポートされているシートでは最大18,278カラム、MS Office Excel(16,384)およびApple Numbers(255カラムのみ)でeven lessです。

あなたが好きなあなたのコードにチェックを追加することができます。

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, 
     ) 
    ) 

または列:)の大きな量の支援とpull request to openpyxlを作るには

+0

この仕様では、16,384列に制限が設定されています。 –

1

これは間違っている:

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

ますあなたはsheet1['A1':D]のようなものを渡します。sheet1['A1':D1000]

私はこの入れ子ループがうまくいかないと信じています:
for i in object1: for x in object2: