【问题标题】:Send DataSet data email via attachment Excel File xls ( Not Creating Excel File ) C#通过附件 Excel 文件 xls(不创建 Excel 文件)C# 发送 DataSet 数据电子邮件
【发布时间】:2014-11-03 13:14:47
【问题描述】:

我想用 C# 发送带有电子邮件 excel 文件附件的 DataSet 数据,但我不想物理地创建 Excel 文件。可以用 MemoryStream 做,但我做不到。

另一个问题我想设置 Excel 文件的编码类型,因为数据可能是俄语或土耳其语特殊字符。

请帮帮我...

这是我的示例代码...

<!-- language: c# -->
var response = HttpContext.Response;

response.Clear();
response.Charset = "utf-8";
response.ContentEncoding = System.Text.Encoding.Default;

GridView excelGridView = new GridView();
excelGridView.DataSource = InfoDataSet;
excelGridView.DataBind();

excelStringWriter = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(excelStringWriter);
excelGridView.RenderControl(htw);

byte[] ExcelData = emailEncoding.GetBytes(excelStringWriter.ToString());
MemoryStream ms = new MemoryStream(ExcelData);

mailMessage.Attachments.Add(new Attachment(ms, excelFileName, "application/ms-excel"));
<!-- language: c# -->

【问题讨论】:

    标签: excel file email encoding attachment


    【解决方案1】:

    这是另一个简单易用的excel附件

    public string SendMail(string LastId)
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
            SqlCommand cmd = new SqlCommand("sp_GetMailData", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@LastID", LastId);
            con.Open();
            string result = "0";
            string temptext = "";
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt=new DataTable();
            da.Fill(dt);
            //ExportToSpreadsheet(dt,"My sheet");
            GridView gv = new GridView();
            gv.DataSource = dt;
            gv.DataBind();
            AttachandSend(gv);
            con.Close();
    
            return result.ToString();
        }
        public void AttachandSend(GridView gv)
        {
    
            StringWriter stw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(stw);
    
            gv.RenderControl(hw);
    
            System.Text.Encoding Enc = System.Text.Encoding.ASCII;
            byte[] mBArray = Enc.GetBytes(stw.ToString());
            System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
    
            System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
            MailAddress address = new
            MailAddress("xxxxxxxxxxxxx", "Admin");
    
            mailMessage.Attachments.Add(new Attachment(mAtt, "sales.xls"));
            mailMessage.Body = "Hi PFA";
            mailMessage.From = address;
            mailMessage.To.Add("xxxxxxxxxxxx");
            mailMessage.Subject = "xxxxxxxxxxxxxx";
    
            mailMessage.IsBodyHtml = true;
    
            var smtp = new SmtpClient();
            smtp.Send(mailMessage);
    
        }
    

    【讨论】:

      【解决方案2】:

      这是你的解决方案

       private static Stream DataTableToStream(DataTable table)
              {
                  const string semiColon = ";";
      
                  var ms = new MemoryStream();
                  var sw = new StreamWriter(ms);
      
                  foreach (DataColumn column in table.Columns)
                  {
                      sw.Write(column.ColumnName);
                      sw.Write(semiColon);
                  }
                  sw.Write(Environment.NewLine);
                  foreach (DataRow row in table.Rows)
                  {
                      for (int i = 0; i < table.Columns.Count; i++)
                      {
                          sw.Write(row[i].ToString().Replace(semiColon, string.Empty));
                          sw.Write(semiColon);
                      }
                      sw.Write(Environment.NewLine);
                  }
                  return ms;
              }
      
              private static MailMessage CreateMail(string from,
                  string to,
                  string subject,
                  string body,
                  string attname,
                  Stream tableStream)
              {
                  // using System.Net.Mail
                  var mailMsg = new MailMessage(from, to, subject, body);
      
                  tableStream.Position = 0;
                  mailMsg.Attachments.Add(
                      new Attachment(tableStream, attname, CsvContentType));
                  return mailMsg;
              }
      
              private const string CsvContentType = "application/ms-excel";
      
              private static void ExportToSpreadsheetInternal(Stream tableStream, string name)
              {
      
                  HttpContext context = HttpContext.Current;
                  context.Response.Clear();
                  context.Response.ContentType = CsvContentType;
                  context.Response.AppendHeader(
                      "Content-Disposition"
                      , "attachment; filename=" + name + ".xls");
      
                  tableStream.Position = 0;
                  tableStream.CopyTo(context.Response.OutputStream);
      
                  context.Response.End();
      
              }
      
      
              public static void ExportToSpreadsheet(DataTable table, string name)
              {
                  var stream = DataTableToStream(table);
                  var mailMsg = CreateMail("from@ddd.com",
                      "to@ddd.com",
                      "spread",
                      "the spread",
                      name,
                      stream);
                  //ExportToSpreadsheetInternal(stream, name);
                  // send the mailMsg with SmtpClient (config in your web.config)
                  var smtp = new SmtpClient();
                  smtp.Send(mailMsg);
              }
      

      调用这个方法

       ExportToSpreadsheet(DataTable table, string name)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-17
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        相关资源
        最近更新 更多