That doesn't make a whole load of sense: why have two threads doing this? Why not have a thread (from the
BackgroundWorker[
^] pool) for each report? Then it keeps the related tasks together - each thread reads data, create report, export to excel, end thread.
Otherwise, you have to pass data between the threads, presumably using some form of queue - it's much easier to handle if the thread handles the whole task, particularly as the next stage can't start until the previous one is complete.