2015-01-14 4 views
2

Я понимаю, что это хорошо освещенная тема, но после просмотра нескольких сообщений я ищу другое решение. Приложение представляет собой приложение aC# web, .net framework 4.5 и требуется экспортировать около 80 000 строк из базы данных SQL Server 2012 в шаблон таблицы электронных таблиц Excel (чтобы сделать его красивым и сделать форматирование) и передать его пользователю для загрузки ,Экспорт большого количества строк из SQL Server 2012 в Excel

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

Текущее решение проходит через данные и генерирует XML, используя библиотеку OpenXML. Хотя это работает хорошо и быстро для небольших наборов данных, это занимает очень много времени для больших наборов данных.

Существует ли какая-либо альтернатива создания файлов Excel без:

  1. извлечения всех данных из базы данных в приложение с помощью какого-то объекта передачи данных, которая медленно, как его передачи большого объема данных вокруг.
  2. с использованием компонентов третьей стороны, требующих лицензирования, поскольку бюджет отсутствует.
  3. с использованием OpenXml для циклического перемещения по всем строкам и генерации полного вывода.
  4. создание и сохранение физического файла на сетевом диске, поскольку существуют ограничения безопасности данных.
  5. с помощью SSRS

я что-то вдоль линий с помощью SQL Server для создания файла Excel в памяти (через SSIS) мышления, открывая поток из приложения, редактирование форматирование с помощью OpenXML или что-то другое а затем потоковой передачи файла пользователю. Не уверены, возможно ли это или есть другие варианты?

ответ

2

Вы можете попробовать этот подход, но, конечно, включает в себя извлечение данных из базы данных в приложение.

Response.Clear(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment;filename=YourFileName.xls"); 
Response.Charset = ""; 
Response.ContentType = "application/vnd.ms-excel"; 
using (StringWriter sw = new StringWriter()) 
{ 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    FileInfo fi = new FileInfo(Server.MapPath("~/App_Themes/YourCSS.css")); 
    StringBuilder sb = new StringBuilder(); 
    StreamReader sr = fi.OpenText(); 
    while (sr.Peek() >= 0) 
     sb.Append(sr.ReadLine()); 
    sr.Close(); 

    sb.Append(" table.tnew tr { height: 20px; } "); 
    sb.Append(" table.tnew tr td, th { border:1px solid #CCCCCC; } "); 
    sb.Append(" table.tnew tr.RowTotale td { background-color:#F5F5F5; color: #333333; text-transform:uppercase; font-weight: bold; font-size:11px; } "); 

    GridView gv = new GridView(); 
    gv.DataSource = YourDataSource; 
    gv.DataBind(); 
    gv.RenderControl(hw); 

    Response.Output.Write(string.Format("<html><head><style type='text/css'>{0}</style></head><body>{1}</body></html>", sb.ToString(), sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

Как вы можете видеть, вы даже можете добавить свой CSS-файл и дополнительный стиль.

+0

Я не видел, чтобы этот способ ответа на оттиск был до +1, но, как уже упоминалось, вытащить данные в приложение для рендеринга, к сожалению, замедлит -1. – sarin

+0

@sarin Какой объем данных (в байтах)? – dario

+0

Ну, сгенерированный файл excel с 80000 строк с использованием OpenXML составляет около 10 МБ. – sarin

Смежные вопросы