Ты не должен этим заниматься.Если вы отправляете лист Excel, даты должны отображаться пользователю как таковые.Позвольте Excel отображать дату в соответствии с настройками системы пользователя.Не устанавливайте формат заранее.Если вы это сделаете, то пользователь получит даты в виде строк и должен будет преобразовать их, чтобы сделать что-нибудь полезное с данными.Кроме того, есть ли причина, почему вы отправляете xls вместо xlsx?Учитывая, что это происходит по электронной почте, пользователи будут намного счастливее, загружая файлы xlsx, поскольку они гарантированно не содержат макросы.Xls считаются более опасными, и многие почтовые клиенты не позволяют пользователю открыть xls именно по этой причине.
EDIT
После просмотра вашего кода я понимаю проблему более четко.То, что вы производите, не является настоящей таблицей Excel;это просто текстовый файл, к которому вы добавили расширение .xls.
Чтобы понять разницу, создайте новую электронную таблицу Excel, введите некоторые образцы данных, а затем сохраните их в формате xls (формат Excel 97).Теперь откройте файл в блокноте и посмотрите, что вы получите.Теперь откройте файл, который вы генерируете с помощью своего кода.
Что здесь происходит?Excel достаточно умен, чтобы признать, что, хотя ваш сгенерированный файл имеет неправильное расширение (т. Е. Содержимое файла не соответствует требуемому для xls), он имеет данные, которые он может отображать в электронной таблице, и поэтому его удобно загружать.
Изменение вашего расширения на xlsx не помогает.
У вас есть два варианта: 1) быть честным и использовать расширение, соответствующее формату вашего сгенерированного файла (* .txt, * .csv и т. Д.)) или 2) вам нужно сгенерировать книгу Excel как собственный файл Excel.
Если вы выберете последний путь, есть различные варианты: 1) использовать библиотеки взаимодействия Office, 2) использовать сторонние библиотеки Excel (некоторые из которых бесплатны - пожалуйста, библиотеку Google c # Excel) или 3) создать свойсобственная библиотека.Мне лично пришлось пойти на 3), так как проблема с 1) заключается в том, что Office необходимо установить на веб-сервере, а с 2) это либо стоит денег, либо это означает, что при использовании свободного программного обеспечения мой работодатель, как правило, недоволен.
Если вы хотите сделать 3) Я могу вам помочь.Первым шагом, который я рекомендую, является создание образца файла xlsx в Excel и его сохранение.Затем измените расширение в Explorer на .zip (да !!) и распакуйте.Затем изучите содержимое.Вы найдете это интересным, но это то, что вам нужно будет создать.Это не легко, но может быть сделано с помощью встроенных функций в .Net.
EDIT 2)
Если вы решите пойти по маршруту CSV (и я не уверен, что то, что у вас есть)здесь действительно csv, вам нужно открыть сгенерированный файл, чтобы быть уверенным), тогда он в настоящее время будет работать корректно только для систем с форматами даты dd-mm-yyyy.Чтобы она работала для любой локали, вам нужно, чтобы дата была в формате ISO 8601 (т.е. гггг-мм-дд).Для этого у вас есть два варианта.Во-первых, измените вашу хранимую процедуру для форматирования даты при генерации данных, таким образом:
SELECT CONVERT(varchar(10), your_date, 126) AS your_date FROM your_table;
(обратите внимание, что вы должны предоставить псевдоним для выходного столбца, в противном случае он получает Expr1 и т. Д.).Во-вторых, вы можете добавить DataColumn в DataTable после извлечения данных, пройтись по строкам вашего DataTable и назначить новый столбец с форматированной версией столбца даты в формате ISO 8601, а затем удалить уже существующий столбец даты.Сделайте все это, прежде чем генерировать вывод текста.