FAQ

So beheben Sie die System.StackOverflowException bei Workbook.CalculateFormula?

Manchmal treten Benutzer auf die System.StackOverflowException bei der Methode Workbook.CalculateFormula. Diese Ausnahme tritt in der Regel auf, weil die Standard-Stackgröße des IIS zu klein ist (nur 265k). Sie können diesen Fehler beheben, indem Sie einen anderen Thread mit erhöhter Stapelgröße erstellen und dann Ihren Workbook.CalculateFormula-Code darin verschieben.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
private HttpPostedFileBase postedFile;
[HttpPost]
public ActionResult Index(HttpPostedFileBase file, string mode)
{
this.postedFile = file;
Thread newThread = new Thread(Calculate, 1048576);
newThread.Start();
newThread.Join();
return View();
}
private void Calculate()
{
if (postedFile != null && postedFile.ContentLength > 0)
{
var wbkMain = new Workbook(postedFile.InputStream);
wbkMain.CalculateFormula();
}
}

Dicke von Linienproblem beim Rendern von Excel zu PDF

Manchmal, wenn eine Excel-Datei in PDF konvertiert wird, ist die Dicke der Linien im Ausgabe-PDF unterschiedlich. Dieses Problem wird nicht von Aspose.Cells verursacht. Es wird durch Adobe Reader verursacht, wenn seine Einstellungen “Glätten von Linien Kunst” und “Verstärken von dünnen Linien” aktiviert sind. Das Deaktivieren dieser Optionen zeigt das PDF gut an.

Wenn “Glätten von Linien Kunst” und “Verstärken von dünnen Linien” aktiviert sind, ist die Dicke der Linien unterschiedlich. Sehen Sie sich die folgenden Schritte an, wie dies gemacht wird:

  • Gehe zu Bearbeiten
  • Wählen Sie Einstellungen
  • In der Kategorie Seitenanzeige aktivieren Sie “Glätten von Linien Kunst” und “Verstärken von dünnen Linien”

Wenn “Glätten von Linien Kunst” und “Verstärken von dünnen Linien” deaktiviert sind, ist die Dicke der Linien gleich. Befolgen Sie dazu einfach die folgenden Schritte:

  • Gehe zu Bearbeiten
  • Wählen Sie Einstellungen
  • In der Kategorie Seitenanzeige deaktivieren Sie “Glätten von Linien Kunst” und “Verstärken von dünnen Linien”

So beheben Sie die System.OutOfMemoryException beim Laden großer Tabellenkalkulationen?

Es besteht eine hohe Wahrscheinlichkeit, dass der Workbook-Konstruktor eine System.OutOfMemoryException beim Laden großer Tabellenkalkulationen wirft. Diese Ausnahme deutet darauf hin, dass der verfügbare Speicher nicht ausreicht, um die Tabelle komplett in den Speicher zu laden, daher muss die Tabelle geladen werden, während die Speichereinstellungen aktiviert sind.

Aspose.Cells APIs bieten Speicherpräferenzen zur Optimierung des Speicherverbrauchs beim Laden und Verarbeiten von Tabellenkalkulationen. Diese Optionen sind auch hilfreich beim effizienten Laden großer Tabellenkalkulationen mit riesigen Datensätzen im Workbook-Objekt, wie unten demonstriert.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Specify the LoadOptions
LoadOptions options = new LoadOptions();
// Set the memory preferences
options.MemorySetting = MemorySetting.MemoryPreference;
// Load the Big Excel file having large Data set in it
Workbook book = new Workbook(dataDir + "sample.xlsx", options);
Console.WriteLine("File has been loaded successfully");

Bestimmen Sie, welche Stapelgröße für eine bestimmte Arbeitsmappe benötigt wird

Obwohl wir den Aspose.Cells Formelberechnungs-Engine verbessert haben und in den meisten Fällen sollten alle Formeln erfolgreich für eine bestimmte Vorlagendatei berechnet werden können, ohne eine kleinere Stapelgröße anzugeben. Aber manchmal ist die System.StackOverflowException bei der Methode Workbook.CalculateFormula unvermeidlich. Wir bieten neue APIs für die Benutzer, um die Formelberechnungen zu verfolgen. Wir haben eine Klasse namens “AbstractCalculationMonitor” hinzugefügt und eine Eigenschaft bereitgestellt, d.h., CalculationOptions.CalculationMonitor um mit dem Problem umzugehen/zu verfolgen.

Benutzer können die Stapelgröße selbst mithilfe der APIs nachverfolgen. Bitte beachten Sie, dass das Überprüfen des Stapels für jede Zelle die Leistung erheblich beeinträchtigen wird. Sehen Sie sich das Beispielcode-Segment zur Referenz an:

public class MyCalculationMonitor : AbstractCalculationMonitor
{
public override void BeforeCalculate(int sheetIndex, int rowIndex, int colIndex)
{
if(new StackTrace(false).FrameCount > 2000)
{
throw new Exception("Stop the formula calculation because risk of StackOverflowException");
}
}
}