Pela manhã, foi adicionada à parte de gerenciamento de pedidos do sistema uma função para exportar as informações do pedido consultadas para Excel para análise do administrador. O código escrito anteriormente é o seguinte:
Response.Clear();
Response.BufferOutput = verdadeiro;
Response.Charset = "GB2312";
Response.AppendHeader("Disposição de conteúdo","anexo;nome do arquivo = nome do arquivo.xls");
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
Response.ContentType = "aplicativo/ms-excel";
this.EnableViewState = falso;
System.Globalization.CultureInfo myinfo = new System.Globalization.CultureInfo("ZH-CN", verdadeiro);
StringWriter osw = new StringWriter(minhasinformações);
HtmlTextWriter ohtw = new HtmlTextWriter(osw);
dgQueryResult.RenderControl(ohtw);
Resposta.Write(osw);
Response.End();
Minha consulta utilizava paginação, e o cliente exigia que todos os dados consultados fossem exportados para Excel. Portanto, esta função não poderia ser alcançada exportando o conteúdo do controle para Excel como antes, então alterei o código para este:
Response.Clear();
Response.BufferOutput = verdadeiro;
Response.Charset = "GB2312";
Response.AppendHeader("Disposição de conteúdo","anexo;nome do arquivo = pedido.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "aplicativo/ms-excel";
string strExcelHeader = string.Empty;
stringstrExcelItems;
if(ViewState["SQL"] != null) // Obtém a instrução SQL usada na consulta anterior
{
// Obtenha os títulos de cada coluna, separe cada título com t e adicione um caractere de retorno de carro após o título da última coluna
strExcelHeader = "Número do pedidotRevendedortRegiãotCategoria pequenatCommoditytValor pagotTempo do pedidotStatus válidotStatus de processamentotn";
//Escreve as informações de dados obtidas no fluxo de saída HTTP
Response.Write(strExcelHeader);
// Processa os dados do resultado da consulta linha por linha
ITDBHandle itDbHandle = new ITDBHandle();
itDbHandle.QueryString = ViewState["SQL"].ToString();
Leitor SqlDataReader = itDbHandle.ExecuteDataReader();
while(leitor.Leitura())
{
strExcelItems = string.Empty;
strExcelItems += leitor["OrderID"].ToString() + "t";
strExcelItems += leitor["DealerName"].ToString() + "t";
strExcelItems += leitor["Cidade"].ToString() + "t";
strExcelItems += leitor["SmallClassName"].ToString() + "t";
strExcelItems += leitor["Marca"].ToString() + leitor["Modelo"].ToString() + "t";
strExcelItems += leitor["TotalPrice"].ToString() + "t";
strExcelItems += leitor["OrderDate"].ToString() + "t";
strExcelItems += leitor["IsValid"].ToString() + "t";
strExcelItems += leitor["DealState"].ToString() +"n";
Response.Write(strExcelItems);
}
leitor.Fechar();
Response.End();
}
Aqui eu simplesmente escrevo os dados consultados no formato Excel (claro que também pode estar em outros formatos, como XML), o que é suficiente para necessidades simples. Claro, também é muito simples usar o .NET para operar diretamente. Arquivos Excel, existem muitos exemplos para referência.