Open XML Excel, некоторые формулы не поддерживаются общей формулой - PullRequest
0 голосов
/ 12 февраля 2019

Excel не поддерживает общие формулы (созданные OpenXML SDK https://www.microsoft.com/en-us/download/details.aspx?id=30425), как и ожидалось:

провоцировать ошибки при открытии или сохранении файла, иногда со следующей ошибкой: «одна или несколько формул ... длиннее допустимого предела в 8192 символа»

С другой стороны, работают следующие общие формулыправильно:

  • «= VLOOKUP (A1; Sheet2! $ A: $ B; 2; 0)» (с использованием абсолютных ссылок с долларами).
  • "= A1" или "= $ A1 "(при расширении формулы по столбцу)

Структура XML выглядит следующим образом:

B2: <c r="B2"><f t="shared" ref="B2:B3" si="0">VLOOKUP(A2,Sheet2!A:B,2,0)</f><v></v></c>
B3: <c r="B3"><f t="shared" si="0"></f><v></v></c>

Замените формулу на доллары, она будет работатьПо структурированным ссылкам не будет и т. Д.

При использовании таких формул через пользовательский интерфейс Excel, расширение формулыla приведет либо к общей формуле, либо нет, в зависимости от того, поддерживается ли формула (я полагаю).Проблема в том, что все формулы должны поддерживаться, иначе это должно быть где-то задокументировано.


Когда формула является общей формулой (значение t является общей), тогда это значение указывает группу, для которойФормула этой конкретной ячейки принадлежит.Первая формула в группе общих формул сохраняется в элементе f.Это считается основной ячейкой формулы.Последующие ячейки, разделяющие эту формулу, не должны иметь формулу, написанную в их элементе f.Вместо этого значение si атрибута для конкретной ячейки используется для определения того, какое выражение формулы должно быть основано на относительном местоположении ячейки по отношению к основной ячейке формулы.

Ссылка: https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.cellformula.aspx

Как кто-нибудь еще испытал это?

1 Ответ

0 голосов
/ 09 апреля 2019

После долгих разговоров с техподдержкой Microsoft их ответ таков:

Прежде всего, даже несмотря на то, что мы четко понимаем, что иметь общие формулы будет проще, Excel работает не так.Сам Excel не создает общие формулы, которые вы пытаетесь создать.Если вы введете те же формулы в Excel, заполните и сохраните их, вы получите сохраненные повторяющиеся формулы, а не общие формулы.

(Это верно, но Excel также создает общую формулу, когда они работают,Моя проблема здесь в том, что не все формулы работают.)

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

И как мне узнать заранее, будет ли формула поддерживаться в Excel?Microsoft даже не предлагает официальную библиотеку для разбора формулы Excel.Мы могли бы использовать https://github.com/spreadsheetlab/XLParser, который выглядит довольно солидно, но суть использования общей формулы не в том, чтобы анализировать формулы, а позволить Excel сделать это.

Единственный способ, которым это поведение можетбыть измененным - это реализовать изменение дизайна в поведении Excel, но при этом вся обратная совместимость будет нарушена вплоть до версии 2007 года.Это не то, что наша группа продуктов заинтересована в изменении.

Так что Excel будет продолжать сбой при сохранении файла со странными сообщениями об ошибках ...

Как я проверялвнутренне, чтобы лучше ответить на ваши вопросы, теперь у меня есть четкое подтверждение от моей эскалационной команды, что обсуждение деталей в обработке форматов файлов или обработка в памяти указанных общих формул в Excel не изменит результат.Фактически, существуют сценарии, в которых нельзя использовать общие формулы по многим различным причинам, некоторые из них могут быть неочевидными и невидимыми вне Excel.Лучшее практическое правило - уже изложенное: не используйте общие формулы, если в самом Excel их нет.И это должно учитывать такие вещи, как тонкие различия в формулах, существуют ли абсолютные или относительные ссылки (как в вашем примере с A: B против $ A: $ B), ссылается ли ссылка на тот же рабочий лист или другойодин, или в другой книге, и т. д., затем также, в какой формуле он используется (некоторые функции, такие как OFFSET или INDIRECT, зависят от диапазонов, которые могут быть изменены во время вычисления), и прецедентные или зависимые диапазоны / формулыуказать, что может быть безопаснее не использовать общие формулы.В документации формата файла не ясно указано, при каких условиях может использоваться общая формула.Он указывает, что программа чтения файлов может встречаться с такими формулами, и когда это происходит, как с этим обращаться, но это не означает, что общие формулы всегда возможны или поощряются, когда непрерывный диапазон ячеек содержит одну и ту же формулу в строке формул.Для средства записи файлов его не рекомендуется использовать, если сценарий не ограничен точно так же, как когда Excel пишет общую формулу.

Тем не менее, LibreOffice прекрасно с этим справляется.Похоже, «это слишком сложно исправить» или «слишком рискованно, чтобы исправить ошибку».*https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/37328965-full-support-for-shared-formula-matching-the-open

...