2013-02-25 1 views
5

Я пытаюсь прочитать файл excel с использованием xlrd в python3, но я не получаю результаты от чтения ячеек, поскольку вижу их в excel ,Чтение кэшированных внешних полей из файла excel, результаты отличные от того, что я вижу в excel

Кажется, что я пытаюсь получить доступ к некоторым внешним источникам, из которых они обновляются, но поскольку этот источник недоступен для меня, excel отображает некоторые кешированные значения. Эти значения находятся в каком-либо другом месте в одном файле excel, поэтому в листе, который вы видите, например, «2.65111» фактическое содержимое ячейки отображается в виде «= BC12» в этой панели редактирования в excel.

Когда я пытаюсь прочитать это через xlrd как:

wb=xlrd.open_workbook("filename.xls",formatting_info=True) 
wb.sheet_by_name("sheetname").cell(12,9) 

Содержимое ячейки отображается как:

'text:'[XXXX]' (XF:95)' 

(где XXXX, скорее всего, имя столбца этого внешнего. csv-файл)

Я бы либо ожидал, что xlrd вернет «2.65111». Я вижу в excel или, по крайней мере, «= BC12» в качестве ссылки на другую ячейку, но я никак не могу использовать «[ XXXXX] "вещь.

Есть ли способ получить xlrd, чтобы показать любое из этих двух?

Я действительно смущен относительно того, где он имеет это "[XXXXX]", и почему это так отличается от того, что я вижу в excel.

PS: Я не могу просто использовать данные из ячейки BC12, так как это должна быть автоматическая обработка файлов, и только «оригинальные» ячейки имеют фиксированную позицию, а эти другие могут быть просто в другой случайной позиции следующий день.

+1

Вы говорите «где XXXX, скорее всего, имя столбца этого внешнего файла .csv» «... WHAT внешний файл csv? Что заставляет вас делать такой вывод? Какова формула в ячейке BC12? Можете ли вы сделать копию файла xls для анализа? –

+0

Что происходит, когда вы делаете: 'wb.sheet_by_name (« имя листа »). Cell (12,9) .value'? – eazar001

+0

@ eazar001: Он возвращает «[XXXX]» – PlasmaHH

ответ

1

Одним из решений может быть создание копии вашего листа excel, который ТОЛЬКО содержит значения, формулы или внешние источники.

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

+0

О, я предполагал, что было ясно, что я пытаясь написать сценарий для автоматической обработки этого файла excel (который будет отправляться каждый день с обновленными данными). – PlasmaHH

0

«Ячейка 12,9» известна Excel как J13 (НЕ J12). Вы уверены, что сравниваете себя с подобным? Ожидается ли, что J13 будет содержать ссылку на BC12? Можете ли вы вывести что-либо, исследуя ячейки вокруг J13 и BC12?

+0

Я не уверен, что привело J12 сюда, ячейка является той, к которой я хотел бы получить доступ. На самом деле, есть еще много ячеек, все ведут себя одинаково (только с разными возможными именами заголовков .csv) – PlasmaHH

0

Возможно, единственным вариантом является предварительная обработка файла с помощью Excel через API COM Excel. Вы можете сделать что-то простое в .NET, которое загрузит файл excel, получит данные и сохранит их в подобном структурированном файле excel, но без внешних ссылок. Загрузка файла excel с помощью Excel занимает много времени (несколько секунд) и, конечно же, не будет работать, если вы перегрузите его на сервере, но если у вас есть несколько файлов в день, он будет работать. Конечно, это не сработает, если вы не работаете в Windows.

+0

К сожалению (или нет, зависит) Мне нужно запустить все это на linux – PlasmaHH

+0

Лучшая библиотека, которую я знаю для работы с Excel (и Office в целом) Aspose.Cells. Я использовал только его версию .NET, но есть также версия Java, которая будет работать в Linux. У вас есть пробная версия, поэтому вы можете проверить, есть ли трюк. –

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