The cellIndex variable is always 0 so it writes everything into column A.
For the same reason that Dave suggested you use createRow(currentRow.getRowNum()), when creating the cell, you should do something like createCell(currentRow.getColumnNum()) - I say something like because I'm away from my development environment so have guessed the name of the method for getting the column number.
If you want to put the data into another excel workbook then you need to create a new workbook, a new sheet and populate the appropriate cells with the data. You may also need to copy over the formatting of each cell if you want that to be the same (it been a long time since I used POI and I can't remember if there is a way of copying the data and formatting at the same time).
It works for me.
I suspect the problem you are having is the time it takes to set up the audio subsystem. On my system it takes a couple of hundred milliseconds from pressing the button to getting the TargetDataLine object running. It may be that it is considerably slower on your system. You could try putting some System.out.println(""); statements in your run method so you can visually see when you have an initialised sound system - you could add some calls to System.currentTimeMillis() if you want to see how long it is actually taking.
BufferedInputStream has a method which returns the number of bytes read in so you could repeatedly call the read method using the previously returned value to adjust the off (offset at which to start storing bytes) and len (the maximum number of bytes to read in) variables until you have a full buffer.