2012-01-23 3 views
0

Я использую pyuno для чтения таблицы Excel (работает на linux.) Многие ячейки имеют формулы, ссылающиеся на аддины, которые, очевидно, недоступны. Однако значения ячейки - это то, что я хочу.использовать uno (openoffice api), чтобы открыть таблицу * без * пересчета

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

Я попробовал несколько вещей, ни один из которых работал:

  • набор флагов AutomaticCalculation = False, MacroExecutionMode = NEVER_EXECUTE в вызове desktop.loadComponentFromURL
  • вызова document.enableAutomaticCalculation (False) на загруженный документ

Любые предложения?

+0

Вы уверены, что эти значения фактически сохранены? Если это не так, нет никакого способа сделать это. – Marcin

ответ

0

Если formluas не является вопросом, вы можете обойти эту проблему, обработав копию вашей электронной таблицы, в которой присутствуют только значения (а не формулы).

Для достижения этой цели выберите содержимое всего листа, скопируйте его, специальную пасту; затем удалите все, кроме «значения». Сохраните новый файл (убедитесь, что вы не перезаписываете исходный файл, или любая формула будет потеряна!). Затем ваш скрипт сможет обрабатывать этот файл.

Это уродливое решение, так как должно быть способ сделать это программно.

+0

Simpler - это просто открытое excel, установите режим Calc в ручную, загрузите таблицу, а затем сохраните. Теперь у него будет установлен режим работы в режиме calc, и OO будет соблюдать это при загрузке. Но это побеждает цель использования OO, которая должна быть независимой от excel. Если я использую excel в такой степени, я мог бы пойти полностью и не использовать OO вообще. –

0

Calc по-прежнему не поддерживает использование кешированных результатов после загрузки документа. Libreoffice Calc теперь использует кешированные результаты для документов xls. Результаты также сохраняются в ods, но игнорируются при загрузке документа, а результат формулы оценивается путем компиляции и интерпретации сохраненной формулы.

Есть некоторые планы добавить это для ods и xlsx тоже, но есть много продюсеров ods, которые вносят неправильные результаты в файл. Таким образом, до сих пор единственным решением было иметь вторую версию документа, только сохраняя результаты (или внедряя их внутри calc).

+0

Спасибо за эту информацию. Чтобы быть ясным: Libreoffice Calc использует хранимые значения для xls, но не для xlsx? Тогда это тоже не является жизнеспособным решением. Неверный результат в файле: почему бы не оставить выбор до пользователя, следует ли пересчитывать или использовать существующие результаты? Иронично, что MS обычно является тем, кто решает, что он знает лучше, чем пользователь, но в этом случае это тот, который дает пользователю возможность. –

+0

Просто потому, что никто не реализовал это до тех пор, пока не узнает. Для XLSX это может показаться сложным, но для ODS это планируется и, надеюсь, скоро будет реализовано. – moggi

+0

По-прежнему не понимаю - почему бы не дать пользователю выбор? По-видимому, разработчики считают, что они знают лучше, чем пользователи, является ли xlsx «хорошим», и для обеспечения их суждения запретят пользователям делать выбор. Реализация должна быть тривиальной - просто сделайте * не * выполнить пересчет. –

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