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();
        }
  • 相关阅读:
    WriteFile函数
    良好的动态内存申请与释放
    只需一条命令,快速在Windows 10上关闭Linux
    盘点程序员过年最怕被问的问题:薪资问题首当其冲,对象问题紧追其后
    程序员为什么是吃青春饭,而不是像医生律师一样越老越值钱?
    Linux网络配置的三种方法,手把手教你,一看就会!
    应届程序员VS往届程序员:当面对HR和领导时,此时的内心活动是这样的...
    MySql数据在磁盘上到底是怎么存储的?被存储的数据怎么查找?
    如何写出高质量的代码?优秀的程序员都是这样做的
    哼!MySQL 8.0不讲武德,给我挖坑!
  • 原文地址:https://www.cnblogs.com/diose/p/7213846.html
Copyright © 2011-2022 走看看