Público API Cambios en Aspose.Cells 8.5.0

API añadidas

Se cambiaron los parámetros de ICustomFunction.CalculateCustomFunction

Si un parámetro para la función personalizada es la referencia de celda, en la versión anterior Aspose.Cells, las API se usaban para convertir la referencia de celda en un valor de celda o una matriz de objetos de todos los valores de celda en el área referida. Sin embargo, para muchas funciones y usuarios, no se requiere la matriz de valores de celda para todas las celdas en el área referida, solo necesitan una sola celda correspondiente a la posición de la fórmula, o solo necesitan la referencia en sí misma en lugar del valor de celda o la matriz de valores. . En algunas situaciones, obtener todos los valores de las celdas incluso aumentó el riesgo de error de referencia circular.

Para admitir este tipo de requisito, Aspose.Cells for .NET 8.5.0 ha cambiado el valor del parámetro a “paramsList” para el área referida. Desde v8.5.0, API simplemente coloca el objeto ReferedArea en “paramsList” cuando el parámetro correspondiente es una referencia o su resultado calculado es una referencia. Si necesita la referencia en sí, puede usar ReferedArea directamente. Si necesita obtener un valor de una sola celda de la referencia correspondiente a la posición de la fórmula, puede usar el método ReferedArea.GetValue(rowOffset, int colOffset). Si necesita una matriz de valores de celda para toda el área, puede usar el método ReferedArea.GetValues.

Ahora, como Aspose.Cells for .NET 8.5.0 proporciona ReferredArea en “paramsList”, ReferredAreaCollection en “contextObjects” ya no será necesaria (en versiones anteriores, no siempre podía dar un mapa uno a uno a los parámetros de la función personalizada), por lo que esta versión también lo ha eliminado de “contextObjects” ahora.

Este cambio requiere cambios en el código de la implementación de ICustomFunction cuando necesite el valor o los valores del parámetro de referencia.

Implementación antigua

 public object CalculateCustomFunction(string functionName, ArrayList paramsList, ArrayList contextObjects)

{

    ...

    object o = paramsList[i];

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}

Nueva Implementación

 public object CalculateCustomFunction(string functionName, ArrayList paramsList, ArrayList contextObjects)

{

    ...

    object o = paramsList[i];

    if(o is ReferredArea) //fetch data from reference

    {

        ReferredArea ra = (ReferredArea)o;

        if(ra.IsArea)

        {

            o = ra.GetValues();

        }

        else

        {

            o = ra.GetValue(0, 0);

        }

    }

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}

Se agregaron opciones de cálculo de clase

Aspose.Cells for .NET 8.5.0 ha expuesto la clase CalculationOptions para agregar más flexibilidad y extensibilidad para el motor de cálculo de fórmulas. La clase recién agregada tiene las siguientes propiedades.

  1. CalculationOptions.CalcStackSize: especificó el tamaño de pila para calcular celdas recursivamente. -1 especifica que el cálculo usará WorkbookSettings.CalcStackSize del libro de trabajo correspondiente.
  2. CalculationOptions.CustomFunction: amplía el motor de cálculo de fórmulas con una fórmula personalizada.
  3. CalculationOptions.IgnoreError: el valor de tipo booleano indica si los errores deben ocultarse al calcular las fórmulas, donde los errores podrían deberse a la función no compatible, enlace externo o más.
  4. CalculationOptions.PrecisionStrategy: valor de tipo CalculationPrecisionStrategy que especifica la estrategia para procesar la precisión del cálculo.

Cálculo de enumeraciónEstrategia de precisión añadida

Aspose.Cells for .NET 8.5.0 ha expuesto la enumeración CalculationPrecisionStrategy para agregar más flexibilidad al motor de cálculo de fórmulas para obtener los resultados deseados. Esta enumeración planea el manejo de precisión de cálculo. Debido al problema de precisión de la aritmética de punto flotante IEEE 754, es posible que algunas fórmulas aparentemente simples no se calculen para dar los resultados esperados, por lo tanto, la última compilación API ha expuesto los siguientes campos para obtener los resultados deseados de acuerdo con la selección.

  1. CalculationPrecisionStrategy.Decimal: usa decimal como operando siempre que sea posible y es más ineficiente por consideraciones de rendimiento.
  2. CalculationPrecisionStrategy.Round: redondea los resultados del cálculo según el dígito significativo.
  3. CalculationPrecisionStrategy.None: no se aplica ninguna estrategia, por lo tanto, durante el cálculo, el motor utiliza el valor doble original como operando y devuelve el resultado directamente. Esta opción es la más eficiente y es aplicable para la mayoría de los casos.

Métodos agregados para usar CalculationOptions

Con el lanzamiento de v8.5.0, el Aspose.Cells API ha agregado versiones de sobrecarga del método CalculateFormula como se indica a continuación.

  • Workbook.CalculateFormula(Opciones de cálculo)
  • Worksheet.CalculateFormula(opciones de CalculationOptions, booleano recursivo)
  • Cell. Calcular (Opciones de cálculo)

Campo de enumeración PasteType.RowHeights agregado

Aspose.Cells Las API proporcionaron el campo de enumeración PasteType.RowHeights con el fin de copiar las alturas de las filas al copiar los rangos. Al establecer la propiedad PasteOptions.PasteType en ((PasteType.RowHeights}}, las alturas de todas las filas dentro del rango de origen se copiarán en el rango de destino.

C#

 //Create workbook object

Workbook workbook = new Workbook();

//Source worksheet

Worksheet srcSheet = workbook.Worksheets[0];

//Add destination worksheet

Worksheet dstSheet = workbook.Worksheets.Add("Destination Sheet");

//Set the row height of the 4th row

//This row height will be copied to destination range

srcSheet.Cells.SetRowHeight(3, 50);

//Create source range to be copied

Range srcRange = srcSheet.Cells.CreateRange("A1:D10");

//Create destination range in destination worksheet

Range dstRange = dstSheet.Cells.CreateRange("A1:D10");

//PasteOptions, we want to copy row heights of source range to destination range

PasteOptions opts = new PasteOptions();

opts.PasteType = PasteType.RowHeights;

//Copy source range to destination range with paste options

dstRange.Copy(srcRange, opts);

//Write informative message in cell D4 of destination worksheet

dstSheet.Cells["D4"].PutValue("Row heights of source range copied to destination range");

//Save the workbook in xlsx format

workbook.Save("output.xlsx", SaveFormat.Xlsx);

Propiedad SheetRender.PageScale agregado

Cuando configura Ajuste de escala de página usandoAjustar a n página(s) de ancho por m de alto opción, Microsoft Excel calcula el factor de escala de configuración de página. Se puede lograr lo mismo usando la propiedad SheetRender.PageScale expuesta por Aspose.Cells for .NET 8.5.0. Esta propiedad devuelve un valor doble que se puede convertir en un valor porcentual. Por ejemplo, si devuelve 0,507968245, significa que el factor de escala es del 51 %.

C#

 //Create workbook object

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.Worksheets[0];

//Put some data in these cells

worksheet.Cells["A4"].PutValue("Test");

worksheet.Cells["S4"].PutValue("Test");

//Set paper size

worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;

//Set fit to pages wide as 1

worksheet.PageSetup.FitToPagesWide = 1;

//Calculate page scale via sheet render

SheetRender sr = new SheetRender(worksheet, new ImageOrPrintOptions());

//Convert page scale double value to percentage

string strPageScale = sr.PageScale.ToString("0%");

//Write the page scale value

Console.WriteLine(strPageScale);

Enumeración CellValueFormatStrategy Agregado

Aspose.Cells for .NET 8.5.0 ha agregado una nueva enumeración CellValueFormatStrategy para manejar situaciones en las que los valores de celda deben extraerse con o sin formato aplicado. La enumeración CellValueFormatStrategy tiene los siguientes campos.

  1. CellValueFormatStrategy.CellStyle: solo formateado con el formato original de la celda.
  2. CellValueFormatStrategy.DisplayStyle: formateado con el estilo mostrado de la celda.
  3. CellValueFormatStrategy.None: sin formato.

Método Cell.GetStingValue añadido

Para usar la enumeración CellValueFormatStrategy, v8.5.0 ha expuesto el método Cell.GetStingValue que podría aceptar un parámetro de tipo CellValueFormatStrategy y devuelve el valor que depende de la opción especificada.

El siguiente fragmento de código muestra cómo usar el método Cells.GetStingValue recién expuesto.

C#

 //Create workbook

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.Worksheets[0];

//Access cell A1

Cell cell = worksheet.Cells["A1"];

//Put value inside the cell

cell.PutValue(0.012345);

//Format the cell that it should display 0.01 instead of 0.012345

Style style = cell.GetStyle();

style.Number = 2;

cell.SetStyle(style);

//Get string value as Cell Style

string value = cell.GetStingValue(CellValueFormatStrategy.CellStyle);

Console.WriteLine(value);

//Get string value without any formatting

value = cell.GetStingValue(CellValueFormatStrategy.None);

Console.WriteLine(value);

Propiedad ExportTableOptions.FormatStrategy Agregado

Aspose.Cells for .NET 8.5.0 ha expuesto la propiedad ExportTableOptions.FormatStrategy para los usuarios que desean exportar los datos a DataTable con o sin formato. Esta propiedad utiliza la enumeración CellValueFormatStrategy y exporta los datos según la opción especificada.

El siguiente código explica el uso de la propiedad ExportTableOptions.FormatStrategy.

C#

 //Create workbook

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.Worksheets[0];

//Access cell A1

Cell cell = worksheet.Cells["A1"];

//Put value inside the cell

cell.PutValue(0.012345);

//Format the cell that it should display 0.01 instead of 0.012345

Style style = cell.GetStyle();

style.Number = 2;

cell.SetStyle(style);

//Print the cell values as it displays in excel

Console.WriteLine("Cell String Value: " + cell.StringValue);

//Print the cell value without any format

Console.WriteLine("Cell String Value without Format: " + cell.StringValueWithoutFormat);

//Export Data Table Options with FormatStrategy as CellStyle

ExportTableOptions opts = new ExportTableOptions();

opts.ExportAsString = true;

opts.FormatStrategy = CellValueFormatStrategy.CellStyle;

//Export Data Table

DataTable dt = worksheet.Cells.ExportDataTable(0, 0, 1, 1, opts);

//Print the value of very first cell

Console.WriteLine("Export Data Table with Format Strategy as Cell Style: " + dt.Rows[0][0].ToString());

//Export Data Table Options with FormatStrategy as None

opts.FormatStrategy = CellValueFormatStrategy.None;

dt = worksheet.Cells.ExportDataTable(0, 0, 1, 1, opts);

//Print the value of very first cell

Console.WriteLine("Export Data Table with Format Strategy as None: " + dt.Rows[0][0].ToString());