使用开源免费类库在.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 ,