Aspose.Cells для примечаний к выпуску CPP 17.02.0

Ключ Резюме Категория
CELLSCPP-41 Расчет формул в электронных таблицах Excel Новая особенность
CELLSCPP-42 Улучшена производительность при чтении файлов XLSX. Улучшение

Public API и обратно несовместимые изменения

Ниже приведен список любых изменений, внесенных в общедоступный номер API, таких как добавленные, переименованные, удаленные или устаревшие члены, а также любые несовместимые с предыдущими изменениями, внесенные в номер Aspose.Cells for C++. Если у вас есть сомнения по поводу каких-либо перечисленных изменений, сообщите об этом на форум поддержки Aspose.Cells.

Добавляет метод IWorkbook::CalculateFormula()

В последней версии 17.02.0 Aspose.Cells для CPP API добавлен метод IWorkbook::CalculateFormula(). Это помогает разработчикам рассчитать результат формул и сохранить в соответствующей ячейке рабочего листа. Разработчики также могут рассчитывать пользовательские формулы.

В этом примере кода показано, как вычислять формулы в Excel:

 	/*create a new workbook*/

	intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

	/*get the first worksheet*/

	intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();

	intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);

	/*get cells*/

	intrusive_ptr<ICells> cells = ws->GetICells();

	/*set value to cell(0,0) and cell(1,0)*/

	cells->GetObjectByIndex(0, 0)->PutValue(3);

	cells->GetObjectByIndex(1, 0)->PutValue(2);

	/*set formula*/

	cells->GetObjectByIndex(0, 1)->SetFormula(new String("=SUM(A1,A2)"));

	/*formula calculation*/

	wb->CalculateFormula();

	/*check result*/

	EXPECT_TRUE(5 == cells->GetObjectByIndex(new String("B1"))->GetIntValue());

	/*save this workbook to resultFile*/

	wb->Save(resultPath->StringAppend(new String("book5.xlsx")));

Добавляет метод IWorkbook::CalculateFormula(bool ignoreError)

Разработчики могут вычислять формулы различными способами. Метод IWorkbook::CalculateFormula(bool ignoreError) позволяет разработчикам вычислять результат формул, а также скрывает ошибку вычисления формул. Ошибка может возникнуть из-за неподдерживаемой функции, внешних ссылок и т.д.

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

 	/*create a new workbook*/

	intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

	/*get the first worksheet*/

	intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();

	intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);

	/*get cells*/

	intrusive_ptr<ICells> cells = ws->GetICells();

	/*set value to cell(0,0) and cell(1,0)*/

	cells->GetObjectByIndex(0, 0)->PutValue(3);

	cells->GetObjectByIndex(1, 0)->PutValue(2);

	/*set formula*/

	cells->GetObjectByIndex(0, 1)->SetFormula(new String("=SUM(A1,A2)"));

	/*formula calculation*/

	wb->CalculateFormula(true);

	/*check result*/

	EXPECT_TRUE(5 == cells->GetObjectByIndex(new String("B1"))->GetIntValue());

	/*save this workbook to resultFile*/

	wb->Save(resultPath->StringAppend(new String("book5.xlsx")));

Добавляет метод IWorkbook::CalculateFormula(intrusive_ptrAspose::Cells::ICalculationOptions options)

Он вычисляет формулы в книге.

Добавляет метод IWorkbook::CalculateFormula(bool ignoreError,intrusive_ptrAspose::Cells::ICustomFunction customFunction)

Aspose.Cells для CPP API предлагает интерфейс ICustomFunction. Разработчики могут вызвать метод IWorkbook.CalculateFormula(false, ICustomFunction), чтобы вызвать реализацию метода ICustomFunction.CalculateCustomFunction(). Метод ICustomFunction.CalculateCustomFunction() позволяет манипулировать возвращаемыми значениями пользовательских функций. В приведенном ниже примере кода реализация интерфейса ICustomFunction оценивает и возвращает значения двух пользовательских функций, т. е. MySampleFunc() и YourSampleFunc(). Эти пользовательские функции находятся внутри ячеек A1 и A2 соответственно. Он выводит на консоль значения A1 и A2, которые на самом деле являются значениями, возвращаемыми функцией ICustomFunction.CalculateCustomFunction().

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

 //Implement ICustomFunction interface

class CustomFunction : public ICustomFunction

{

public:

    //Evalaute and return the values of your custom functions

    intrusive_ptr<Aspose::Cells::System::Object> 

        CalculateCustomFunction(

        intrusive_ptr<Aspose::Cells::System::String> functionName, 

        intrusive_ptr<Aspose::Cells::System::Collections::ArrayList> paramsList, 

        intrusive_ptr<Aspose::Cells::System::Collections::ArrayList> contextObjects)

    {

            if (functionName->Equals(new String("MySampleFunc")))

            {

                return new String("MY sample function was called successfully.");

            }



            if (functionName->Equals(new String("YourSampleFunc")))

            {

                return new String("YOUR sample function was called successfully.");

            }



            return NULL;

    }



};



//Call this function to run the code

void Run()

{

    //Create workbook

    intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();



    //Access first worksheet in the workbook

    intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);



    //Adding custom formulas to Cell A1 and A2

    ws->GetICells()->GetObjectByIndex(new String("A1"))->SetFormula(new String("=MySampleFunc()"));

    ws->GetICells()->GetObjectByIndex(new String("A2"))->SetFormula(new String("=YourSampleFunc()"));



    // Calcualting Formulas

    intrusive_ptr<CustomFunction> custFunc = new CustomFunction();

    wb->CalculateFormula(true, custFunc);



    //Print the value of cell A1 and A2 after the calculation of custom function implemented by us.

    intrusive_ptr<String> valA1 = ws->GetICells()->GetObjectByIndex(new String("A1"))->GetStringValue();

    intrusive_ptr<String> valA2 = ws->GetICells()->GetObjectByIndex(new String("A2"))->GetStringValue();



    //Print the values on console

    printf("Value of A1: %s\r\n", valA1->charValue());

    printf("Value of A2: %s\r\n", valA2->charValue());

}

Добавляет метод IWorksheet::CalculateFormula(intrusive_ptrAspose::Cells::System::String формула)

IWorksheet::CalculateFormula(intrusive_ptrAspose::Cells::System::String формула) позволяет разработчикам вычислять результаты формулы напрямую, не добавляя их на лист. Значения ячеек, используемых в формуле, уже существуют на рабочем листе, и разработчикам нужно только найти результат этих значений на основе какой-либо формулы Excel Microsoft без добавления формулы на рабочий лист.

В этом примере кода показано, как вычислять формулы напрямую, не добавляя их на лист в Excel:

 //Create workbook

intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();



//Access first worksheet in the workbook

intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);



//Put 20 in cell A1

intrusive_ptr<ICell> cellA1 = ws->GetICells()->GetObjectByIndex(new String("A1"));

cellA1->PutValue(20);



//Put 30 in cell A2

intrusive_ptr<ICell> cellA2 = ws->GetICells()->GetObjectByIndex(new String("A2"));

cellA2->PutValue(30);



//Calculate the Sum of A1 and A2

intrusive_ptr<Aspose::Cells::System::Object> results = ws->CalculateFormula(new String("=Sum(A1:A2)"));



//Print the output

printf("Value of A1: %s\r\n", cellA1->GetStringValue()->charValue());

printf("Value of A2: %s\r\n", cellA2->GetStringValue()->charValue());

printf("Result of Sum(A1:A2): %s\r\n", results->ToString()->charValue());

Добавляет метод IWorksheet::CalculateFormula(intrusive_ptrAspose::Cells::System::String формула, intrusive_ptrAspose::Cells::ICalculationOptions opts)

Он вычисляет формулу более гибким способом.

Добавляет метод IWorksheet::CalculateFormula(bool recursive, bool ignoreError, intrusive_ptrAspose::Cells::ICustomFunction customFunction)

Он вычисляет все формулы на листе.

Добавляет параметры IWorksheet::CalculateFormula(intrusive_ptrAspose::Cells::ICalculationOptions, логический рекурсивный)

Он вычисляет все формулы на листе.

Добавляет метод ICell::Calculate(intrusive_ptrAspose::Cells::ICalculationOptions options)

Он вычисляет формулу ячейки на листе.

Добавляет метод ICell::Calculate(bool ignoreError , intrusive_ptrAspose::Cells::ICustomFunction customFunction)

Он вычисляет формулу ячейки на листе.

Примеры использования

Пожалуйста, проверьте список разделов справки, добавленных в Aspose.Cells вики-документы:

  1. Добавление формул и расчет результатов
  2. Прямой расчет формулы
  3. Расчет формул только один раз
  4. Использование функции ICustomFunction