Lecture des valeurs de cellule dans plusieurs threads simultanément

Comment lire les valeurs des cellules simultanément dans plusieurs threads avec Aspose.Cells for Java

Pour lire les valeurs des cellules dans plus d’un thread simultanément, définissez Worksheet.getCells().setMultiThreadReading() sur true. Sinon, vous pourriez obtenir les mauvaises valeurs de cellule. Veuillez noter que certaines fonctionnalités telles que la mise en forme des valeurs de cellules ne sont pas prises en charge pour les multithreads. Ainsi, MultiThreadReading vous permet uniquement d’accéder aux données originales des cellules. Dans un environnement multithread, si vous essayez d’obtenir la valeur formatée de la cellule, par exemple avec Cell.getStringValue() pour les valeurs numériques, vous pourriez obtenir un résultat inattendu ou une exception.

Le code suivant :

  1. Crée un classeur.
  2. Ajoute une feuille de calcul.
  3. Remplit la feuille de calcul avec des valeurs de chaîne.
  4. Crée ensuite deux threads qui lisent simultanément les valeurs de cellules aléatoires. Si les valeurs lues sont correctes, rien ne se passe. Si les valeurs lues sont incorrectes, un message est affiché.

Si vous commentez cette ligne :

testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);

alors le message suivant est affiché :

if (s.equals("R" + row + "C" + col)!=true)

{

    System.out.println("This message box will show up when cells read values are incorrect.");

}

Sinon, le programme s’exécute sans afficher de message, ce qui signifie que toutes les valeurs lues dans les cellules sont correctes.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public abstract class ThreadProc implements Runnable {
boolean isRunning = true;
Workbook testWorkbook;
Random r = new Random();
public ThreadProc(Workbook workbook) {
this.testWorkbook = workbook;
}
public int randomNext(int Low, int High) {
int R = r.nextInt(High - Low) + Low;
return R;
}
public void kill() {
this.isRunning = false;
}
public void run() {
while (this.isRunning) {
int row = randomNext(0, 10000);
int col = randomNext(0, 100);
//Commonly you can only access Cell.Value instead of Cell.StringValue.
//In this demo all cell values are string, so Cell.StringValue is same with Cell.Value here and can be used.
//For other values such as numeric, if you call Cell.StringValue here, you may get unexpected result or exception here.
//It is because that Cell.getStringValue() will format those values according to the number format but the formatting process
//does not support multi-threads.
String s = testWorkbook.getWorksheets().get(0).getCells().get(row, col).getStringValue();
if (s.equals("R" + row + "C" + col) != true) {
System.out.println("This message box will show up when cells read values are incorrect.");
}
}
}
}
// Main.Java
static void TestMultiThreadingRead() throws Exception {
Workbook testWorkbook = new Workbook();
testWorkbook.getWorksheets().clear();
testWorkbook.getWorksheets().add("Sheet1");
for (int row = 0; row < 10000; row++)
for (int col = 0; col < 100; col++)
testWorkbook.getWorksheets().get(0).getCells().get(row, col).setValue("R" + row + "C" + col);
//Commenting this line will show a pop-up message
testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);
ThreadProc tp = new ThreadProc(testWorkbook);
Thread myThread1 = new Thread(tp);
myThread1.start();
Thread myThread2 = new Thread(tp);
myThread2.start();
Thread.currentThread().sleep(5*1000);
tp.kill();
}