前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#导入导出数据到Excel的通用类代码

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

原创
作者头像
用户8671053
修改2021-11-03 10:09:47
7840
修改2021-11-03 10:09:47
举报
文章被收录于专栏:码农的生活码农的生活

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

代码语言:javascript
复制
///////////////////////////////////////////////////////////////////////////
//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> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档