我有一张2010 Excel file
横跨34864 rows
和1387 columns
. 我正在尝试Access 2010
使用导入向导将其导入,但是当我选择该工作表时,Access 没有响应,几秒钟后给了我一个
“来自外部数据库驱动程序的意外错误 (1)”
这是由于纸张的大小还是单元格中的某些东西阻止了它的工作。来自同一文件的其他工作表导入没有问题。
安装安全补丁KB4041681后,您可能会遇到此错误。请参阅此MSDN条目。就我而言,用帮助替换Microsoft.Jet.OLEDB.4.0
提供者。Microsoft.ACE.OLEDB.12.0
查看 Access 2010 规范: http: //office.microsoft.com/en-us/access-help/access-2010-specifications-HA010341462.aspx。
在您的情况下,它可能是列数,因此请先尝试导入少于 255 的列。此外,它可能是列或数据类型中数据的大小(将文本导入数字等)
我也刚刚遇到过这个问题,并找到了一个非常简单易行的解决方案。我注意到我的电子表格有一个自定义名称,所以我决定看看这是否导致了问题。我将其更改为“Sheet1”的默认名称,果然,它有效!
下载并安装 Microsoft Access Database Engine 2010 Redistributable,然后修改 Microsoft Excel 中的数据库连接字符串以使用 ACE 作为提供程序。
更改(示例):
Provider=Microsoft.Jet.OLEDB.4.0
至:
Provider=Microsoft.ACE.OLEDB.12.0.
Microsoft 正在制定解决方案,并将在即将发布的版本中提供更新。
用这个
OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\a.XLS;Extended Properties=Excel 8.0;")
而不是这个
OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\a.XLS;Extended Properties=Excel 8.0;")
将您的 Excel 工作表保存为“逗号分隔”的 .CSV 文件,然后将其作为文本文件上传。对我来说,这很好用。
问题是在 .xls(x) 中存在所有类型的布局问题。将其转换为 .CSV 会删除所有与布局相关的标记并将其转换为“原始”数据。
一切顺利!
按照 RHiggins 的回答:
就我而言,Jet OleDb.4.0 抛出此错误 (oledbconnection.open()),因为工作簿 (.xls) 中的工作表名称太长。
解决此问题时对我有用的一个解决方案是在进行导入和导出时打开正在执行导入/导出的 Excel 文件。
该问题似乎是由阻止数据事务在 CLOSED .xls 文件和其他外部数据库应用程序之间发生的补丁引起的。打开 excel 文件可以解决这个问题。
下面的一些示例代码示例突出了 VBA 的有效和无效:
失败
wbTarget.SaveAs strFilename, xlExcel8
wbTarget.Close
ExportSheetToDB strFilename, strSheetName, "tblTemp"
作品
wbTarget.SaveAs strFilename, xlExcel8
ExportSheetToDB strFilename, strSheetName, "tblTemp"
wbTarget.Close
Excel 和 Access 之间似乎存在错误。在某些情况下,我必须打开 Excel 文件,单击保存,然后关闭文件。然后我可以将它毫无错误地导入Access。
我还没有为 VBA 自动化找到解决方法。
在我的情况下,电子表格链接到另一个电子表格。我正在导入原始工作表的子集。我创建了一个新工作表并将数据逐列复制到记事本,然后删除链接到新工作表。链接中有一些东西导致了问题。
顺便说一句:这是一组数据,因为我已经完成了从这个电子表格到这个数据库的导入序列超过 50 次。将数据减半适用于前半部分(较大的)数据,但不适用于后半部分。
就我而言(我有同样的错误),问题是我将Access DB 存储在空间不足的网络驱动器上(没有足够的可用空间来完成导入)。我释放了空间并压缩了数据库;该错误没有再次出现。
我有完全相同的错误。该电子表格是从另一个软件 (SAP) 创建的。由于它不是由 Office 创建的,因此 Excel 无法读取它(!?!)。我必须在 Excel 中打开它们,保存它,然后在 Access 中加载它,它就可以工作了!作为最坏的情况,假设您有几十个文件,您可以在导入之前通过 VBA 代码打开和关闭它们。
嗨,我在导入 .xlsb 文件时也遇到了这个错误。之后,我将内容复制到另一个 xlsx 文件,然后导入此 xlsx 文件。
我遇到了同样的问题,在 Windows7 中获得安全更新后,发生了这个错误。我们有太多的 excel 文件来执行打开/关闭操作,所以我决定尝试其他方式。
当 Access 正常工作时返回一个还原点:在我的情况下它不起作用。软件配置的唯一变化是安全更新,似乎安全更新仍然会导致问题。
减少行、列等:它对我不起作用;访问尝试访问的第一个文件有 10k 行,将此行减少到 3 不是解决方案。
尝试修改连接字符串:它对我不起作用,也不是很合理;连接已经工作多年,为什么突然停止了?在某些情况下会,但这次不会。
在我的情况下,卸载最新的安全更新是可行的。这是已卸载的安全更新。
祝你好运解决。
已解决 Windows 7:
卸载安全更新 KB4041681 和 KB4041678(与 Excel 和 Jet/ACE 提供程序有关)
从 XLSB 文件导入时出现此错误,将文件另存为 XLSX 文件,然后导入,应该可以
发现的另一个问题是,如果将 excel 文件保存为二进制 excel 工作表,只需将其重新保存为 excel 工作簿并且加载正常。