Excel probably has some settings somewhere for this type of thing which can control the data formats of the export. I don't play around with Excel exports much. Here are some workarounds: (Note that I haven't tested any of these)
Export it as a CSV initially so the export contains the right data (since you said exporting as a CSV doesn't corrupt the format of the cells).
Then import it and export it again but this time change the file type to XML.
Export the orginal as an XML and a CSV.
Reopen both in seperate sheets, and pick and choose to merge the two as you see fit to a 3rd sheet and finally export as XML.
On the original, manually change the fields from a date format to a text format before exporting.
Edit the exported XML file manually and change the fields to your liking from notepad and resave.
Don't trust the user's input, and have them copy-paste to a different sheet where they can paste in date format.
Then have another row reference it but this time convert it to the text format.
Write a note on the excel page adjacent to the cells telling the user to make sure the cells are kept in the text format "@".
Write a new VBA module using the OnEntry event handler:
Worksheets("Sheet1").OnEntry = "Test"
MsgBox "A key was pressed."
That way the subroutine "Test" would be called any time a field in the entire sheet changes.
Then instead of showing a dialog, for the subroutine, apply a function to make sure a cell range is the proper type:
Worksheets("Sheet1").OnEntry = "EntryCallBack"
Selection.NumberFormat = "@"
'Sets the format to Text for the given range.
A few links that might come in handy:
You could also go with Charles' idea and setup a .WSH, .VBS, .JS or .HTA file to open the excel file
by creating an "Excel.Application" object.
Make some edits to the page programmatically then SaveAsXMLData().