Почему openpyxl не распознает имя листа в существующем файле Excel, который я открываю? - PullRequest
0 голосов
/ 28 февраля 2019

Я использую следующий код для открытия существующего файла Excel в Python 3.6, Excel 2016:

Shnm = my_pyx.get_sheet_names() 
sheet = my_pyx.get_sheet_by_name(Shnm[0])

from openpyxl import load_workbook
# Class to manage excel data with openpyxl.

class Copy_excel:
    def __init__(self,src):
        self.wb = load_workbook(src)
        self.ws = self.wb.get_sheet_by_name(sheet)
        self.dest="destination.xlsx"

    # Write the value in the cell defined by row_dest+column_dest         
    def write_workbook(self,row_dest,column_dest,value):
        c = self.ws.cell(row = row_dest, column = column_dest)
        c.value = value

    # Save excel file
    def save_excel(self) :  
        self.wb.save(self.dest)

source

Поэтому, когда я делаю:

row_dest=2
column_dest=6   
workbook = Copy_excel(my_file)
data=60
workbook.write_workbook(2,6,data )
workbook.save_excel()

где: my_file - это строка, похожая на filename.xlsx, а sheet - это строка с именем листа.

Ошибка, в которой говорится, что указанное имя листа не существует.

Я также пытался заменить:

self.ws = self.wb.get_sheet_by_name(sheet)

на

self.ws = self.wb[sheet]

, но я все еще получаю ту же ошибку.

1 Ответ

0 голосов
/ 28 февраля 2019

Проблема была в настройке:

sheet = my_pyx.get_sheet_by_name(Shnm[0])

и позже:

self.ws = self.wb[sheet]

Поскольку лист - это не имя листа, а фактический объект листа, который вы должны использовать:

self.ws = self.wb[Shnm[0]] 

Я пробовал этот код, и он работал для меня:

from openpyxl import load_workbook
# Class to manage excel data with openpyxl.

class Copy_excel:
    def __init__(self,src):
        self.wb = load_workbook(src)
        Shnm = self.wb.sheetnames
        self.ws = self.wb[Shnm[0]]
        self.ws = self.wb[sheet]
        self.dest='path\\to\\Copy.xlsx'

    # Write the value in the cell defined by row_dest+column_dest
    def write_workbook(self,row_dest,column_dest,value):
        c = self.ws.cell(row = row_dest, column = column_dest)
        c.value = value

    # Save excel file
    def save_excel(self) :
        self.wb.save(self.dest)

row_dest=2
column_dest=6
workbook = Copy_excel('path\\to\\file.xlsx')
data=60
workbook.write_workbook(2,6,data )
workbook.save_excel()
...