Когда пользователь нажимает кнопку, действие возвращает документ ExcelML. У вас будет полный контроль над форматированием, и он автоматически открывается в Excel.
XML в Excel
Вот некоторые константы, которые я использую на сайте SharePoint, над которым я работаю, чтобы создать XML, который будет открыт в Excel
private const string excelTable =
"<?xml version=\"1.0\"?>\n"+
"<?mso-application progid=\"Excel.Sheet\"?>\n" +
"<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\""+
"xmlns:o=\"urn:schemas-microsoft-com:office:office\"" +
"xmlns:x=\"urn:schemas-microsoft-com:office:excel\"" +
"xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" " +
"xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n"+
"<Worksheet ss:Name=\"Sheet 1\">\n"+
"<Table>\n"+
"{0}" +
"</Table>\n"+
"<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"+
"</WorksheetOptions>\n"+
"</Worksheet>\n"+
"</Workbook>";
private const string excelRowFormat = "<Row>{0}</Row>\n";
private const string excelCellFormat =
"{0}<Cell><Data ss:Type=\"String\">{1}</Data></Cell>";
Не самый красивый и эффективный способ, но он работает. XML-файл, который я создаю, я присоединяю к HttpResponse так же, как вы, когда пользователь загружает файл.