C#导入导出数据到Excel的通用类代码

December 17, 2023
测试
测试
测试
测试
13 分钟阅读

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;
 }
 
}</pre> 

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多