Как вы читаете значение ячейки из файла OpenOffice Calc .ods с python? - PullRequest
4 голосов
/ 30 апреля 2010

Мне удалось прочитать значение ячейки Excel с помощью xlrd, используя номера столбцов и строк в качестве входных данных. Теперь мне нужно получить доступ к тем же значениям ячеек в некоторых электронных таблицах, которые были сохранены в формате .ods.

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

Ответы [ 2 ]

3 голосов
/ 30 апреля 2010

Взломать ваш путь через 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 ... но это не так. скоро произойдет.

2 голосов
/ 07 февраля 2016

Из библиотек, которые я пробовал 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 сбой , odfpy сбой и, кроме того, его документация либо отсутствует, либо ужасна.

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

РЕДАКТИРОВАТЬ: становится хуже. езодф может молча вернуть поддельные данные .

...