精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”盗用锐英源原创内容。
最近开发企业管理系统MIS系统用的C#,需要对数据进行Excel导入,以前总是用Excel的库导入,总是要引用Excel的库,并且里面用的变体变量也不太好理解,用其它的开源库也觉得庞大过于复杂,这一段找到SejExcelExport项目,虽然里面也是用了类似XML的技术,但是简单的读写问题不大,这里推荐给大家,本文原文来自codeproject,codeproject看不懂,找锐英源软件。
介绍
本技巧通过直接访问ooxml格式的数据,提供了在Excel工作表中访问(读写)数据而不使用任何外部模块的代码。此外,我们还尽了很大努力使其尽可能快,最大限度地减少内存分配的数量,并尽可能使其可用。
您可以在https://github.com/jsegarra1971/SejExcelExport.
出身背景
从Excel工作表中读取/写入数据有不同的技术,其中一些使用数据库范例(DAO、odbc、..),另一些使用类似Excel的对象路径(工作表、单元格…),还有一些使用Excel本身(COM、Interop…)。这些技术中的每一种都有许多库,隐藏了肮脏的细节,并使它们的使用相当简单。
这些技术有其优点和缺点,但其中大多数都需要额外的软件(例如:Excel、Microsoft.ACE.OLEDB等),通常这不是一个大问题,因为大多数软件都是开源的、免费的或非常便宜的,并且易于访问。
然而,当涉及到这项工作时,这些工具中的大多数在内存消耗方面都相当“自由”。这对于小表格(少于5000行)通常不是问题,但对于大表格(超过50000行),它会让您的系统崩溃。
读工作表
读表格很简单,你只需要:
ExcelReader myReader=new ExcelReader("this_is_my_excel_file.xlsx"); // Open the file myReader.Process(OnExcelCell);
获取实际值:
?void OnExcelCell(char Column, int RowNumber, string value) { if (Column=='#') Console.Write("Row: "+RowNumber); else Console.Write("Column: "+Column+" Value: "+value); }
目前,仅处理“Z”之前的第一个工作表和列。然而,克服这些限制非常简单(请参见ExcelReader.cs)。
编写工作表
要将数据写入工作表,我们需要两件事:
该数据将作为IDataReader的实现提供。
一个模板,它将以Excel文件的形式出现,其中包含实际数据的占位符。这些占位符只是以和星号“*”开头的名称。通过将此占位符与FIELDNAME匹配,可以检索数据源中的值。
使用此模板:
ROW1是固定的,将出现在输出文件中
ROW2将保存第一条数据记录的字段“姓名”、“姓氏”和“年龄”
ROW3将保存第二条数据记录的字段“姓名”、“姓氏”和“年龄”
然后重复直到EOF。
ExcelWriter t = new ExcelWriter("Template.xlsx"); // This is the template MySampleData data = new MySampleData(); // This is the IDataReader t.Export(data,"output_file.xlsx");
性能
很难更快地读/写Excel文件。包括一个示例,它生成一个包含100000行的Excel文件,然后读取所有100000行。这两项操作都在不到4秒的时间内完成,运行在相当过时的系统上(2009年iMac上的Windows 7虚拟机)