2016-02-29 2 views
3

Позвольте мне предисловие к этому, сказав, что я пробовал искать и не могу найти подобную ситуацию, поэтому, пожалуйста, не слишком расстраивайтесь, если вам это кажется знакомым. Я использую Python 2.7 и openpyxl версия 2.2.5 (мне нужно использовать 2.7, и использовать старый модуль по другим причинам.)«Имена диапазонов рабочих листов не существует» KeyError in openpyxl

Я новичок в Python и для чтения/запись коды в целом, так Я проверяю это в командной строке, прежде чем я его реализации:

  1. Я создал файл, foo.xlsx в каталоге файлов python27 с некоторыми значениями, которые я введенными вручную с помощью Excel.

  2. Затем я использовал этот простой код в командной Python строки, чтобы проверить мой код

    from openpyxl import load_workbook 
    wb = load_workbook('foo.xlsx') 
    sheet_ranges = wb['range names'] 
    

Затем в результате следующей ошибки:

File "C:\Python27\lib\openpyxl\workbook.workbook.py", line 233 in getitem raise KeyError("Worksheet {0} does not exist.".format(key))
KeyError: 'Worksheet sheet range names does not exist'

Так я думал, что это было что-то делать, не импортируя весь модуль openpyxl. Я продолжал делать это и запускал весь процесс, но это привело к той же ошибке.

Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно/как это решить?

Дополнительная информация:

  • я успешно написал в пустой файл перед, а затем считывать значения. Это дало мне правильные значения для всего, ЗА ИСКЛЮЧЕНИЕМ того, что я написал вручную через Excel, ячейки, у которых был ручной ввод, были возвращены None или Nonetype. Проблема, похоже, связана с ячейками с ручным вводом.

  • я ударил сохранить в файл, прежде чем доступ к ней не беспокойся

Это было в том же каталоге, так что я знаю, что это не было вопросом места.

ответ

6

Следующая команда не имеет смысла:

sheet_ranges = wb['range names'] 

Обычно вы открываете книгу, а затем получить доступ к одной из рабочих листов, следующий дает вам некоторые примеры того, как это можно сделать:

import openpyxl 

wb = openpyxl.Workbook() 
wb = openpyxl.load_workbook(filename = 'input.xlsx') 

# To display all of the available worksheet names 
sheets = wb.sheetnames 
print sheets 

# To work with the first sheet (by name) 
ws = wb[sheets[0]] 
print ws['A1'].value 

# To work with the active sheet 
ws = wb.active 
print ws['A1'].value 

# To work with the active sheet (alternative method) 
ws = wb.get_active_sheet() 
print ws['A1'].value 

Если вы хотите отобразить любой именованный диапазон в рабочей книге, вы можете сделать следующее:

print wb.get_named_ranges() 
+0

Hi Martin, ws = wb.get_sheet_by_name (листы [0]) возвращает ту же ошибку. код, который я написал, делает то же самое, за исключением того, что я знаю имя листа, поэтому он присваивает лист, называемый именами диапазонов. Он сказал, что лист Sheet1 не существует –

+0

'ws = wb.active' является обычным способом работы с существующим листом, вы пробовали это? –

+0

Хорошо, что сработало! Большое спасибо мистеру Эвансу! –

2

Я не совсем уверен, что вам нужно делать, но чтобы читать электронные таблицы Excel в python, я обычно использую xlrd (к которому мне было легче воспользоваться). Смотрите пример:

import xlrd 

workbook = xlrd.open_workbook(in_fname) 
worksheet = workbook.sheet_by_index(0) 

Для записи в таблицы Excel, я использую xlsxwriter:

import xlsxwriter 

workbook = xlsxwriter.Workbook(out_fname) 
worksheet = workbook.add_worksheet('spreadsheet_name') 

Надеется, что это помогает.

+0

Должен ли я дзю st лом openpyxl? Я читал, что openpyxl был лучшим модулем для управления файлами xlsx. Будет ли это читать данные вручную, введенные в электронную таблицу? –

+0

xlrd и xlsxwriter - это прекрасные библиотеки, но openpyxl в настоящее время является единственной библиотекой Python, которая позволяет редактировать файлы XLSX. –

Смежные вопросы