C#导入导出数据到Excel的通用类代码详解编程语言

Excel文件导入导出,需引用Microsoft Excel 11.0 Object Library

/////////////////////////////////////////////////////////////////////////// 
//Purpose:Excel文件导入导出,需引用Microsoft Excel 11.0 Object Library 
//Author: Dangmy 
//Date: 2007-03-09 
//Version: 1.0 
/////////////////////////////////////////////////////////////////////////// 
  
public class ExcelIO 
{ 
     private int _ReturnStatus; 
     private string _ReturnMessage; 
  
     /// <summary> 
     /// 执行返回状态 
     /// </summary> 
     public int ReturnStatus 
     { 
         get{return _ReturnStatus;} 
     } 
  
     /// <summary> 
     /// 执行返回信息 
     /// </summary> 
     public string ReturnMessage 
     { 
         get{return _ReturnMessage;} 
     } 
  
     public ExcelIO() 
     { 
     } 
  
     /// <summary> 
     /// 导入EXCEL到DataSet 
     /// </summary> 
     /// <param name="fileName">Excel全路径文件名</param> 
     /// <returns>导入成功的DataSet</returns> 
     public DataSet ImportExcel(string fileName) 
     { 
         //判断是否安装EXCEL 
         Excel.Application xlApp=new Excel.ApplicationClass();           
         if(xlApp==null) 
         { 
             _ReturnStatus = -1; 
             _ReturnMessage = "无法创建Excel对象,可能您的计算机未安装Excel"; 
             return null; 
         }       
  
         //判断文件是否被其他进程使用            
         Excel.Workbook workbook;                
         try 
         { 
             workbook = xlApp.Workbooks.Open(fileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0); 
         } 
         catch 
         { 
             _ReturnStatus = -1; 
             _ReturnMessage = "Excel文件处于打开状态,请保存关闭"; 
             return null; 
         }       
          
         //获得所有Sheet名称 
         int n = workbook.Worksheets.Count; 
         string[] SheetSet = new string[n]; 
         System.Collections.ArrayList al = new System.Collections.ArrayList(); 
         for(int i=1; i<=n; i++) 
         { 
             SheetSet[i-1] = ((Excel.Worksheet)workbook.Worksheets[i]).Name; 
         } 
          
         //释放Excel相关对象 
         workbook.Close(null,null,null);         
         xlApp.Quit(); 
         if(workbook != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); 
             workbook = null; 
         } 
         if(xlApp != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); 
             xlApp = null; 
         }   
         GC.Collect(); 
          
         //把EXCEL导入到DataSet 
         DataSet ds = new DataSet();         
         string connStr = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = "+ fileName +";Extended Properties=Excel 8.0" ; 
         using(OleDbConnection conn = new OleDbConnection (connStr)) 
         { 
             conn.Open(); 
             OleDbDataAdapter da; 
             for(int i=1; i<=n; i++) 
             { 
                 string sql = "select * from ["+ SheetSet[i-1] +"$] "; 
                 da = new OleDbDataAdapter(sql,conn); 
                 da.Fill(ds,SheetSet[i-1]);  
                 da.Dispose(); 
             }               
             conn.Close(); 
             conn.Dispose(); 
         }               
         return ds; 
     } 
  
     /// <summary> 
     /// 把DataTable导出到EXCEL 
     /// </summary> 
     /// <param name="reportName">报表名称</param> 
     /// <param name="dt">数据源表</param> 
     /// <param name="saveFileName">Excel全路径文件名</param> 
     /// <returns>导出是否成功</returns> 
     public bool ExportExcel(string reportName,DataTable dt,string saveFileName) 
     { 
         if(dt==null) 
         { 
             _ReturnStatus = -1; 
             _ReturnMessage = "数据集为空!"; 
             return false;           
         } 
  
         bool fileSaved=false; 
         Excel.Application xlApp=new Excel.ApplicationClass();   
         if(xlApp==null) 
         { 
             _ReturnStatus = -1; 
             _ReturnMessage = "无法创建Excel对象,可能您的计算机未安装Excel"; 
             return false; 
         } 
  
         Excel.Workbooks workbooks=xlApp.Workbooks; 
         Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); 
         Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
         worksheet.Cells.Font.Size = 10; 
         Excel.Range range; 
  
         long totalCount=dt.Rows.Count; 
         long rowRead=0; 
         float percent=0; 
  
         worksheet.Cells[1,1]=reportName; 
         ((Excel.Range)worksheet.Cells[1,1]).Font.Size = 12; 
         ((Excel.Range)worksheet.Cells[1,1]).Font.Bold = true; 
  
         //写入字段 
         for(int i=0;i<dt.Columns.Count;i++) 
         { 
             worksheet.Cells[2,i+1]=dt.Columns[i].ColumnName; 
             range=(Excel.Range)worksheet.Cells[2,i+1]; 
             range.Interior.ColorIndex = 15; 
             range.Font.Bold = true; 
  
         } 
         //写入数值 
         for(int r=0;r<dt.Rows.Count;r++) 
         { 
             for(int i=0;i<dt.Columns.Count;i++) 
             { 
                 worksheet.Cells[r+3,i+1]=dt.Rows[r][i].ToString(); 
             } 
             rowRead++; 
             percent=((float)(100*rowRead))/totalCount; 
         } 
          
         range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[dt.Rows.Count+2,dt.Columns.Count]); 
         range.BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin,Excel.XlColorIndex.xlColorIndexAutomatic,null); 
         if( dt.Rows.Count > 0) 
         { 
             range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic; 
             range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle =Excel.XlLineStyle.xlContinuous; 
             range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight =Excel.XlBorderWeight.xlThin; 
         } 
         if(dt.Columns.Count>1) 
         { 
             range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex =Excel.XlColorIndex.xlColorIndexAutomatic; 
             range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous; 
             range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin; 
         } 
  
         //保存文件 
         if(saveFileName!="") 
         { 
             try 
             { 
                 workbook.Saved =true; 
                 workbook.SaveCopyAs(saveFileName); 
                 fileSaved=true; 
             } 
             catch(Exception ex) 
             { 
                 fileSaved=false; 
                 _ReturnStatus = -1; 
                 _ReturnMessage = "导出文件时出错,文件可能正被打开!/n"+ex.Message; 
             } 
         } 
         else 
         { 
             fileSaved=false; 
         }           
      
         //释放Excel对应的对象 
         if(range != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(range); 
             range = null; 
         } 
         if(worksheet != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); 
             worksheet = null; 
         } 
         if(workbook != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); 
             workbook = null; 
         } 
         if(workbooks != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); 
             workbooks = null; 
         }               
         xlApp.Application.Workbooks.Close(); 
         xlApp.Quit(); 
         if(xlApp != null) 
         { 
             System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); 
             xlApp = null; 
         } 
         GC.Collect(); 
         return fileSaved; 
     } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/11113.html

(0)
上一篇 2021年7月19日 10:41
下一篇 2021年7月19日 10:41

相关推荐

发表回复

登录后才能评论