4

Я смог прочитать значение ячейки excel с помощью xlrd, используя номера столбцов и строк в качестве входных данных. Теперь мне нужно получить доступ к тем же значениям ячеек в некоторых таблицах, которые были сохранены в формате .ods.Как вы читаете значение ячейки из файла OOD OpenOffice Calc с помощью python?

Так, например, как бы я прочитал значение, хранящееся в ячейке E10, из файла .ods из python?

+0

Некоторые подсказки и небольшой код находятся на http://solyaris.wordpress.com/2007/07/06/reading-open-document-with-python/ Похоже, что это не должно быть слишком, слишком сложно (как только вы взломаете свой путь через XML. – msw

+1

@msw: * Выглядит * как будто это не должно быть слишком сложно ... но с тех пор (почти 3 года назад) блоггер не слышался ;-) –

+0

Можете ли вы зависеть от openoffice устанавливается? OOo API имеет привязки python.Хотя API немного сбивает с толку, использование его должно быть более надежным, чем взлом xml. – intuited

ответ

3

Взлом вашего пути через XML не должен быть слишком сложным ... но есть осложнения. Только один пример: OOo в своей мудрости решила не писать адрес ячейки явно. Нет атрибута ячейки, например address="E10" или column="E"; вам нужно подсчитать строки и столбцы.

Пяти последовательные пустые ячейки представлены
<table:table-cell table:number-columns-repeated="5" />

В number-colums-repeated атрибутах по умолчанию «1», а также относится к непустым клеткам.

Ухудшается, когда вы сливаете клетки; вы получаете тег covered-table-cell, который на 90% совпадает с тегом table-cell, а атрибуты number-columns-spanned и number-rows-spanned необходимо учитывать при подсчете столбцов и строк.

Атрибут table:table-row может иметь атрибут number-rows-repeated. Это можно использовать для повторения содержимого целой непустой строки, но чаще всего это видно, когда имеется более 1 последовательных пустых строк.

Итак, даже если вы будете удовлетворены подходом «работает над моими данными», это не тривиально.

Возможно, вам понравится ODFpy. Обратите внимание на второе предложение: «« В отличие от других более удобных API, это, по сути, слой абстракции чуть выше формата XML ».« Существует сценарий ODF-to-HTML, который (если он написан для ODS, а также для ODT) может быть взломан, чтобы получить то, что вы хотите.

Если вы предпочитаете «работать с данными почти каждого и поддерживаться и иметь интерфейс, который вам знаком с», вам может потребоваться дождаться функциональности в xlrd ... но это не так. скоро произойдет.

+0

Учитывая, что две первые предположительно работающие библиотеки (pyexcel-ods, odfpy) умерли от первого файла, который я тестировал, а третий (ezodf) может молча возвращать фиктивные данные, я бы предпочел не писать собственную обработку. Он рано или поздно столкнется с какой-то загадочной и загадочной частью формата файлов .ods - как эти существующие решения. –

2

Из тех библиотек, которые я пробовал ezodf, был тот, который работал.

from ezodf import opendoc, Sheet 
doc = opendoc('test.ods') 
for sheet in doc.sheets: 
    print sheet.name 
    cell = sheet['E10'] 
    print cell.value 
    print cell.value_type 

pyexcel-ODS crashed, odfpy crashed и помимо его документации отсутствует или ужасны.

Учитывая, что, предположительно, работающие библиотеки скончались в первом файле, который я тестировал, я бы предпочел не писать собственную обработку, так как рано или поздно она либо потерпит крах, либо что-то хуже, если вы потерпите неудачу в какой-то странной ситуации.

EDIT: Все ухудшается. ezodf может silently return bogus data.

+0

Спасибо, что привлекли серьезную проблему с 'ezodf' к моему вниманию [здесь] (http://stackoverflow.com/a/29497292/1391441). Ваше изменение было отклонено, но я обновил ответ и добавил информацию в качестве комментария. У меня лично есть большой опыт использования «pyexcel-ods». – Gabriel

+1

@Gabriel И в случае этого краха pyexcel-ods невинна. Проблема вызвана ошибкой в ​​LibreOffice (https://bugs.documentfoundation.org/show_bug.cgi?id=97631). Просто моя неудача, что я вызвал какой-то край. –

+1

благодарит много после использования ozodf, я понимаю, что odfpy был потерян из всех, если вы попытаетесь открыть огромный файл, он просто повис во время еды, много процессорного времени. – rho