提取Excel数据
多年来,我一直使用Excel interop将电子表格转储到对象数组中,但最近我不得不熟悉与Access数据库连接的OLEDB提供商,并意识到有更好的方法。这打破了关于读取性能的旧方法公共静态数据集ExtractData(字符串路径)
{
试试
{
数据集数据=新数据集(路径:GetFileNameWithoutExtension(路径))
字符串连接字符串=string.Format(
“Provider=Microsoft.ACE.OLEDB.12.0;数据源={0};扩展属性=\”Excel 12.0 Xml;HDR=否;IMEX=1\“;”
路径)
使用(var-Connection=new-OleDbConnection(ConnectionString))
{
连接.打开()
var命令=新的OleDbCommand(“,连接)
//获取Excel文件中的所有工作表。
DataTable Sheets=Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null)
//遍历所有工作表以获取数据。
<div>foreach(数据行在Sheets.Rows中)</div>
{
字符串SheetName=Row[“TABLE_NAME”]。ToString()
如果(!SheetName.EndsWith($)
继续
//从工作表中获取所有行。
命令。CommandText=“从[”+SheetName+“]中选择*”
DataTable Sheet=newdataTable()
表。TableName=SheetName
OleDbDataAdapter=新的OleDbDataAdapter(命令)
适配器填充(表)
数据表添加(表)
}
连接.关闭()
返回数据
}
}
捕获(System.Exception e)
{
抛出e.InnerException
}
}
**** Hidden Message ***** 考虑到人们经常使用Excel工作表存储少量数据的现实,在不与AutoCAD app并行运行Excel app的情况下访问Excel工作表中的数据是有意义的。这是我过去一直做的事情,直到微软在Windows操作系统上停止了ship Jet Engine(当微软Access 2007问世时,它停止使用Jet引擎,改用微软Access DB Engine)
使用MS Access DB Engine的最大问题是,它必须安装(具有管理员权限),并且必须显式为32位或64位。即使计算机本身安装了MC Access,它也可能是32位版本。如果AutoCAD为64位,则必须安装64位Access DB引擎。如果用户碰巧使用了较旧的MS Office/Access(2007/2010),则可能无法在同一台计算机中使用32位MS Access和64位Access DB引擎。由于现在是2018年,这可能不再是什么大不了的事了,但仅凭管理员权限的额外安装就有点麻烦了
我会考虑使用OpenXml访问存储在*.xls/*中的数据。如果不需要在工作流中的Excel应用程序中实际打开图纸文件,xlsx将是一种更好的方法。这样,您的外接程序DLL只有一个额外的DLL。还有很多基于OpenXml的第三方工具或工具包,其中许多是免费的,非常容易使用(但我总是直接使用OpenXml,这很容易)。 Excel在数据存储方面确实存在不足。 除了访问速度之外,用户确实有可能隐藏/删除行,列和其他重要部分。 后者也可能是 Access 数据库的问题。 是的,它们对人类来说更容易使用,但需要考虑手动更改的频率以及需要存储多少数据。 如果是“蓝月亮一次”或相对少量的数据,则更以数据为中心且通常支持的格式(如 XML)是更好的选择。 巧合!我只是把脚趾浸回C#池中以读取一些Excel数据,因此本文将派上用场。谢谢! 冬青香蕉认为OLEDB方法是快速的parse->parse->gnupt->漂亮的输出。
但是,. csv是针对表格类型数据(静态数据;不会有太大变化的东西。比如,天气数据之类的。)如果你有更多的动态数据,那么数据库就更好了。IMO保留旧天气数据的数据库是愚蠢的(额外的偷听几乎没有好处)。 如果我必须处理csv文件,我会使用http://joshclose.github.io/CsvHelper/
对于使用excel文件,我使用https://www.gemboxsoftware.com/spreadsheet.免费版功能齐全,但限制为每页150行和5页<在我看来,两者都非常快速且易于使用。 我从第一个链接收到了“已验证欺诈页面/威胁源”警告。
奇怪,什么软件会发出警告?这里是github页面。https://github.com/joshclose/csvhelper 趋势科技。当我在工作时,如果我不再点击任何网址邀请IT警察到我的办公桌,你会原谅我的。
(希望这是虚惊一场) 我都去过了,还没有IT警察出现。
LOL
页:
[1]
2