Jump to content
Sign in to follow this  
Phaster

enviar excel em anexo com determinada formatação

Recommended Posts

Phaster

boas,

passa-se o seguinte, eu tenho uma página com as seguintes coisas:

- botão que executa views e coloca os resultados das mesmas numa gridview

- botão que exporta a gridview para excel

- botão que envia um email com um anexo excel com os dados presentes na gridview

o meu problema é este, aquando a exportação para excel eu tinha o seguinte problema, tanto no sql server como na página em si, os resultados da view eram mostrados tal e qual como era suposto, ver imagens abaixo, no entanto, quando abria o excel, algumas células vinham formatadas como número e outras como geral, sendo que as formatadas de forma "geral" eram apresentadas de forma correcta e as formatadas como "número" não

no sql server

UDK9R.png

na página

Q2W5m.png

no excel

1Xw44.png

para resolver este problema apenas adicionei ao código a secção a bold:

protected void Buttonexcel_Click(object sender, EventArgs e)
{
 try
 {
	 Response.Clear();
	 Response.Buffer = true;
	 Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
	 Response.Charset = "";
	 Response.AddHeader("content-disposition", "attachment;filename=dados.xls");
	 StringWriter sWriter = new StringWriter();
	 HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
	 GridView1.RenderControl(hWriter);
	 string style = @"<style> TD { mso-number-format:\@; } </style>";
	 Response.Write(style);
	 Response.Output.Write(sWriter.ToString());
	 Response.Flush();
	 Response.End();
 }
 catch (Exception ex)
 {
	 Label1.Text = ex.ToString();
 }
}

string style = @"<style> TD { mso-number-format:\@; } </style>";

Response.Write(style);

e isto resolveu a situação, o excel dá um aviso que o número da célula está formatado como texto mas não há crise

no entanto, quando envio um email com o tal anexo, a formatação é a mesma da exportação para excel antes de eu ter aplicado o tal estilo à string.

como é que aplico este mesmo estilo ao ficheiro excel enviado em anexo? segue abaixo o meu código de envio de email, eu ainda tentei copiar as duas linhas que acrescentei ao outro botão mas o excel continua na mesma

protected void Buttonmail_Click(object sender, EventArgs e)
{
 fn_AttachGrid();
}
public void fn_AttachGrid()
{
 StringWriter sWriter = new StringWriter();
 HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
 GridView1.RenderControl(hWriter);
 MailMessage mail = new MailMessage();
 mail.IsBodyHtml = true;
 mail.To.Add(new MailAddress(txtto.Text));
 mail.Subject = "Foi";
 System.Text.Encoding Enc = System.Text.Encoding.ASCII;
 byte[] mBArray = Enc.GetBytes(sWriter.ToString());
 System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
 mail.Attachments.Add(new Attachment(mAtt, "rotina.xls"));
 mail.Body = "Foi detectado o seguinte problema";
 SmtpClient smtp = new SmtpClient();
 mail.From = new MailAddress("email_origem", "nome_apresentar");
 smtp.Host = "smtp.gmail.com";
 smtp.UseDefaultCredentials = true;
 System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
 NetworkCred.UserName = "email_origem";
 NetworkCred.Password = "password";
 smtp.Credentials = NetworkCred;
 smtp.EnableSsl = true;
 smtp.Port = 587;
 smtp.Send(mail);
 ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true);
}

agradecia portanto alguma ajuda sff

Share this post


Link to post
Share on other sites
Phaster

já descobri, era só fazer isto

string style = @"<style> TD { mso-number-format:\@; } </style>";
byte[] mBArray = Enc.GetBytes(style + sWriter.ToString());

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.