在这件事上,谷歌的表现跟百度一样,打广告的在前面-.-
最靠谱的是这个文章英文
......C#新手,语言描述上会比较小白......
读
遇见了六种包:
ExcelDataReader 好用,很好用。(但是有时候会把数字读出来精度误差,TBD)
Microsoft.Office.Interop.Excel 巨坑!这个包只能在本地运行,无法上云(不用挣扎,我搜了一万遍!),因为有COM Reference(一种闭源的三方包规则),同时就算只在本地运行,也要求本地机器是Windows环境而且安装有正版Office Excel。而且,如果想读取Excel2019之后的版本,需要给这个包选择一种Nuget库中不提供的版本,通过配置COM依赖(配置方法:项目内Dependencies文件夹上右键Add COM Reference选COM搜索Excel选15/16/17看你情况)。另外,使用中,格式转换十分不方便,cell获取出来的Value格式不稳定,而且横坐标从0起,纵坐标却从1起**。**
GemBox.Document 能用,一般,问题是Excel文件大于150行就要收费,我一开始还以为是要我填Excel的正版密钥,搞半天是它这个包本身就收费卖密钥。600$/年
IronXL 也是个收费软件!搞不懂咋三方包还收费。700
OfficeOpenXml 应该是不好用,原因忘了
NPOI 非常好,最强大最复杂的包。 掘金有写法但感觉乱的很 stream = System.IO.File.Open开文件流, reader = ExcelReaderFactory.CreateOpenXmlReader(stream)读文件, worksheets = reader.AsDataSet().Tables工作表,直接当数组用 cellValue = worksheets[i].Rows[0][0].ToString()直接读值
其他没具体试过:
OLEDB 这个包简单看了看,依赖于COM,不能上云,还要依赖数据库
LinqToExcel 依赖于OLEDB,不能上云
Open XML SDK 看起来是直接解读底层Excel编码
注释: C#凡COM相关依赖都无法上云,因为权限不足,管理员也没用。COM是早期C++时代的闭源生态下的包,不可解码,C#和C++之间互相提供COM包给对方用。
xlsm文件基本能当成xlsx文件直接读取。
写
NPOI: DataTable d = new();获取表 System.Reflection.PropertyInfo i = 某个变量.GetType().GetProperties(); 获取某个变量的类型,例如string之类的变量 d.Columns.Add(i.Name, i.PropertyType);预设变量类型 DataRow r = d.NewRow(); 按格式新起一行 r["xxx"] = xxx;挨个单元格写值 d.Rows.Add(r); 压入整行