Restituire un intervallo di valori utilizzando AbstractCalculationEngine con C++
Aspose.Cells fornisce la classe AbstractCalculationEngine che viene utilizzata per implementare funzioni utente o personalizzate non supportate da Microsoft Excel come funzioni integrate.
Questo articolo spiegherà come restituire l’intervallo di valori da AbstractCalculationEngine.
Il seguente esempio mostra l’uso della classe AbstractCalculationEngine e restituisce l’intervallo di valori tramite il suo metodo.
Crea una classe con una funzione CalculateCustomFunction
. Questa classe implementa AbstractCalculationEngine.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
class CustomFunctionStaticValue : public AbstractCalculationEngine
{
public:
void Calculate(CalculationData& data) override
{
Vector<Object> row1{Object(Date{2015, 6, 12, 10, 6, 30}) ,Object(2)};
Vector<Object> row2{ Object(3.0) ,Object(U16String(u"Test")) };
Vector<Vector<Object>> values{ row1 , row2 };
// Create Object with the 2D Vector and set as calculated value
Object calculatedValue(values);
// Set the calculated value in the CalculationData object
data.SetCalculatedValue(calculatedValue);
}
};
Ora usa la funzione sopra nel tuo programma.
int main()
{
Aspose::Cells::Startup();
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
Workbook workbook;
Cells cells = workbook.GetWorksheets().Get(0).GetCells();
Cell cell = cells.Get(0, 0);
cell.SetArrayFormula(u"=MYFUNC()", 2, 2);
Style style = cell.GetStyle();
style.SetNumber(14);
cell.SetStyle(style);
CalculationOptions calculationOptions;
// Create and set custom engine with proper memory management
std::shared_ptr<CustomFunctionStaticValue> customEngine =
std::make_shared<CustomFunctionStaticValue>();
calculationOptions.SetCustomEngine(customEngine.get());
workbook.CalculateFormula(calculationOptions);
workbook.GetSettings().GetFormulaSettings().SetCalculationMode(CalcModeType::Manual);
workbook.Save(outDir + u"output_out.xlsx");
workbook.Save(outDir + u"output_out.pdf");
std::cout << "Workbook saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
}