Excel 2007 преобразование экспортированных данных потока памяти в формулу - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть небольшое приложение ASP.NET, которое считывает данные из таблицы и отправляет их в виде вложения Excel в сообщение электронной почты.Данные - это просто HTML-таблица с тегами.Я отправляю сообщение по следующему коду:

byte[] data = GetData(excelData);
MemoryStream memoryStream = new MemoryStream(data);
mm.Attachments.Add(new Attachment(memoryStream, "info.xls", "text/plain"));

Это отлично работает в Excel 2003, но по какой-то причине Excel 2007 продолжает пытаться преобразовать все это в формулу, и я получаюОшибка «Данные ячейки слишком длинные».Я пробовал поиск, но не смог найти ничего конкретного о том, почему это может происходить в 07 году, или о простом способе исправить это.Я знаю, что 07, вероятно, обрабатывает данные немного по-другому, чем 03, но у меня не так много времени, чтобы по возможности переработать это приложение.У кого-нибудь есть какие-либо предложения относительно легкого решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 07 января 2011

Итак, CSV-решение не было для меня идеальным, потому что мне нужно было отформатировать данные. В итоге я изменил первую строку кода выше на следующее:

System.Text.Encoding enc = Encoding.UTF8;
byte[] data = enc.GetBytes(excelData);

UTF8 была ЕДИНСТВЕННОЙ байтовой кодировкой, которая корректно отображала мои HTML-таблицы в Excel 2007 с одним предупреждением - по какой-то причине, хотя теперь он использовал UTF-8, он неправильно отображал специальные символы. Исправление для этого состояло в том, чтобы добавить это перед началом моих таблиц HTML в тексте ExcelData, который я экспортировал:

<HEAD><META http-equiv=Content-Type content='text/html; charset=utf-8'></HEAD>

Я не уверен, почему для того, чтобы все работало правильно, требовалось одинаковое кодирование в 2 разных местах. Вероятно, есть гораздо лучшие способы экспорта в Excel, чем таблицы HTML, но это быстрое и простое решение для проблемы, которая не требует ничего элегантного. Надеюсь, это может помочь и другим.

0 голосов
/ 22 декабря 2010

HTML, сохраненный как .xls, является хаком. Это экономит время, но нет никаких гарантий, что он будет работать в каждой версии Excel. Если вам это удастся, я рекомендую сохранить данные в CSV и отправить их в виде файла .csv. Возможно, пользователю придется пару раз нажать «ок», поскольку Excel преобразует файл, но каждая версия Excel может загружать файлы CSV.

Если вам действительно нужно это в формате .XLS, вы можете изучить сторонние библиотеки, такие как FlexCel, или работать через Excel Interop (не рекомендуется на сервере).

...