使用非连续范围从 Excel 导入 SQL?
Posted
技术标签:
【中文标题】使用非连续范围从 Excel 导入 SQL?【英文标题】:SQL Import from Excel using non-contiguous range? 【发布时间】:2011-04-09 19:38:54 【问题描述】:我有一些 Excel 电子表格我无法更改,因为它们被其他部门使用,并且他们将来不会更改它们。它们是具有 500 多列 (A:TH) 的 .xlsm。我正在尝试将它们导入 64 位机器上的 SQL Server 2008,但我遇到了很大的问题。所有形式的 Excel 导入似乎都会将我选择的列截断为前 255 列。
最终将有 5 个单独的表来使用 1 个公共键来存储这些数据。我可以编写一个简短的 VBA 脚本来将 Excel 中的数据排序到源表的排列列中,但我想先询问以下是否可能...
这工作正常并选择列 A:IV
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\NEW.xlsm',
'SELECT * FROM [Details Sheet$A:IV]')
有没有一种聪明的方法可以用不连续的范围做类似的事情,比如
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\NEW.xlsm',
'SELECT * FROM [Details Sheet$C:C,IW:LZ]')
即。拿起 C 列和附加列 IW:LZ 中的键?对我来说,问题是使用全范围 C:LZ 和 SELECT [ID],[THIS],[THAT] FROM
等不适用于该范围内超过 255 列的字段,非常烦人!
【问题讨论】:
我不是这方面的专家,所以无法明确回答。我尝试将工作表和范围名称更改为工作表名称,即“...FROM [Details Sheet$] ...”并且没有更好的结果。它适用于字段 255,但是当我尝试读取第 256 个字段时,我得到:“运行时错误 3265 - 在与请求的名称或序号相对应的集合中找不到项目。” 【参考方案1】:您是否尝试过使用 SSIS 导入 Excel 文件?它对数据类型可能非常挑剔,但我从未遇到过无法使用脚本组件解决的限制。
它被设计成一个高性能的 ETL 工具,用于完成您想要完成的工作。如果您是新手,请查看importing the entirety of Wikipedia as XML 上的这篇文章到多个表格中。
请注意,您可能需要安装额外的 Office 驱动程序才能读取 Excel 2007 格式,尤其是在 64 位计算机上。
【讨论】:
我在家里尝试了所有驱动程序都没有成功,在任何合理的时间内工作都是无用的。导入向导很糟糕,所以使用我自己的代码截断为 255 列。甚至 MS/Jet/ACE 也对驱动程序版本感到困惑!(14.0/12.0) 感觉 Excel 在正确处理 Excel03 之后的文件格式方面“处于困境”。我编写了 VBA 来在源头排列数据,每张表少于 255 列。基本和肮脏,但它的工作原理! SSIS 在家里为我工作,但同样的工作有有趣的设置和权限,使我无法始终如一地使用。以上是关于使用非连续范围从 Excel 导入 SQL?的主要内容,如果未能解决你的问题,请参考以下文章
从 Excel 到 SQL Server 的数据导入无法导入所有数据
使用导入导出向导将数据从 Excel 导入 Sql Server 时,如何更改列的默认 varchar 255?