Preguntas frecuentes (FAQ)

¿Cómo solucionar la excepción System.StackOverflowException en Workbook.CalculateFormula?

A veces, los usuarios se enfrentan a la excepción System.StackOverflowException en el método Workbook.CalculateFormula. Esta excepción suele ocurrir porque el tamaño de la pila por defecto del IIS es demasiado pequeño (solo 265k). Puede solucionar este error creando otro hilo con un tamaño de pila aumentado y luego moviendo su código relacionado con Workbook.CalculateFormula adentro.

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

Problema de grosor de líneas al renderizar Excel a PDF

A veces, cuando se convierte un archivo de Excel a PDF, el grosor de las líneas es diferente en el PDF de salida. Este problema no es causado por Aspose.Cells. Es causado por Adobe Reader cuando sus configuraciones “Alisar arte de línea” y “Mejorar líneas finas” están marcadas. Desmarcar estas opciones mostrará bien el PDF.

Si se marca “Alisar arte de línea” y “Mejorar líneas finas”, el grosor de las líneas será diferente. Ve los siguientes pasos cómo se hace:

  • Ir a Editar
  • Seleccionar Preferencias
  • En la categoría Visualización de página marca “Alisar arte de línea” y “Mejorar líneas finas”

Si desmarca “Suavizar líneas de arte” y “Mejorar líneas delgadas”, el grosor de las líneas será el mismo. Para lograr esto, siga los siguientes pasos:

  • Ir a Editar
  • Seleccionar Preferencias
  • En la categoría Visualización de página, desmarque “Suavizar líneas de arte” y “Mejorar líneas delgadas”

Cómo solucionar System.OutOfMemoryException al cargar hojas de cálculo grandes?

Existe la posibilidad de que el constructor de Workbook arroje System.OutOfMemoryException al cargar hojas de cálculo grandes. Esta excepción sugiere que la memoria disponible es insuficiente para cargar completamente la hoja de cálculo en la memoria, por lo tanto, la hoja de cálculo se debe cargar habilitando las Preferencias de memoria.

Las API de Aspose.Cells proporcionan Preferencias de memoria para optimizar el consumo de memoria al cargar y procesar hojas de cálculo. Estas opciones también son útiles para cargar eficientemente hojas de cálculo grandes que contienen enormes conjuntos de datos en el objeto Workbook, como se muestra a continuación.

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

Determinar qué tamaño de pila se necesita para cierto Workbook

Aunque hemos mejorado el motor de cálculo de fórmulas de Aspose.Cells y en la mayoría de los casos, debería poder calcular todas las fórmulas con éxito para un archivo de plantilla dado sin especificar un tamaño de pila más pequeño, aún así, a veces la StackOverFlowException en el método Workbook.CalculateFormula podría ser inevitable. Proporcionamos nuevas API para que los usuarios realicen un seguimiento de los cálculos de fórmulas. Hemos agregado una clase llamada “AbstractCalculationMonitor” y proporcionamos una propiedad, es decir, CalculationOptions.CalculationMonitor para hacer frente/rastrear el problema.

Los usuarios pueden rastrear el tamaño de la pila por sí mismos utilizando las API. Tenga en cuenta que verificar la pila para cada celda seguramente degradará el rendimiento en gran medida. Consulte el segmento de código de muestra para su referencia:

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