Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在邮件中附加Excel时检索空白Excel_C#_Asp.net_Email - Fatal编程技术网

C# 在邮件中附加Excel时检索空白Excel

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>

我用这段代码从gridview发送一封带有excel附件的邮件,邮件部分效果很好,但excel附件始终为空。我已经调试了代码,并确保gridview的数据源将所需的数据传递给gridview,似乎我没有正确地将gridview呈现给excel。整个过程是一个for-each循环,具体取决于foreach中元素的数量

我丢失了一些代码吗

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"));