Утром в часть системы управления заказами была добавлена функция экспорта запрошенной информации о заказе в Excel для анализа администратором. Ранее написанный код выглядит следующим образом:
Response.Clear();
Response.BufferOutput = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename = FileName.xls");
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
Response.ContentType = "приложение/ms-excel";
this.EnableViewState = ложь;
System.Globalization.CultureInfo myinfo = new System.Globalization.CultureInfo("ZH-CN", true);
StringWriter osw = новый StringWriter (myinfo);
HtmlTextWriter ohtw = новый HtmlTextWriter (osw);
dgQueryResult.RenderControl(ohtw);
Ответ.Запись(ОСВ);
Ответ.Конец();
В моем запросе использовалось разбиение по страницам, и заказчик требовал, чтобы все запрошенные данные были экспортированы в Excel. Поэтому эту функцию невозможно было реализовать путем экспорта содержимого элемента управления в Excel, как раньше, поэтому я изменил код на следующий:
Ответ.Очистить();
Response.BufferOutput = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename = order.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "приложение/ms-excel";
строка strExcelHeader = string.Empty;
строка стрExcelItems;
if(ViewState["SQL"] != null) // Получаем оператор SQL, использованный в предыдущем запросе
{
// Получаем заголовки каждого столбца, разделяем каждый заголовок с помощью t и добавляем символ возврата каретки после заголовка последнего столбца
strExcelHeader = "Номер заказаtДилерtРегионtМалая категорияtТоварtОплаченная суммаtВремя заказаtДействительный статусtСтатус обработкиtn";
//Записываем полученные данные в поток вывода HTTP
Response.Write(strExcelHeader);
// Обработка данных результата запроса построчно
ITDBHandle itDbHandle = новый ITDBHandle ();
itDbHandle.QueryString = ViewState["SQL"].ToString();
Читатель SqlDataReader = itDbHandle.ExecuteDataReader();
пока (читатель.Читать())
{
стрExcelItems = string.Empty;
strExcelItems += read["OrderID"].ToString() + "t";
strExcelItems += read["DealerName"].ToString() + "t";
strExcelItems += read["Город"].ToString() + "t";
strExcelItems += read["SmallClassName"].ToString() + "t";
strExcelItems += читатель["Имя бренда"].ToString() + читатель["Модель"].ToString() + "t";
strExcelItems += read["TotalPrice"].ToString() + "t";
strExcelItems += read["OrderDate"].ToString() + "t";
strExcelItems += read["IsValid"].ToString() + "t";
strExcelItems += read["DealState"].ToString() +"n";
Response.Write(strExcelItems);
}
читатель.Закрыть();
Ответ.Конец();
}
Здесь я просто записываю запрошенные данные в виде Excel (конечно, они могут быть и в других форматах, например XML), чего достаточно для простых нужд. Конечно, использовать .NET для непосредственной работы также очень просто. Файлы Excel, таких примеров много.