把DataTable导出为纯Excle文件

     // 把DataTable导出为纯Excle文件
    
// 参数:DataTable, 文件服务器端物理全路径,每个sheet最多行数,Excel2003及以前版本最多允许6万5千块。
     public   static   bool  ExportToExcel(DataTable dt,  string  filename,  int  RowsPerSheet)
    {
        
string  strConn  =   " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " ;
        strConn 
=  strConn  +  filename  +   " ; " ;
        strConn 
=  strConn  +   " Extended Properties=Excel 8.0; " ;

        
string  strSql  =   "" ;
        System.Data.OleDb.OleDbConnection conn 
=   null ;
        
int  intSheet  =   0 ;
        
int  intCounts  =   0 ;
        
try
        {
            conn 
=   new  System.Data.OleDb.OleDbConnection(strConn);
            conn.Open();

            System.Data.OleDb.OleDbCommand cmd 
=   new  System.Data.OleDb.OleDbCommand();
            cmd.Connection 
=  conn;

            System.Data.OleDb.OleDbDataAdapter oda 
=   new  System.Data.OleDb.OleDbDataAdapter(cmd);
            oda.InsertCommand 
=  cmd;

            DataTable dtTmp 
=  dt.Clone();

            
string  strColDef  =   "" ;
            
foreach  (DataColumn dc  in  dt.Columns)
            {
                
if  (dc.DataType  ==   typeof (Decimal))
                    strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  Numeric " ;
                
else   if  (dc.DataType  ==   typeof (DateTime))
                    strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  DateTime " ;
                
else
                    strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  VarChar " ;
            }

            
foreach  (DataRow dr  in  dt.Rows)
            {
                
if  (intCounts  ==   0 )
                {
                    
#region  add Excel sheet

                    cmd.Parameters.Clear();

                    
// 新增Excel工作表
                    intSheet  +=   1 ;
                    strSql 
=   " Create Table [Sheet "   +  intSheet.ToString()  +   " ] " ;
                    strSql 
+=   "  ( "   +  strColDef  +   " " ;
                    cmd.CommandText 
=  strSql;
                    cmd.ExecuteNonQuery();

                    
#endregion

                    
#region  Insert SQL

                    oda.InsertCommand.Parameters.Clear();
                    
// Insert SQL
                    strSql  =   "" ;
                    
foreach  (DataColumn dc  in  dt.Columns)
                    {
                        strSql 
+=  (strSql.Equals( "" ?   " Insert Into [Sheet "   +  intSheet.ToString()  +   " $] Values( "  :  " , " +   " ? " ;

                        
if  (dc.DataType  ==   typeof (Decimal))
                            oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.Numeric);
                        
else   if  (dc.DataType  ==   typeof (DateTime))
                            oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.Date);
                        
else
                            oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.VarChar);

                        oda.InsertCommand.Parameters[
" @ "   +  dc.ColumnName].SourceColumn  =  dc.ColumnName;
                    }
                    strSql 
+=   " ) " ;

                    oda.InsertCommand.CommandText 
=  strSql;

                    
#endregion
                }

                dtTmp.Rows.Add(dr.ItemArray);
                intCounts 
+=   1 ;

                
if  (intCounts  ==  RowsPerSheet)
                {
                    intCounts 
=   0 ;
                    oda.Update(dtTmp); 
// Insert Data to excel
                    dtTmp.Rows.Clear();
                }

            }

            
if  (dtTmp.Rows.Count  >   0 )
                oda.Update(dtTmp);  
// Insert Data to excel

            
return   true ;

        }
        
catch  (Exception ex)
        {
            
return   false ;
        }
        
finally
        {
            
if  (conn  !=   null )
            {
                conn.Close();
            }
        }
    }

    
public   static   bool  ExportToExcel(DataSet ds,  string  filename,  bool  sheetNmaeIsTableName)
    {
        
string  strConn  =   " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " ;
        strConn 
=  strConn  +  filename  +   " ; " ;
        strConn 
=  strConn  +   " Extended Properties=Excel 8.0; " ;

        
string  strSql  =   "" ;
        System.Data.OleDb.OleDbConnection conn 
=   null ;
        
int  intSheet  =   0 ;
        
string  strSheetName  =   "" ;

        
try
        {
            conn 
=   new  System.Data.OleDb.OleDbConnection(strConn);
            conn.Open();

            System.Data.OleDb.OleDbCommand cmd 
=   new  System.Data.OleDb.OleDbCommand();
            cmd.Connection 
=  conn;

            System.Data.OleDb.OleDbDataAdapter oda 
=   new  System.Data.OleDb.OleDbDataAdapter(cmd);
            oda.InsertCommand 
=  cmd;

            
foreach  (DataTable dt  in  ds.Tables)
            {

                DataTable dtTmp 
=  dt.Clone();

                
string  strColDef  =   "" ;
                
foreach  (DataColumn dc  in  dt.Columns)
                {
                    
if  (dc.DataType  ==   typeof (Decimal))
                        strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  Numeric " ;
                    
else   if  (dc.DataType  ==   typeof (DateTime))
                        strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  DateTime " ;
                    
else
                        strColDef 
+=  (strColDef.Equals( "" ?   ""  :  " , " +   " [ "   +  dc.ColumnName  +   " ] "   +   "  VarChar " ;
                }

                
#region  add Excel sheet

                cmd.Parameters.Clear();

                
// 新增Excel工作表
                 if  (sheetNmaeIsTableName)
                {
                    strSql 
=   " Create Table [ "   +  dt.TableName  +   " ] " ;
                    strSheetName 
=  dt.TableName;
                }
                
else
                {
                    intSheet 
+=   1 ;
                    strSql 
=   " Create Table [Sheet "   +  intSheet.ToString()  +   " ] " ;
                    strSheetName 
=   " Sheet "   +  intSheet.ToString();
                }
                strSql 
+=   "  ( "   +  strColDef  +   " " ;
                cmd.CommandText 
=  strSql;
                cmd.ExecuteNonQuery();

                
#endregion

                
#region  Insert SQL

                oda.InsertCommand.Parameters.Clear();
                
// Insert SQL
                strSql  =   "" ;
                
foreach  (DataColumn dc  in  dt.Columns)
                {
                    strSql 
+=  (strSql.Equals( "" ?   " Insert Into [ "   +  strSheetName  +   " $] Values( "  :  " , " +   " ? " ;

                    
if  (dc.DataType  ==   typeof (Decimal))
                        oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.Numeric);
                    
else   if  (dc.DataType  ==   typeof (DateTime))
                        oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.Date);
                    
else
                        oda.InsertCommand.Parameters.Add(
" @ "   +  dc.ColumnName, System.Data.OleDb.OleDbType.VarChar);

                    oda.InsertCommand.Parameters[
" @ "   +  dc.ColumnName].SourceColumn  =  dc.ColumnName;
                }
                strSql 
+=   " ) " ;

                oda.InsertCommand.CommandText 
=  strSql;

                
#endregion

                
foreach  (DataRow dr  in  dt.Rows)
                {
                    dtTmp.Rows.Add(dr.ItemArray);
                }

                
if  (dtTmp.Rows.Count  >   0 )
                    oda.Update(dtTmp);  
// Insert Data to excel
            }

            
return   true ;

        }
        
catch  (Exception ex)
        {
            
return   false ;
        }
        
finally
        {
            
if  (conn  !=   null )
            {
                conn.Close();
            }
        }
    }

 

转载于:https://www.cnblogs.com/luqingfei/archive/2010/11/12/1875503.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值