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