Export excel HttpContext.Current.Response C#

alfinete

Power Member
boas Tardes
tenho este metodo expotar uma extrutura de dados para csv
funciona na perfeição

ao descomentar as linhas para em vês de svc ser xls

ele apenas cria um ficheiro xls com a estrutura csv

gostava que me ajudassem aproveitando este metodo
para dar para exportar para excel.


nota : como a estrutura de dados traz mais colunas do que aquelas que quero mostrar tenho de as criar á mão na própria exportação.

obrigado aguardo

Código:
  public void ExportRequestsToCSV(int RequestTypeID)
  {
  // Trazemos os dados
  switch (RequestTypeID)
  {
  case 0:
  lstRequestsToExport = _requestService.GetAllSubmittedRequests();
  break;
  case (int)REQUESTSTATUSCODE.CANCELADO:
  lstRequestsToExport = _requestService.GetAllCanceledRequests();
  break;
  default:
  lstRequestsToExport = _requestService.GetAllSubmittedRequests();
  break;
  }




  string separator = ",";

  for (int i = 0; i < lstRequestsToExport.Count(); i++)
  {
  if (i == 0)
  {
 
//damos o nome ás colunas

  sb.AppendLine("Employee Number, Name, ID Number, NIF, Legal Entity, Morada, Local, Cód. Postal, E-mail, Category Group," +

  "Estado Pedido,Process Submit Date, ID Proceso, Card, Número, Card Type, RefMB, Device, Modelo, IMEI," +
  "Delivery Date, Subsidiação, Tarifario, Fatura, Valor Liquido,StatusID,Estado");
   
  }

  var request = lstRequestsToExport.ElementAt(i);

  sb.Append(request.Employee.Number).Append(separator)
  .Append(request.Employee.Name).Append(separator)
  .Append(request.Employee.CC).Append(separator)
  .Append(request.Employee.Nif).Append(separator)
  .Append(request.Employee.Entity).Append(separator)
  .Append(GetString(request.Employee.Address)).Append(separator)
  .Append(GetString(request.Employee.Local)).Append(separator)
  .Append(request.Employee.PostalCode).Append(separator)
  .Append(request.Employee.Email).Append(separator)
  .Append(request.Employee.Category.CategoryGroup.Description).Append(separator)
  .Append(request.RequestStatus.Description).Append(separator)


  .Append(request.SubmitDate.ToString("yyyy/MM/dd")).Append(separator)
  .Append(request.ID).Append(separator)

  .Append(request.CardExisting ? "Sim" : "Não").Append(separator)
  .Append(request.CardNumber ?? string.Empty).Append(separator)
  .Append(request.CardType.Description).Append(separator)
  .Append(request.CardMBReference ?? string.Empty).Append(separator)
  .Append(request.Device != null ? request.Device.Make.Description : string.Empty).Append(separator)
  .Append(request.Device != null ? request.Device.Model : string.Empty).Append(separator)
  .Append(request.CardIMEI ?? string.Empty).Append(separator)

  .Append(request.DeliveryDate.HasValue ? request.DeliveryDate.Value.ToString("yyyy/MM/dd") : string.Empty).Append(separator)
  .Append(request.Subvention.HasValue ? request.Subvention.Value ? "sim" : "Não" : string.Empty).Append(separator)
  .Append(request.Plan_Operator.Description).Append(separator)
  .Append(request.InvoiceNumber ?? string.Empty).Append(separator)
  .Append(request.Value.HasValue ? GetString(request.Value.Value.ToString()) : string.Empty).Append(separator)
  .Append(request.RequestStatusID.ToString()).Append(separator)
  .AppendLine(request.RequestStatus.Description);





  }


  var response = HttpContext.Current.Response;
   response.ContentType = "text/csv";
  //response.ContentType = "application/vnd.ms-excel";

  response.ContentEncoding = Encoding.Default;
  //response.ContentEncoding = Encoding.UTF8;
   
  response.AddHeader("content-disposition", String.Format("attachment; filename=Requests_{0}.csv", DateTime.Now.ToString("yyyyMMdd_hhmm")));
  //response.AddHeader("content-disposition", String.Format("attachment; filename=Requests_{0}.xls", DateTime.Now.ToString("yyyyMMdd_hhmm")));

  response.Write(sb.ToString());
   

  response.Flush();
  response.End();
  }
 
entratanto consegui

ele cria bem o ficheiro

mas ao abrilo da uma mensagem de erro

"the file format and extention of dont match ....."

ao clicar Ok nessa mensagem mostra o ficheiro correcto com todos os dados

agradecia uma ajuda referente a esta msg de erro

Código:
  [System.Web.Http.AcceptVerbs("GET")]
  public void ExportRequestsToxls(int RequestTypeID)
  {
  var sb = new StringBuilder();
  IEnumerable<Request> lstRequestsToExport = null;
  var Context = HttpContext.Current;


  Context.Response.Clear();


  List<string> LstHeaders = new List<string> {"EmployeeNumber","Name","ID Number","NIF"};



  switch (RequestTypeID)
  {
  case 0:
  lstRequestsToExport = _requestService.GetAllSubmittedRequests();
  break;
  case (int)REQUESTSTATUSCODE.CANCELADO:
  lstRequestsToExport = _requestService.GetAllCanceledRequests();
  break;
  default:
  lstRequestsToExport = _requestService.GetAllSubmittedRequests();
  break;
  }




  // Construção  Headers
  Context.Response.Write("<table style=\"border: 1px solid  #5dade2 ;\">");
  Context.Response.Write("<tr style=\"border: 1px solid  #5dade2 ;background-color: #5dade2;color:#FFFFFF \">");
  // Context.Response.Write("<td style=\"height:20px;background-color:#FFFFFF,border: 0px;\">&nbsp;</td>");
  foreach (var ColumnName in LstHeaders)
  {
  if (!string.IsNullOrEmpty(ColumnName))
  Context.Response.Write("<td>" + HttpUtility.HtmlEncode(ColumnName) + "</td>");
  }
  Context.Response.Write("</tr>");


  for (int i = 0; i < lstRequestsToExport.Count(); i++)
  {


  var request = lstRequestsToExport.ElementAt(i);

  Context.Response.Write("<tr style=\"border: 1px solid  #5dade2;height:40px;\">");
  //"EmployeeNumber","Name","ID Number","NIF",
  Context.Response.Write("<td>" + HttpUtility.HtmlEncode(request.Employee.Number.ToString().Replace(",", string.Empty)) + "</td>");
  Context.Response.Write("<td>" + HttpUtility.HtmlEncode(request.Employee.Name.ToString().Replace(",", string.Empty)) + "</td>");
  Context.Response.Write("<td>" + HttpUtility.HtmlEncode((request.Employee.CC != null ? request.Employee.CC : string.Empty).Replace(",", string.Empty)) + "</td>");
  Context.Response.Write("<td>" + HttpUtility.HtmlEncode((request.Employee.Nif != null ? request.Employee.Nif : string.Empty).Replace(",", string.Empty)) + "</td>");




  Context.Response.Write("</tr>");


  }
  Context.Response.Write("</table>");

  if (RequestTypeID == 0) // quando do tipo Request
  _requestService.ChangeRequestStatus(lstRequestsToExport.Select(r => r.ID).ToArray(), REQUESTSTATUSCODE.ENVIADO_OPERADORA);



  Context.Response.Buffer = true;

  Context.Response.Charset = "";
  Context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  Context.Response.AddHeader("content-disposition", String.Format("attachment; filename=Requests_{0}.xls", DateTime.Now.ToString("yyyyMMdd_hhmm")));

  Context.Response.Flush();
  Context.Response.End();

  }
 
Última edição:
Tenho aqui outra questão

tenho um campo
estou a fazer o seguinte para passar para o html referente ao excel
Código:
      HttpUtility.HtmlEncode((!string.IsNullOrEmpty(request.CardIMEI) ? request.CardIMEI : string.Empty).Replace(",",string.Empty))

no qual está a passar bem

Código:
  <td>353829102849168</td>


quando cria o excel

no campo excel mostra o seguinte

Código:
       3,53829E+14

agradecia uma ajuda para esta questão
 
Back
Topo