通过附件Excel文件xls发送数据集数据电子邮件(不创建Excel文件)C#

通过附件Excel文件xls发送数据集数据电子邮件(不创建Excel文件)C#,excel,file,email,encoding,attachment,Excel,File,Email,Encoding,Attachment,我想在C#中通过电子邮件excel文件附件发送数据集数据,但我不想实际创建excel文件。这可以通过MemoryStream实现,但我不能 另一个问题是我想设置Excel文件的编码类型,因为数据可能是俄语或土耳其语特殊字符 请帮帮我 这是我的示例代码 <!-- language: c# --> var response = HttpContext.Response; response.Clear(); response.Charset = "utf-8"; response.Con

我想在C#中通过电子邮件excel文件附件发送数据集数据,但我不想实际创建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# -->

var response=HttpContext.response;
response.Clear();
响应。Charset=“utf-8”;
response.ContentEncoding=System.Text.Encoding.Default;
GridView excelGridView=新建GridView();
excelGridView.DataSource=InfoDataSet;
excelGridView.DataBind();
excelStringWriter=新StringWriter();
HtmlTextWriter htw=新的HtmlTextWriter(excelStringWriter);
excelGridView.RenderControl(htw);
byte[]ExcelData=emailEncoding.GetBytes(excelStringWriter.ToString());
MemoryStream ms=新的MemoryStream(ExcelData);
mailMessage.Attachments.Add(新的附件(ms,excelFileName,“应用程序/ms excel”);
这是您的解决方案

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

下面是另一个简单易用的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);

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

    }