好用的Excel档案读取元件for .Net

通常,要存取Excel档案,无非是把Excel档案当作资料库,透过Ole或ODBC存取,不然就是透过Excel的ActiveX元件,开启档案,逐一读取。
这两种方式,在执行效率上似乎都不是很好,尤其是遇到工作表、资料列很多的状况,让人感觉到几乎跟当机没两样....
L 在 CodePlex 上找到了一个for .net的开源 Excel 读取元件,支援Excel 97-2003的xls格式,以及Excel 2007 xlsx档案格式。
透过这个元件,存取Excel资料,显得更加快速、简单。
如果客户要求,应用程式必须要可以读取Excel档、把Excel汇入资料库...等等疑难杂症,程式设计人员存取Excel档案的方式,不外乎把Excel档案当作资料库,透过Ole或ODBC存取,不然就是透过Excel的ActiveX元件,开启档案,逐一读取,执行效率上似乎都不是很好。
CodePlex 上的 ExcelDataReader 元件,支援Excel 97-2003的xls格式,以及Excel 2007 xlsx档案格式。透过这个元件,存取Excel资料,显得更加快速、简单。

以下是一段C# 写的 Console application:

using System;using System.Data;using Excel;using ICSharpCode;using Excel.Core;using ICSharpCode.SharpZipLib;using System.IO;namespace ExcelReader{  class Program  {    public static void Main(string[] args)    {      Console.WriteLine("Welcome to Excel Reader testing program!");      Console.Write("Please enter a full path of an Excel file:");      string strPath = Console.ReadLine();      if(String.IsNullOrEmpty(strPath))        Console.WriteLine("Invalid file path!");      else{if(File.Exists(strPath){          try{            // Excel 97-2003档案格式-->CreateBinaryReader;Excel 2007档案格式-->CreateOpenXmlReader            IExcelDataReader _reader = ExcelReaderFactory.CreateBinaryReader(File.Open(strPath, FileMode.Open,FileAccess.Read));            /* 若设定IsFirstRowAsColumnNames为true,倒入资料时会由第二列开始倒入,第一列的资料将被忽略              * 第一列的内容,会被当做每个栏位的名称,透过SharDevelop执行,会有很奇怪的问题....请爱用Visual Studio...Orz。              * 这个Component处理中文好像有不少问题......            * 如果要将Excel资料,倒入DataSet,IsFirstRowAsColumnNames属性必须在执行 AsDataSet 前设定完成*/            _reader.IsFirstRowAsColumnNames = true;           // 将Excel工作表,依序倒入Dataset,每个工作表生成一个datatable;空白的工作表,将被忽略            DataSet _dataset = _reader.AsDataSet();            foreach(DataTable _table in _dataset.Tables){              for(int i=0;i<_table.Columns.Count;i++)                Console.Write(_table.Columns[i].ColumnName.PadRight(_table.Columns[i].ColumnName.Length+2,Convert.ToChar(" ")));              Console.WriteLine();              foreach(DataRow _row in _table.Rows){                for(int i=0;i<_table.Columns.Count;i++)                  Console.Write(_row[i].ToString().Trim().PadRight(_table.Columns[i].ColumnName.Length+2,Convert.ToChar(" ")));                      Console.WriteLine();      }              Console.WriteLine("\n-------------------------------------------");              // 这两行纯粹用来测试IsFirstRowAsColumnNames属性的差异       Console.WriteLine("Total Columns: "+_table.Columns.Count.ToString());              Console.WriteLine("Total Rows: " + _table.Rows.Count.ToString());              }              _reader.Close();            }            catch(Exception exp){              Console.WriteLine("An error occurs: " + exp.Message);}          }else            Console.WriteLine("Excel file: "+strPath+" not exists!");        }        Console.Write("Press any key to continue . . . ");        Console.ReadKey(true);    }  }}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章