当前位置:软件学习 > Excel >>

使用开源免费类库在.net中操作Excel

 

自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍。

 

主要找到以下类库:

 

MyXls(http://sourceforge.net/projects/myxls/)

Koogra(http://sourceforge.net/projects/koogra/)

ExcelLibrary(http://code.google.com/p/excellibrary/)

ExcelPackage(http://excelpackage.codeplex.com/)

EPPlus(http://epplus.codeplex.com/)

LinqToExcel(http://code.google.com/p/linqtoexcel/)

NetOffice(http://netoffice.codeplex.com/) 需安装Office Excel

从1-6的类库均不需要安装Office,不使用Office COM组件;而NetOffice需要安装Office,它提供的是与Office COM组件差不多的功能。

 

注:本文仅简单演示读取与创建Excel。

 

 

 

准备测试代码

 

首先,为这些类库准备一些测试代码,用于之后的测试。

 

aspx主要代码如下:

 

1 <asp:FileUpload ID="FileUpload1" runat="server" /> 

 

2 <asp:Button ID="Button1" runat="server" Text="上传Excel" 

 

3     onclick="Button1_Click" /> 

 

4     <asp:Button ID="Button2" runat="server" Text="下载Excel" 

 

5     onclick="Button2_Click" /> 

 

6 <asp:GridView ID="GridView2" runat="server"> 

 

7 </asp:GridView>

 

aspx.cs主要代码如下:

 

01 private void RenderToBrowser(MemoryStream ms, string fileName) 

 

02 { 

 

03     if (Request.Browser.Browser == "IE") 

 

04         fileName = HttpUtility.UrlEncode(fileName); 

 

05     Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName); 

 

06     Response.BinaryWrite(ms.ToArray()); 

 

07 } 

 

08  

 

09 protected void Button1_Click(object sender, EventArgs e) 

 

10 { 

 

11     if (FileUpload1.HasFile) 

 

12     {//读取上传的文件绑定到GridView 

 

13         GridView1.DataSource = ReadByXXX(FileUpload1.FileContent); 

 

14         GridView1.DataBind(); 

 

15     } 

 

16 } 

 

17  

 

18 protected void Button2_Click(object sender, EventArgs e) 

 

19 { 

 

20     DataTable table = new DataTable(); 

 

21     table.Columns.Add("aa", typeof(string)); 

 

22     table.Columns.Add("bb", typeof(string)); 

 

23     table.Columns.Add("cc", typeof(string)); 

 

24     for (int i = 0; i < 10; i++) 

 

25     { 

 

26         string a = DateTime.Now.Ticks.ToString(); 

 

27         Thread.Sleep(1); 

 

28         string b = DateTime.Now.Ticks.ToString(); 

 

29         Thread.Sleep(1); 

 

30         string c = DateTime.Now.Ticks.ToString(); 

 

31         Thread.Sleep(1); 

 

32         table.Rows.Add(a, b, c); 

 

33     } 

 

34     //从DataTable创建Excel并下载 

 

35     RenderToBrowser(CreateByXXX(table), "test.xls"); 

 

36 }

 

 

 

MyXls

 

MyXls支持Office Excel 97-2003格式(Biff8格式),但目前并不支持formula即公式;网上流传的支持2007是错误的说法。

 

使用它还需要注意的是,它与Office PIA一样,索引号是从1开始的。

 

另外不得不说的是,它的构造函数、Save方法、属性中的FileName让人看的眼花瞭乱,无所适从呐-_-。

 

主要使用的类型都位于org.in2bits.MyXls空间下,主要测试代码如下:

 

01 MemoryStream CreateByMyXls(DataTable table) 

 

02 { 

 

03     XlsDocument doc = new XlsDocument(); 

 

04     Worksheet sheet = doc.Workbook.Worksheets.Add("Sheet1"); 

 

05     int colCount = table.Columns.Count; 

 

06     for (int i = 1; i <= colCount; i++) 

 

07     { 

 

08         sheet.Cells.Add(1, i, table.Columns[i - 1].Caption); 

 

09     } 

 

10  

 

11     int k = 2; 

 

12     foreach (DataRow row in table.Rows) 

 

13     { 

 

14         for (int i = 1; i <= colCount; i++) 

 

15         { 

 

16             sheet.Cells.Add(k, i, row[i - 1]); 

 

17         } 

 

18         k++; 

 

19     } 

 

20     MemoryStream ms = new MemoryStream(); 

 

21     doc.Save(ms); 

 

22     return ms; 

 

23 } 

 

24  

 

25 DataTable ReadByMyXls(Stream xlsStream) 

 

26 { 

 

27     XlsDocument doc = new XlsDocument(xlsStream); 

 

28     DataTable table = new DataTable(); 

 

29     Worksheet sheet = doc.Workbook.Worksheets[0]; 

 

30     int colCount = sheet.Rows[1].CellCount; 

 

31     int rowCount = sheet.Rows.Count; 

 

32  

 

33  

&n

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,