zoukankan      html  css  js  c++  java
  • asp.net c# 网页 导出excel 多表格 多个sheet

        /// <summary>
        ///可导出多个sheet表
        /// </summary>
        /// <param name="Author">作者</param>
        /// <param name="Company">公司</param>
        /// <param name="dt">多个DataTable</param>
        /// <param name="fileName">文件名</param>
        public static void PushExcelToClientEx(string Author, string Company, DataTable[] dt, string fileName)
        {
            if (!fileName.Contains(".xls"))
            {
                fileName += ".xls";
            }
    
            StringBuilder sbBody = new StringBuilder();
            StringBuilder sbSheet = new StringBuilder();
    
            sbBody.AppendFormat(
                    "MIME-Version: 1.0
    " +
                    "X-Document-Type: Workbook
    " +
                    "Content-Type: multipart/related; boundary="-=BOUNDARY_EXCEL"
    
    " +
                    "---=BOUNDARY_EXCEL
    " +
                    "Content-Type: text/html; charset="gbk"
    
    " +
                    "<html xmlns:o="urn:schemas-microsoft-com:office:office"
    " +
                    "xmlns:x="urn:schemas-microsoft-com:office:excel">
    
    " +
                    "<head>
    " +
                    "<xml>
    " +
                    "<o:DocumentProperties>
    " +
                    "<o:Author>{0}</o:Author>
    " +
                    "<o:LastAuthor>{0}</o:LastAuthor>
    " +
                    "<o:Created>{1}</o:Created>
    " +
                    "<o:LastSaved>{1}</o:LastSaved>
    " +
                    "<o:Company>{2}</o:Company>
    " +
                    "<o:Version>11.5606</o:Version>
    " +
                    "</o:DocumentProperties>
    " +
                    "</xml>
    " +
                    "<xml>
    " +
                    "<x:ExcelWorkbook>
    " +
                    "<x:ExcelWorksheets>
    "
                   , Author
                   , DateTime.Now.ToString()
                   , Company);
    
            foreach (var d in dt)
            {
                string gid = Guid.NewGuid().ToString();
                sbBody.AppendFormat("<x:ExcelWorksheet>
    " +
                    "<x:Name>{0}</x:Name>
    " +
                    "<x:WorksheetSource HRef="cid:{1}"/>
    " +
                    "</x:ExcelWorksheet>
    "
                    , d.TableName.Replace(":", "").Replace("\", "").Replace("/", "").Replace("?", "").Replace("*", "").Replace("[", "").Replace("]", "").Trim()
                    , gid);
    
    
                sbSheet.AppendFormat(
                 "---=BOUNDARY_EXCEL
    " +
                 "Content-ID: {0}
    " +
                 "Content-Type: text/html; charset="gbk"
    
    " +
                 "<html xmlns:o="urn:schemas-microsoft-com:office:office"
    " +
                 "xmlns:x="urn:schemas-microsoft-com:office:excel">
    
    " +
                 "<head>
    " +
                 "<xml>
    " +
                 "<x:WorksheetOptions>
    " +
                 "<x:ProtectContents>False</x:ProtectContents>
    " +
                 "<x:ProtectObjects>False</x:ProtectObjects>
    " +
                 "<x:ProtectScenarios>False</x:ProtectScenarios>
    " +
                 "</x:WorksheetOptions>
    " +
                 "</xml>
    " +
                 "</head>
    " +
                 "<body>
    "
                 , gid);
    
                sbSheet.Append("<table border='1'>");
                sbSheet.Append("<tr style='background-color: #CCC;'>");
                for (int i = 0; i < d.Columns.Count; i++)
                {
                    sbSheet.AppendFormat("<td style='vnd.ms-excel.numberformat: @;font-weight:bold'>{0}</td>", d.Columns[i].ColumnName);
                }
                sbSheet.Append("</tr>");
                for (int j = 0; j < d.Rows.Count; j++)
                {
                    sbSheet.Append("<tr>");
                    for (int k = 0; k < d.Columns.Count; k++)
                    {
                        sbSheet.AppendFormat("<td style='vnd.ms-excel.numberformat: @;'>{0}</td>", Convert.ToString(d.Rows[j][k]));
                    }
                    sbSheet.Append("</tr>");
                }
                sbSheet.Append("</table>");
                sbSheet.Append("</body>
    " +
                    "</html>
    
    ");
            }
    
            StringBuilder sb = new StringBuilder(sbBody.ToString());
    
            sb.Append("</x:ExcelWorksheets>
    " +
                "</x:ExcelWorkbook>
    " +
               "</xml>
    " +
                "</head>
    " +
                "</html>
    
    ");
    
            sb.Append(sbSheet.ToString());
    
            sb.Append("---=BOUNDARY_EXCEL--");
    
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.Buffer = true;
    
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gbk");
            HttpContext.Current.Response.Write(sb.ToString());
            HttpContext.Current.Response.End();
        }
  • 相关阅读:
    linux rcu
    linux下的进程、网络、性能监控命令
    使用optimizely做A/B测试
    使用logstash收集日志的可靠性验证
    LAMP-HTTPD的安装全步骤
    Iptables Save
    linux-ftp
    远程桌面验证问题,函数错误-windows
    ESXIroot密码重置
    centos or windows 双系统
  • 原文地址:https://www.cnblogs.com/diose/p/7213846.html
Copyright © 2011-2022 走看看