Открытие приложения Excel на стороне клиента - PullRequest
2 голосов
/ 03 января 2011

Я пытаюсь использовать сборку взаимодействия COM для экспорта некоторых данных в книгу Excel для веб-приложения ASP.NET. Это отлично работает при разработке, так как сервер и клиент - это одна и та же машина. Однако при развертывании это не так. Развернутая версия не создает исключение, но также не открывает Excel на локальном компьютере (поскольку ASP.NET выполняется на стороне сервера, это довольно очевидно).

Как мне создать приложение Excel на компьютере клиента?

Ответы [ 3 ]

3 голосов
/ 03 января 2011

Вам нужно будет сгенерировать сторону файлового сервера Excel, а затем отправить байты клиенту, используя соответствующий тип MIME, чтобы клиент мог понять, как его открыть.

Что-то вроде этого ...

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.BinaryWrite(bytes);

, где fileName - это имя файла, которое вам нужно, а bytes - вывод из вашего генератора Excel в форме byte[].

Обратите внимание, что это не так.На самом деле не нужно открывать Excel или что-то в этом роде, он просто представляет клиенту контент в наилучшем из возможных форматов, чтобы клиент мог открыть его в Excel.Пользователь должен будет нажать «открыть», и если у него установлено приложение Excel, это будет приложение по умолчанию для открытия файла.

Если клиент не имеет Excel или его типы MIME не сопоставленыи т. д., это не сработает.Без какого-то сумасшедшего ActiveX Voodoo (который я не рекомендую) вы не сможете «открыть для них Excel».

2 голосов
/ 03 января 2011

НЕ ИСПОЛЬЗУЙТЕ COM INTEROP !!!

Есть гораздо лучший способ: EPPlus

При открытии Excel на сервере будет сохранена копия Excel. Какой ужас. EPPlus позволит вам создавать собственные таблицы Excel 2007/2010 с диаграммами и всем остальным. И без установки офиса на самом сервере. Мы используем его, довольно гладко.

Если клиенты не имеют Excel 2007 или выше, они могут загрузить пакет совместимости от Microsoft.

0 голосов
/ 03 января 2011

Звучит как большая потенциальная дыра в безопасности, если вы спросите меня!

Один из подходов может состоять в запуске элемента управления ActiveX Excel?(ActiveX - это просто маркетинговый термин для COM-объекта).Я не знаком с ASP.NET, поэтому не знаю, как это будет работать за границей сервер / клиент.

Более простой и безопасный подход - создать файл CSV и отправить егочерез стандартный http.Пользователь может открыть это в Excel.Это было бы хорошо для одного листа данных, но не для сложных вещей с макросами, форматированием и т. Д.

...