C# 在邮件中附加Excel时检索空白Excel
我用这段代码从gridview发送一封带有excel附件的邮件,邮件部分效果很好,但excel附件始终为空。我已经调试了代码,并确保gridview的数据源将所需的数据传递给gridview,似乎我没有正确地将gridview呈现给excel。整个过程是一个for-each循环,具体取决于foreach中元素的数量 我丢失了一些代码吗C# 在邮件中附加Excel时检索空白Excel,c#,asp.net,email,C#,Asp.net,Email,我用这段代码从gridview发送一封带有excel附件的邮件,邮件部分效果很好,但excel附件始终为空。我已经调试了代码,并确保gridview的数据源将所需的数据传递给gridview,似乎我没有正确地将gridview呈现给excel。整个过程是一个for-each循环,具体取决于foreach中元素的数量 我丢失了一些代码吗 protected void MailButton_Click(object sender, EventArgs e) { List<FOAM>
protected void MailButton_Click(object sender, EventArgs e)
{
List<FOAM> foamList = new List<FOAM>(servs.GetAreaList());
foreach (FOAM foam in foamList)
{
Session["Area"] = foam.ItemAreaCode;
Session["Principal"] = foam.PrincipalAmount;
Session["Accountability"] = foam.AccountableAmount;
Session["Count"] = foam.ItemCount;
foamdetails.ItemAreaCode = foam.ItemAreaCode;
FOAMTemplateGridview.DataSource = servs.GetFoamAsOfUnsettledforAOM(foamdetails);
FOAMTemplateGridview.DataBind();
StringWriter _writer = new StringWriter();
HttpContext.Current.Server.Execute("AreaManagersMail.aspx", _writer);
StringWriter stw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(stw);
FOAMTemplateGridview.RenderControl(hw);
MailMessage newMail = new MailMessage();
newMail.Priority = MailPriority.High;
newMail.To.Add("test@test.com");
newMail.Subject = "Unsettled FOAM As of " + DateTime.Today.ToString("MMMM dd, yyyy") + "-A" + foam.ItemAreaCode;
System.Text.Encoding Enc = System.Text.Encoding.ASCII;
byte[] mBArray = Enc.GetBytes(stw.ToString());
System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
newMail.Attachments.Add(new Attachment(mAtt, "test.xls"));
newMail.Body = _writer.ToString();
newMail.From = new MailAddress("test@test.com");
newMail.IsBodyHtml = true;
SmtpClient SmtpSender = new SmtpClient();
SmtpSender.Port = 25;
SmtpSender.Host = "MailHost";
SmtpSender.Send(newMail);
newMail.Dispose();
}
}
受保护的无效邮件按钮\u单击(对象发送者,事件参数e)
{
List foamList=新列表(servs.GetAreaList());
foreach(泡沫列表中的泡沫)
{
会话[“区域”]=foam.ItemAreaCode;
会话[“委托人”]=foam.PrincipalAmount;
会话[“责任”]=应收账款金额;
会话[“计数”]=foam.ItemCount;
foamdetails.ItemAreaCode=foam.ItemAreaCode;
FOAMTemplateGridview.DataSource=servs.getFoamAsofunSettledForOM(foamdetails);
FOAMTemplateGridview.DataBind();
StringWriter _writer=新建StringWriter();
HttpContext.Current.Server.Execute(“AreaManagerMail.aspx”,U writer);
StringWriter stw=新StringWriter();
HtmlTextWriter hw=新的HtmlTextWriter(stw);
FOAMTemplateGridview.RenderControl(hw);
MailMessage newMail=newmailmessage();
newMail.Priority=MailPriority.High;
newMail.To.Add(“test@test.com");
newMail.Subject=“截至”+DateTime.Today.ToString(“MMMM dd,yyyy”)+“-A”+FOAM.ItemAreaCode;
System.Text.Encoding Enc=System.Text.Encoding.ASCII;
字节[]mBArray=Enc.GetBytes(stw.ToString());
System.IO.MemoryStream mAtt=新的System.IO.MemoryStream(mBArray,false);
添加(新附件(mAtt,“test.xls”);
newMail.Body=_writer.ToString();
newMail.From=新邮件地址(“test@test.com");
newMail.IsBodyHtml=true;
SmtpClient SmtpSender=新的SmtpClient();
SmtpSender.Port=25;
SmtpSender.Host=“MailHost”;
SmtpSender.Send(newMail);
Dispose();
}
}
您将获得空白excel,因为您将从stw
中获得字节
,该字节已定义,但从未给定值
stw
只是一个没有值的新对象,这就是为什么您会得到0
字节数组
位于mBArray
中
然后分配mAtt=new System.IO.MemoryStream(mBArray,false)代码>。因此,由于mBArray
是空的,所以mAtt
也是空的,并且您已经从mAtt
创建了文件,该文件是空的,这就是您在电子邮件中收到空文件的原因。我想你需要换一条线
byte[] mBArray = Enc.GetBytes(stw.ToString());
到
我自己找到了答案
不是直接渲染gridview,而是在表中传递gridview的值,然后该表就是我用于渲染的表
样本如下:
Table table = new Table();
table.Rows.AddAt(3, FOAMTemplateGridview.HeaderRow);
foreach (GridViewRow row in FOAMTemplateGridview.Rows)
{
int index = 0;
table.Rows.Add(row);
foreach (TableCell tc in row.Cells)
{
switch (index)
{
case 0: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 1: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 2: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 3: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 4: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 5: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 6: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 7: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 8: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 9: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 10: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 11: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 12: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 13: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 14: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 15: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 16: tc.HorizontalAlign = HorizontalAlign.Left;
break;
}
tc.Attributes.Add("class", "text");
tc.BorderStyle = System.Web.UI.WebControls.BorderStyle.Solid;
tc.BorderColor = Color.Black;
tc.Font.Name = "Arial";
tc.Font.Size = 10;
index++;
}
}
StringWriter stw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(stw);
hw.WriteLine(@"<style>.text { mso-number-format:\@; } </style>");
table.RenderControl(hw);
MailMessage newMail = new MailMessage();
newMail.Priority = MailPriority.High;
newMail.To.Add(foam.AomMail);
newMail.Subject = "Subject";
System.Text.Encoding Enc = System.Text.Encoding.ASCII;
byte[] mBArray = Enc.GetBytes(stw.ToString());
System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
newMail.Attachments.Add(new Attachment(mAtt, "sales.xls"));
Table Table=新表();
table.Rows.AddAt(3,FOAMTemplateGridview.HeaderRow);
foreach(FOAMTemplateGridview.Rows中的GridViewRow行)
{
int指数=0;
table.Rows.Add(行);
foreach(第行单元格中的表格单元格tc)
{
开关(索引)
{
案例0:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例1:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例2:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例3:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例4:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例5:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例6:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例7:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例8:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例9:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例10:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例11:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例12:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例13:tc.HorizontalAlign=HorizontalAlign.Right;
打破
案例14:tc.HorizontalAlign=HorizontalAlign.Left;
打破
案例15:tc.horizontallign=horizontallign.Left;
打破
案例16:tc.HorizontalAlign=HorizontalAlign.Left;
打破
}
添加(“类”、“文本”);
tc.BorderStyle=System.Web.UI.WebControls.BorderStyle.Solid;
tc.BorderColor=颜色.黑色;
tc.Font.Name=“Arial”;
tc.Font.Size=10;
索引++;
}
}
StringWriter stw=新StringWriter();
HtmlTextWriter hw=新的HtmlTextWriter(stw);
hw.WriteLine(@).text{mso编号格式:\@;}”);
Table table = new Table();
table.Rows.AddAt(3, FOAMTemplateGridview.HeaderRow);
foreach (GridViewRow row in FOAMTemplateGridview.Rows)
{
int index = 0;
table.Rows.Add(row);
foreach (TableCell tc in row.Cells)
{
switch (index)
{
case 0: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 1: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 2: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 3: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 4: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 5: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 6: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 7: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 8: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 9: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 10: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 11: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 12: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 13: tc.HorizontalAlign = HorizontalAlign.Right;
break;
case 14: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 15: tc.HorizontalAlign = HorizontalAlign.Left;
break;
case 16: tc.HorizontalAlign = HorizontalAlign.Left;
break;
}
tc.Attributes.Add("class", "text");
tc.BorderStyle = System.Web.UI.WebControls.BorderStyle.Solid;
tc.BorderColor = Color.Black;
tc.Font.Name = "Arial";
tc.Font.Size = 10;
index++;
}
}
StringWriter stw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(stw);
hw.WriteLine(@"<style>.text { mso-number-format:\@; } </style>");
table.RenderControl(hw);
MailMessage newMail = new MailMessage();
newMail.Priority = MailPriority.High;
newMail.To.Add(foam.AomMail);
newMail.Subject = "Subject";
System.Text.Encoding Enc = System.Text.Encoding.ASCII;
byte[] mBArray = Enc.GetBytes(stw.ToString());
System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
newMail.Attachments.Add(new Attachment(mAtt, "sales.xls"));