Interrompere la conversione o il caricamento utilizzando InterruptMonitor quando ci vuole troppo tempo

Possibili Scenari di Utilizzo

Aspose.Cells ti consente di interrompere la conversione di un foglio di lavoro in vari formati come PDF, HTML, ecc. utilizzando l’oggetto InterruptMonitor quando ci vuole troppo tempo. Il processo di conversione è spesso intensivo in termini di CPU e memoria ed è utile interromperlo quando le risorse sono limitate. Puoi utilizzare InterruptMonitor sia per interrompere la conversione che per interrompere il caricamento di un foglio di lavoro enorme. Utilizza la proprietà Workbook.InterruptMonitor per interrompere la conversione e la proprietà LoadOptions.InterruptMonitor per caricare un foglio di lavoro enorme.

Interrompere la conversione o il caricamento utilizzando InterruptMonitor quando sta impiegando troppo tempo

Il seguente codice di esempio spiega l’uso dell’oggetto InterruptMonitor. Il codice converte un file Excel piuttosto grande in PDF. Ci vorranno diversi secondi (cioè più di 30 secondi) per convertirlo a causa di queste righe di codice.

//Access cell AB1000000 and add some text inside it.

Cell cell = ws.getCells().get("AB1000000");

cell.putValue("This is text.");

Come puoi vedere AB1000000 è una cella piuttosto lontana nel file XLSX. Tuttavia, il metodo WaitForWhileAndThenInterrupt() interrompe la conversione dopo 10 secondi e il programma termina. Utilizza il codice seguente per eseguire il codice di esempio.

new StopConversionOrLoadingUsingInterruptMonitor().testRun();

Codice di Esempio

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public class StopConversionOrLoadingUsingInterruptMonitor
{
static String outDir = Utils.Get_OutputDirectory();
//Create InterruptMonitor object
InterruptMonitor im = new InterruptMonitor();
public class ConversionThread extends Thread
{
private Thread monitorThread;
public ConversionThread(Thread monitorThread)
{
this.monitorThread = monitorThread;
}
//This function will create workbook and convert it to Pdf format
void createWorkbookAndConvertItToPdfFormat() throws Exception
{
//Create a workbook object
Workbook wb = new Workbook();
//Assign it InterruptMonitor object
wb.setInterruptMonitor(im);
//Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);
//Access cell AB1000000 and add some text inside it.
Cell cell = ws.getCells().get("AB1000000");
cell.putValue("This is text.");
try
{
//Save the workbook to Pdf format
wb.save(outDir + "output_InterruptMonitor.pdf");
//Show successful message
System.out.println("Excel to PDF - Successful Conversion");
//stop monitor thread
monitorThread.interrupt();
}
catch (CellsException ex)
{
if(ex.getCode() == ExceptionType.INTERRUPTED)
{
System.out.println("Conversion process is interrupted - Message: " + ex.getMessage());
}
else
{
throw ex;
}
}
}
public void run()
{
try
{
createWorkbookAndConvertItToPdfFormat();
}
catch(Exception ex)
{
System.out.println("Conversion thread error - Message: " + ex.getMessage());
}
}
}//ConversionThread
public class MonitorThread extends Thread
{
//This function will interrupt the conversion process after 10s
void waitForWhileAndThenInterrupt() throws Exception
{
Thread.sleep(1000 * 10);
im.interrupt();
}
public void run()
{
try
{
waitForWhileAndThenInterrupt();
}
catch (InterruptedException ex)
{
System.out.println("Monitor thread is interrupted - Message: " + ex.getMessage());
}
catch (Exception ex)
{
System.out.println("Monitor thread error - Message: " + ex.getMessage());
}
}
}//MonitorThread
public void testRun() throws Exception
{
MonitorThread monitorThread = new MonitorThread();
ConversionThread conversionThread = new ConversionThread(monitorThread);
monitorThread.start();
conversionThread.start();
monitorThread.join();
conversionThread.join();
}
public static void main(String[] args) throws Exception
{
new StopConversionOrLoadingUsingInterruptMonitor().testRun();
// Print the message
System.out.println("StopConversionOrLoadingUsingInterruptMonitor executed successfully.");
}
}//StopConversionOrLoadingUsingInterruptMonitor