LibXL: отличные формулы перекрестного листа не обновляются
Я имею дело с проблемой с libXL и Office365. Я создал файл Excel с Office 365: простая формула, которая показывает содержимое ячейки с другого листа. Затем я начал писать что-то в этой исходной ячейке через libXl. Когда я открываю выходной файл, формула не вычисляется до тех пор, пока я не нажму CTRL + ALT + SHIFT + F9.
Если я создам файл xlsx из Office 2013, формула будет правильно обновлена.
Не могли бы найти что-либо на своем веб-сайте независимо от того, поддерживается ли O365 или нет.
Вот код для воспроизведения проблемы (я могу предоставить два входных файла xlsx, если это необходимо):
#include "stdafx.h"
#include "libxl.h"
using namespace libxl;
int main()
{
Book* book = xlCreateXMLBook();
// xlsx file created by Office 2013
if (book->load(L"office2013.xlsx"))
{
Sheet* sheet = book->getSheet(0);
if (sheet)
sheet->writeNum(2, 2, 42);
book->save(L"okay.xlsx"); // works correctly when opened
}
// xlsx file created by O365
if (book->load(L"office365.xlsx"))
{
Sheet* sheet = book->getSheet(0);
if (sheet)
sheet->writeNum(2, 2, 42);
book->save(L"bugged.xlsx"); // must press CTRL+ALT+SHIFT+F9 to see '42' in the second sheet
}
book->release();
return 0;
}
Это исходный лист (номер 42, написанный указанным выше кодом): https://i.stack.imgur.com/hp7Ti.png
Это неработающая формула (написана в Excel): https://i.stack.imgur.com/BhGW2.png
Спасибо
Ответы
Ответ 1
У вас есть автоматический расчет в Office 365 Excel? Проверьте эту статью: https://support.office.com/en-ie/article/change-formula-recalculation-iteration-or-precision-f38c7793-0367-41ce-b892-dfe54946bd76#__toc305944076
Меня обманули в каком-то vbs-скрипте, который я создал для Excel, с расчетом по умолчанию для некоторых установок Office 365.
Ознакомьтесь с формулярами → Вычислите и проверьте, нет ли в книге книги.
Редактировать: Обратите внимание, что у меня нет опыта работы с LibXL, но много в vbs для Excel. Я также программирую c++, но я нахожу vbs как более быстрый способ попасть в цель для своих проектов :)