乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 200|回复: 10

提取Excel数据

[复制链接]

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2018-3-28 19:28:19 | 显示全部楼层 |阅读模式
多年来,我一直使用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
}
}

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

16

主题

506

帖子

6

银币

中流砥柱

Rank: 25

铜币
570
发表于 2018-3-29 13:40:23 | 显示全部楼层
考虑到人们经常使用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,这很容易)。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2018-3-29 14:28:25 | 显示全部楼层
Excel在数据存储方面确实存在不足。 除了访问速度之外,用户确实有可能隐藏/删除行,列和其他重要部分。 后者也可能是 Access 数据库的问题。 是的,它们对人类来说更容易使用,但需要考虑手动更改的频率以及需要存储多少数据。 如果是“蓝月亮一次”或相对少量的数据,则更以数据为中心且通常支持的格式(如 XML)是更好的选择。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2018-3-29 15:43:52 | 显示全部楼层
巧合!我只是把脚趾浸回C#池中以读取一些Excel数据,因此本文将派上用场。谢谢!
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-3-30 15:06:42 | 显示全部楼层
冬青香蕉认为OLEDB方法是快速的parse->parse->gnupt->漂亮的输出。
但是,. csv是针对表格类型数据(静态数据;不会有太大变化的东西。比如,天气数据之类的。)如果你有更多的动态数据,那么数据库就更好了。IMO保留旧天气数据的数据库是愚蠢的(额外的偷听几乎没有好处)。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2018-3-30 17:49:50 | 显示全部楼层
如果我必须处理csv文件,我会使用http://joshclose.github.io/CsvHelper/
对于使用excel文件,我使用https://www.gemboxsoftware.com/spreadsheet.免费版功能齐全,但限制为每页150行和5页<在我看来,两者都非常快速且易于使用。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2018-3-31 08:51:07 | 显示全部楼层
我从第一个链接收到了“已验证欺诈页面/威胁源”警告。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2018-4-2 06:39:38 | 显示全部楼层

奇怪,什么软件会发出警告?这里是github页面。https://github.com/joshclose/csvhelper
回复

使用道具 举报

194

主题

592

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1380
发表于 2018-4-2 09:06:38 | 显示全部楼层
趋势科技。当我在工作时,如果我不再点击任何网址邀请IT警察到我的办公桌,你会原谅我的。
(希望这是虚惊一场)
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2018-4-5 11:43:52 | 显示全部楼层
我都去过了,还没有IT警察出现。
LOL
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 10:56 , Processed in 0.160958 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表