C# 导出Excel

using System;ITPUB个人空间@bq{f
using System.IO;
;nvJ|(z"s0 using Excel;


t4}Lt"Mf"F(E0 namespace Kits.ExcelITPUB个人空间"s+aL$}cy?+K
{ITPUB个人空间7N0y F.M9yoP.x D/}1g
    public class ExcelToolsITPUB 个人空间;QW2L!`%IKvD`
    {ITPUB 个人空间Z3v.Q-f$f qDPL#G
        /// <summary>
+SH3v K$l-e9W0   /// 导出到EXCEL表ITPUB个人空间?Ht/bJ9Y5S
  /// </summary>ITPUB个人空间yn)_0/Ix2/'e
        private static void toExcel(string FileName, string SheetName, System.Data.DataTable dt)ITPUB个人空间-x%N[ R8f
  {ITPUB个人空间H!V]6d?0^
   ApplicationClass myExcel = new ApplicationClass();
K&}&[6~8NA9S$/0    Worksheet worksheet = null;

   string curPath = Directory.GetParent(FileName).FullName;
d_"K1sB;e)}0    if(!Directory.Exists(curPath))ITPUB个人空间,r1W_i*[j
   {ITPUB个人空间1sM:D lQ d#z$~:AG
    Directory.CreateDirectory(curPath);ITPUB个人空间b'E;B6{Y}bF
   }

   if (File.Exists(FileName))
BB$/-oew�` b0    {
qy.N0ir]!f)q0     try
3Uj{c:y0     {ITPUB个人空间0?0]1D3^*C5ulDjz9H
     File.Delete(FileName);ITPUB个人空间~ws6OD�b
    }
,s)c4~_;w4|0     catchITPUB个人空间;} d7s%o!l@i
    {
9R,C'g~'^0B'f"XXA0      throw new Exception("文件操作出错,可能正在运行当前的EXCEL文件!");ITPUB 个人空间@h;e}�s!n5nM+F%K~
    }ITPUB 个人空间Dqc3fK_oH;Qw
   }

   tryITPUB个人空间a4t|'W)@ Eii a
   {ITPUB个人空间!vI x$D O
    object missing = System.Reflection.Missing.Value;

    myExcel.Workbooks.Add(missing);ITPUB 个人空间p8b!M3@bZ:N(P[P
    worksheet = (Worksheet)myExcel.ActiveSheet;ITPUB个人空间p yHJ&Bt1C
    worksheet.Name = SheetName;ITPUB个人空间S o l+v:w
    myExcel.Visible = false;ITPUB个人空间Mi2C-]F+|

    int iRows = dt.Rows.Count;ITPUB个人空间 YK.j8f"MuqC
    int iCol = dt.Columns.Count;

    worksheet.get_Range( worksheet.Cells[1, 1], worksheet.Cells[ iRows+1, iCol] ).NumberFormatLocal = "@";

    for( int i=0; i<iCol; i++)ITPUB个人 空间;_p3g.RcU/u`z
    {ITPUB个人 空间.]*yI;~4okY*ZN
     worksheet.Cells[1,i+1] = dt.Columns[i].ToString();ITPUB个人空间K VpCv b{
    }

    int size = iRows / 1000;
zSP X9s:td0K0     int page = 0;
ga)qE9l2}z0     string[,] rows = null;
-T+QM+Py/X0     for(int i=0; i<iRows; )ITPUB个人空间i-e F,X|?c
    {    
y:iZ*`0Fc"hj']p-g0      if(page<size)
j"id"dU4b0      {ITPUB个人空间 tfPgo/c&e4C]-~ m
      rows = new string[1000,iCol];ITPUB个人空间.IZ7/1G8i�Cc
      for(int count=0;count<1000;count++)
*tGKu3K!C:/+u/]0       {
8?&r^/EK t*{0        for(int j=0; j<iCol; j++)ITPUB个人空间QLD*Z4Fp
       {ITPUB个人空间"S[4W&m!Au9T
        rows[count,j] = dt.DefaultView[i][j].ToString();ITPUB个人空 间C M3@ P4PwN
       }ITPUB个人空 间+F9J:N /Cd4c�N
       i++;
7b0I�O3//c0       }ITPUB个人空间@o4C.X xg2i
      worksheet.get_Range(worksheet.Cells[page * 1000 + 2, 1], worksheet.Cells[ page * 1000 + 1001, iCol]).Value2 = rows;
OR"u!O3F0       page++;
l b!P1Y!LP~Yi0      }ITPUB个人空间+TY^3YVq
     else
rB%nIC%a u0      {ITPUB个人空间OGiP]J
      int left = iRows % 1000;
Qd!r!B Q8[n(gp5SU0       rows = new string[left,iCol];ITPUB个人空间fz(I#m.XE
      for(int count=0;count<left;count++)
"yQsQ X+Z0       {
/tc of!i0        for(int j=0; j<iCol; j++)
0x5L)J A*zb1Z'aB0        {ITPUB个人空间�|1q!Y5bZ
        rows[count,j] = dt.DefaultView[i][j].ToString();ITPUB个人空 间zT%~H r;jqfh
       }ITPUB个人空间 }*]-]7Gsew%_
       i++;ITPUB 个人空间#u7Z4Urfv
      }
^4md%a @2V0       worksheet.get_Range(worksheet.Cells[iRows+2-left, 1], worksheet.Cells[ iRows+1, iCol]).Value2 = rows;
J}4S;OQ j-t7R!f0      }
-h'c8WH PqoI0     }ITPUB个人空间HH!z2O,[ o0[V
    
e l3o8m#mjq7[/T)Bj7KY0     worksheet.SaveAs( FileName, missing, missing, missing, missing, missing, missing, missing, missing, missing);

   }
m1vv8E'[L^T0    catch(Exception ex)ITPUB个人空间6p|]Z7E5d
   {ITPUB个人空间7HqHAG|S,Z�e
    throw new Exception(ex.Message);
z2y!D2[Er0    }
E9Nk%}%Y0    finallyITPUB个人空间Dw&oM^7D9k,R
   {ITPUB个人空间bkD#r8?B~%x
    myExcel.Workbooks.Close();ITPUB个人空间 ]0L }!k]A&x+^
    myExcel.Quit();

    System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);ITPUB个人空间3S@*C2^j t'@MLLy%S
    System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
q+a7Id%b8t y/8Q2/0     worksheet = null;
3d0l1h%GB)]0     myExcel = null;ITPUB个人空间-{ra /D:~"_c6l
    GC.Collect();
ZKzn(Q.f h7Tcc0    }
Ykt3O$E0    
Yq(T7t/_6A0   }

  /// <summary>
bgLfAyL;f*_n0   /// 因为调用EXCEL后,结束时EXCEL进程并没有立即KILL,用这个方法调用可以KILL掉EXCEL
'F7i,Tv7e;f0   /// </summary>ITPUB个人空间P)Ju)rp O4m:/DLs
        public static void callToExcel(string FileName, string SheetName, System.Data.DataTable dt)
O*n0^ p5`d@a0   {ITPUB个人空间hd$A!} sVsb1r$w
   toExcel(FileName, SheetName, dt);ITPUB个人空间P`t#@?3b
   GC.Collect();
2u As2K4T$I0   }ITPUB个人空间[2HL"j@7Ev'y
 }
fI@L)L0 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值