当前位置:首页 > Windows程序 > 正文

C#导出EXCEL(DataTable导出EXCEL)

2021-05-24 Windows程序

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.IO; using System.Web; using Microsoft.Office.Interop.Excel; using System.Reflection;

/*  * 开发人员:Hisen  * 时间:2008年11月24日  * 功能:将数据导出Excel  *  */ namespace XT.LiTree.Logic {     public class ExcelExport     {         private ExcelExport()         { }         private static ExcelExport _instance = null;

public static ExcelExport Instance         {             get             {                 if (_instance == null) _instance = new ExcelExport();                 return _instance;             }         }

/// <summary>         /// DataTable直接导出Excel,此方法会把DataTable的数据用Excel打开,再自己手动去保存到确切的位置         /// </summary>         /// <param>要导出Excel的DataTable</param>         /// <returns></returns>         public bool DoExport(DataTable dt)         {             Application app = new ApplicationClass();             if (app == null)             {                 throw new Exception("Excel无法启动");             }             app.Visible = true;             Workbooks wbs = app.Workbooks;             Workbook wb = wbs.Add(Missing.Value);             Worksheet ws = (Worksheet)wb.Worksheets[1];

int cnt = dt.Rows.Count;             int columncnt = dt.Columns.Count;

// *****************获取数据********************             object[,] objData = new Object[cnt + 1, columncnt];  // 创建缓存数据             // 获取列标题             for (int i = 0; i < columncnt; i++)             {                 objData[0, i] = dt.Columns[i].ColumnName;             }             // 获取具体数据             for (int i = 0; i < cnt; i++)             {                 System.Data.DataRow dr = dt.Rows[i];                 for (int j = 0; j < columncnt; j++)                 {                     objData[i + 1, j] = dr[j];                 }             }

//********************* 写入Excel******************             Range r = ws.get_Range(app.Cells[1, 1], app.Cells[cnt + 1, columncnt]);             r.NumberFormat = "@";             //r = r.get_Resize(cnt+1, columncnt);             r.Value2 = objData;             r.EntireColumn.AutoFit();

app = null;             return true;         }

/// <summary>         /// DataTable通过流导出Excel         /// </summary>         /// <param>数据源DataSet</param>         /// <param>DataTable中列对应的列名(可以是中文),若为null则取DataTable中的字段名</param>         /// <param>保存文件名(例如:a.xls)</param>         /// <returns></returns>         public bool StreamExport(DataTable dt, string[] columns, string fileName, System.Web.UI.Page pages)         {             if (dt.Rows.Count > 65535) //总行数大于Excel的行数             {                 throw new Exception("预导出的数据总行数大于excel的行数");             }             if (string.IsNullOrEmpty(fileName)) return false;                         StringBuilder content = new StringBuilder();             StringBuilder strtitle = new StringBuilder();             content.Append("<html xmlns:o=‘urn:schemas-microsoft-com:office:office‘ xmlns:x=‘urn:schemas-microsoft-com:office:excel‘ xmlns=‘‘>");             content.Append("<head><title></title><meta http-equiv=‘Content-Type‘ content=\"text/html; charset=gb2312\">");             //注意:[if gte mso 9]到[endif]之间的代码,用于显示Excel的网格线,若不想显示Excel的网格线,,可以去掉此代码             content.Append("<!--[if gte mso 9]>");             content.Append("<xml>");             content.Append(" <x:ExcelWorkbook>");             content.Append("  <x:ExcelWorksheets>");             content.Append("   <x:ExcelWorksheet>");             content.Append("    <x:Name>Sheet1</x:Name>");             content.Append("    <x:WorksheetOptions>");             content.Append("      <x:Print>");             content.Append("       <x:ValidPrinterInfo />");             content.Append("      </x:Print>");             content.Append("    </x:WorksheetOptions>");             content.Append("   </x:ExcelWorksheet>");             content.Append("  </x:ExcelWorksheets>");             content.Append("</x:ExcelWorkbook>");             content.Append("</xml>");             content.Append("<![endif]-->");             content.Append("</head><body><table style=‘border-collapse:collapse;table-layout:fixed;‘><tr>");

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70402.html