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

news/2024/11/6 9:17:54

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

 

转载于:https://www.cnblogs.com/leebokeyuan/p/6626389.html


http://www.niftyadmin.cn/n/3780511.html

相关文章

thread.sleep后没有恢复执行_关于执行和解

执行和解知多少1.执行和解协议是什么东东&#xff1f;答&#xff1a;执行和解协议是指在执行过程中&#xff0c;执行当事人达成和解意向并在签署后提交法院确认后的合同。对喽&#xff0c;执行和解协议就是一份合同。可以签署后提交法法院&#xff0c;也可以记录在法庭笔录中。…

监控之美--prometheus配置文件动态管理

Prometheus是一套开源的监控、报警解决方案&#xff0c;是由SoundCloud公司开发的&#xff0c;从 2012 年开始编写代码&#xff0c;再到 2015 年 开源以来&#xff0c;该项目有非常活跃的社区和开发人员&#xff0c;目前在全世界最大的男友社区上已经有了1.1w多star&#xff1b…

网易--赶去公司

终于到周末啦&#xff01;小易走在市区的街道上准备找朋友聚会&#xff0c;突然服务器发来警报,小易需要立即回公司修复这个紧急bug。假设市区是一个无限大的区域&#xff0c;每条街道假设坐标是(X&#xff0c;Y)&#xff0c;小易当前在(0&#xff0c;0)街道&#xff0c;办公室…

计算机原理南开在线作业2020,南开大学-2020春学期《计算机原理》在线作业

南开大学-2020春学期《计算机原理》在线作业20春学期( 1709、 1803、 1809、 1903、 1909、2003)《计算机原理》在线作业 --------------------------- 单选题 1.1、连接计算机与计算机之间的总线属于 ()总线A.内 B.系统 C.通信 D.都不对正确答案 :C 2.某数在计算机中用 8421BC…

CAS算法的定义

为什么80%的码农都做不了架构师&#xff1f;>>> CAS (compare and swap)包含三个参数,CAS(V,E,N),V表示要更新的变量,E表示期望的值,N表示新值,仅当VE的时候才会将V的值设置为N,如果V值和E值不同,则证明其他线程做了更新,则当前线程什么也不做. Java自旋锁应用-原子…

计算机检测与维修课程设计总结,(计算机课程设计总结报告.ppt

(计算机课程设计总结报告首先&#xff0c;我初步了解了C#语言的编程方法和原则&#xff0c;并学会了编写C#程序。其次&#xff0c;使我更深层次的理解到C#语言是一种面向对象的语言&#xff0c;具有可视化编程的特点且代码具有可移植等特点。本次课程设计是实现一个UDP即时通讯…

string类型的json串取值_json之C++静态解析

所谓静态解析&#xff0c;就是将待解析字段&#xff0c;在C中提前定义&#xff0c;格式类似于结构体&#xff0c;直接将解析出的内容放入字段中&#xff0c;这样和将字段内容解析到容器中相比&#xff0c;取值只有O(1)的时间复杂的&#xff0c;无需构造容器&#xff0c;解析无类…

公务员计算机试题和答案,公务员考试:计算机专业试卷综合试题(含参考答案)...

公务员考试&#xff1a;计算机专业试卷综合试题(含参考答案)一、单项选择题..joxue.1、关于随机存取存储器(RAM)功能的叙述&#xff0c;正确的是&#xff1a;(D)..joxue.A&#xff0e;只能读&#xff0c;不能写 B&#xff0e;断电后信息不消失..joxue.C&#xff0e;读写速度比硬…