Öffentlich API Änderungen in Aspose.Cells 8.5.0

APIs hinzugefügt

Die ICustomFunction.CalculateCustomFunction-Parameter wurden geändert

Wenn ein Parameter für die benutzerdefinierte Funktion ein Zellbezug ist, wurden APIs in der alten Version Aspose.Cells verwendet, um den Zellbezug in einen Zellwert oder ein Objekt-Array aller Zellwerte im referenzierten Bereich zu konvertieren. Für viele Funktionen und Benutzer ist jedoch das Zellenwerte-Array für alle Zellen im referenzierten Bereich nicht erforderlich, sie benötigen nur eine einzelne Zelle, die der Position der Formel entspricht, oder benötigen nur die Referenz selbst anstelle des Zellenwerts oder des Wertearrays . In einigen Situationen erhöhte das Abrufen aller Zellenwerte sogar das Risiko eines zirkulären Referenzfehlers.

Um solche Anforderungen zu unterstützen, hat Aspose.Cells for .NET 8.5.0 den Parameterwert in „paramsList“ für den angegebenen Bereich geändert. Seit v8.5.0 fügt API das ReferredArea-Objekt einfach in die „paramsList“ ein, wenn der entsprechende Parameter eine Referenz ist oder sein berechnetes Ergebnis eine Referenz ist. Wenn Sie die Referenz selbst benötigen, können Sie die ReferredArea direkt verwenden. Wenn Sie einen einzelnen Zellenwert aus der Referenz abrufen müssen, die der Position der Formel entspricht, können Sie die Methode ReferredArea.GetValue(rowOffset, int colOffset) verwenden. Wenn Sie ein Zellwerte-Array für den gesamten Bereich benötigen, können Sie die Methode ReferredArea.GetValues verwenden.

Jetzt, da Aspose.Cells for .NET 8.5.0 die ReferredArea in „paramsList“ angibt, wird die ReferredAreaCollection in „contextObjects“ nicht mehr benötigt (in alten Versionen konnte sie den Parametern der benutzerdefinierten Funktion nicht immer eine Eins-zu-Eins-Zuordnung geben), Daher hat diese Version es jetzt auch aus “contextObjects” entfernt.

Diese Änderung erfordert geringfügige Änderungen am Code der Implementierung für ICustomFunction, wenn Sie den Wert/die Werte des Referenzparameters benötigen.

Alte Implementierung

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

{

    ...

    object o = paramsList[i];

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}

Neue Implementierung

 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...

    ...

}

Klassenberechnungsoptionen hinzugefügt

Aspose.Cells for .NET 8.5.0 hat die CalculationOptions-Klasse verfügbar gemacht, um mehr Flexibilität und Erweiterbarkeit für die Formelberechnungs-Engine hinzuzufügen. Die neu hinzugefügte Klasse hat die folgenden Eigenschaften.

  1. CalculationOptions.CalcStackSize: Gibt die Stapelgröße für die rekursive Berechnung von Zellen an. -1 gibt an, dass die Berechnung WorkbookSettings.CalcStackSize der entsprechenden Arbeitsmappe verwendet.
  2. CalculationOptions.CustomFunction: Erweitert die Formelberechnungs-Engine um eine benutzerdefinierte Formel.
  3. CalculationOptions.IgnoreError: Der Wert vom Typ Boolean gibt an, ob Fehler beim Berechnen der Formeln ausgeblendet werden sollen, wobei die Fehler auf die nicht unterstützte Funktion, den externen Link oder mehr zurückzuführen sein könnten.
  4. CalculationOptions.PrecisionStrategy: CalculationPrecisionStrategy-Typwert, der die Strategie für die Verarbeitungsgenauigkeit der Berechnung angibt.

AufzählungsberechnungPrecisionStrategy Hinzugefügt

Aspose.Cells for .NET 8.5.0 hat die Enumeration CalculationPrecisionStrategy verfügbar gemacht, um der Formelberechnungs-Engine mehr Flexibilität zu verleihen, um die gewünschten Ergebnisse zu erzielen. Diese Aufzählung behandelt die Handhabung der Berechnungsgenauigkeit. Aufgrund des Genauigkeitsproblems der IEEE 754-Gleitkommaarithmetik werden einige scheinbar einfache Formeln möglicherweise nicht berechnet, um die erwarteten Ergebnisse zu liefern. Daher hat der neueste API-Build die folgenden Felder verfügbar gemacht, um die gewünschten Ergebnisse gemäß der Auswahl zu erhalten.

  1. CalculationPrecisionStrategy.Decimal: Verwendet nach Möglichkeit dezimal als Operanden und ist aus Leistungsgründen am ineffizientesten.
  2. CalculationPrecisionStrategy.Round: Rundet die Berechnungsergebnisse nach signifikanten Stellen.
  3. CalculationPrecisionStrategy.None: Es wird keine Strategie angewendet, daher verwendet die Engine während der Berechnung den ursprünglichen Double-Wert als Operanden und gibt das Ergebnis direkt zurück. Diese Option ist am effizientesten und in den meisten Fällen anwendbar.

Methoden Hinzugefügt, um CalculationOptions zu verwenden

Mit der Veröffentlichung von v8.5.0 hat der Aspose.Cells API Überladungsversionen der CalculateFormula-Methode wie unten aufgeführt hinzugefügt.

  • Workbook.CalculateFormula(Berechnungsoptionen)
  • Worksheet.CalculateFormula (CalculationOptions-Optionen, bool rekursiv)
  • Cell.Berechnen(Berechnungsoptionen)

Aufzählungsfeld PasteType.RowHeights Hinzugefügt

Aspose.Cells APIs haben das Aufzählungsfeld PasteType.RowHeights zum Kopieren der Zeilenhöhen beim Kopieren der Bereiche bereitgestellt. Beim Festlegen der PasteOptions.PasteType-Eigenschaft auf ((PasteType.RowHeights}} werden die Höhen aller Zeilen innerhalb des Quellbereichs in den Zielbereich kopiert.

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);

Eigenschaft SheetRender.PageScale Hinzugefügt

Wenn Sie die Seiteneinrichtungsskalierung mit festlegenAnpassen an n Seite(n) breit und m hoch Option Microsoft Excel berechnet den Skalierungsfaktor für die Seiteneinrichtung. Dasselbe kann mit der SheetRender.PageScale-Eigenschaft erreicht werden, die von Aspose.Cells for .NET 8.5.0 verfügbar gemacht wird. Diese Eigenschaft gibt einen Double-Wert zurück, der in einen Prozentwert konvertiert werden kann. Wenn beispielsweise 0,507968245 zurückgegeben wird, bedeutet dies, dass der Skalierungsfaktor 51 % beträgt.

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);

Enumeration CellValueFormatStrategy Hinzugefügt

Aspose.Cells for .NET 8.5.0 hat eine neue Aufzählung CellValueFormatStrategy hinzugefügt, um Situationen zu handhaben, in denen Zellwerte mit oder ohne angewendete Formatierung extrahiert werden müssen. Enumeration CellValueFormatStrategy hat folgende Felder.

  1. CellValueFormatStrategy.CellStyle: Nur mit dem Originalformat der Zelle formatiert.
  2. CellValueFormatStrategy.DisplayStyle: Mit dem angezeigten Stil der Zelle formatiert.
  3. CellValueFormatStrategy.None: Nicht formatiert.

Methode Cell.GetStingValue hinzugefügt

Um die CellValueFormatStrategy-Enumeration zu verwenden, hat v8.5.0 die Cell.GetStingValue-Methode verfügbar gemacht, die einen Parameter des Typs CellValueFormatStrategy akzeptieren kann und den Wert abhängig von der angegebenen Option zurückgibt.

Der folgende Codeausschnitt zeigt, wie die neu verfügbar gemachte Cells.GetStingValue-Methode verwendet wird.

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);

Eigenschaft ExportTableOptions.FormatStrategy Hinzugefügt

Aspose.Cells for .NET 8.5.0 hat die ExportTableOptions.FormatStrategy-Eigenschaft für Benutzer verfügbar gemacht, die die Daten mit oder ohne Formatierung in DataTable exportieren möchten. Diese Eigenschaft verwendet die CellValueFormatStrategy-Enumeration und exportiert die Daten gemäß der angegebenen Option.

Der folgende Code erläutert die Verwendung der ExportTableOptions.FormatStrategy-Eigenschaft.

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());