I am in awe that you use Monarch to populate Excel like this! What a great idea.
I looked at the help & wonder if your report is filtered or sorted. As per the help under recno:
"Returns the record number of a record in the table. You can think of the record number as the detail line number, since any given record number will always correspond to the same detail line from the report (e.g., Recno=1 always corresponds to the first detail This applies even if the table has been sorted. This is not the case for the row numbers that you see at the left edge of the table.[/b] This is not the case for the row numbers that you see at the left edge of the table."
Hoping this helps
I've recreated your fields (by copy and paste) and it works fine for me.
So I have no idea why it is doing this, but have you tried removing the  around the field names.
You only need them for long field names.
Or maybe you could take the XLRow field out and replace it with Trim(Str(Rowno()+1)) straight into the expression? you don't need the ,8,0 as you are trimming and have no decimals.
Failing that, you could always try the good old Jet update from Microsoft. This can fix all sorts of export problems, and as rowno() must be created from the underlying table, it's just possible it is another "Microsoft" database feature? take a look at [url="http://support.microsoft.com/default.aspx?kbid=239114#3"]http://support.microsoft.com/default.aspx?kbid=239114#3[/url]