.Net平台下的第三方Excel类库对比

简介: 转自 http://topming.com/636.html 最近的一个项目中需要在DataTable和Excel之间做相互转换,Excel需是真正的xls,而不是CVS或者TVS或HTML写 法的xls。

 

转自 http://topming.com/636.html

最近的一个项目中需要在DataTable和Excel之间做相互转换,Excel需是真正的xls,而不是CVS或者TVS或HTML写 法的xls。考虑到运行程序的机子上不一定专有Office,就没有用Excel程序,否则的话,装个程序还得装个office,那就又得考虑版权了,太 麻烦了。一共使用了三个不同免费的Library,分别是

myXls(http://sourceforge.net/projects/myxls/)、

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

NPOI(http://npoi.codeplex.com/

三个的处理速度都非常的快,对比使用后发现这三者的功能并不一样:

myXls 这是一个免费开源的library,侧重于Excel的输出。可以设置到单个Cell,但读取功能很弱。

Koogra与myXls恰恰相反,是一个非常好用Excel读取类库,可是在测试过程中发现Koogra读不了myXls输出的XLS文件!不知道是不是自己没搞清两个类库的原因,总之觉得有点遗憾。

NPOI是.Net平台下的POI,目前稳定版是一个能够生成真正的Excel文件并实现读写的开源项目,项目地址是http://npoi.codeplex.com/。功能有输入输出,公式运算,单元格的高级样式等等,其中包含的类库有:

NPOI.Util 1.2.1 Basic assistant class library
NPOI.POIFS 1.2.1 OLE2 format read/write library
NPOI.DDF 1.2.1 Drawing format read/write library
NPOI.SS 1.2.1 Formula evaluation library
NPOI.HPSF 1.2.1 Summary Information and Document Summary Information read/write library
NPOI.HSSF 1.2.1 Excel BIFF format read/write library

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
//引用
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
 
namespace OracleKity
{
     class DataTableExcel
     {
         public bool DataTableToExcel(System.Data.DataTable dtSource, string filePath)
         {
             try
             {
                 //文档仅写入一个sheet
                 //建立一个workbook
                 HSSFWorkbook workbook = new HSSFWorkbook();
                 System.Data.DataTable dt = dtSource;
                 //建立sheet
                 HSSFSheet sheet = workbook.CreateSheet( "sheet1" );
                 //为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
                 HSSFCellStyle textStyle = workbook.CreateCellStyle();
                 textStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat( "@" );
 
                 //用column name 作为列名
                 List columns = new List();
                 for ( int colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
                 {
                     string name = dt.Columns[colIndex].ColumnName;
                     HSSFCell cell = sheet.CreateRow(0).CreateCell(colIndex);
                     cell.SetCellValue(name);
                     cell.CellStyle = textStyle;
                     columns.Add(name);
                 }
 
                 //建立内容列
                 for ( int row = 0; row < dt.Rows.Count; row++)
                 {
                     DataRow dr = dt.Rows[row];
                     for ( int col = 0; col < columns.Count; col++)
                     {
                         string data = dr[columns[col]].ToString();
                         HSSFCell cell = sheet.CreateRow(row + 1).CreateCell(col);
                         cell.SetCellValue(data);
                         cell.CellStyle = textStyle;
                     }
                 }
                 //写Excel
                 FileStream file = new FileStream(filePath, FileMode.OpenOrCreate);
                 workbook.Write(file);
                 file.Close();
                 return true ;
             }
             catch
             {
                 return false ;
             }
         }
         public System.Data.DataTable ReadExcelToDataTable( string filePath)
         {
             //打开要读取的Excel
             FileStream file = new FileStream(filePath, FileMode.Open);
             //读入Excel
             HSSFWorkbook workbook = new HSSFWorkbook(file);
             file.Close();
             HSSFSheet sheet = workbook.GetSheetAt(0);
             //建立一个新的table
             DataTable dtNew = new DataTable(); ;
             HSSFRow row = sheet.GetRow(0);
             //读取取第0列作为column name
             for ( int columnIndex = 0; columnIndex < row.LastCellNum; columnIndex++)
             {
                 DataColumn dc = new DataColumn(row.GetCell(columnIndex).ToString());
                 dtNew.Columns.Add(dc);
             }
             int rowId = 1;
             //第一列以后为资料,一直读到最后一行
             while (rowId <= sheet.LastRowNum)
             {
                 DataRow newRow = dtNew.NewRow();
                 //读取所有column
                 for ( int colIndex = 0; colIndex < dtNew.Columns.Count; colIndex++)
                 {
                     newRow[dtNew.Columns[colIndex]] = sheet.GetRow(rowId).GetCell(colIndex).ToString();
                 }
                 dtNew.Rows.Add(newRow);
                 rowId++;
             }
             return dtNew;
 
         }
 
     }
}

如果正好要做EXCEL的输入输出,不妨考虑一下使用哪一个Library。

目录
相关文章
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
814 12
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
388 9
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
528 3
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
898 2
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
405 1
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
494 0
|
开发框架 .NET API
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
617 0
|
XML 开发框架 数据格式
.Net Core 开发框架,支持多版本的类库
.Net Core 开发框架,支持多版本的类库
450 0