分享

读写excel

 COPY&PASTE 2009-10-05

2.不利用office组件,而是用TextWriter的某些子类编写器将字节流写入文件。

这个提供一个类库的使用吧,就不发代码了4百多行,可以到下面的网址去下。项目是vs2003做的要转换下然后把RKLib.ExportData.dll复制到bin下引用(或直接引用)然后就可以直接用了

导出到excel的代码: RKLib.ExportData.Export objExport = new RKLib.ExportData.Export("Win");
                                     objExport.ExportDetails(dt, Export.ExportFormat.Excel, saveFileDialog1.FileName);

这个还提供了web导出和CSV格式导出。

 

网址:http://www./KB/aspnet/ExportClassLibrary.aspx

 

 

利用office组件。这类代码网上很多。

代码1:

///////////////////////////////////////////////////////////////////////////
//Purpose:Excel文件导入导出,需引用Microsoft Excel 11.0 Object Library (需安装excel)
//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;
     }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约