Tag: ms jet ace

在使用Excel 2013对其进行操作后,使用ACE读取.xls(97-2003)文件

我们一直在使用Access Database Engine 2010(V.14.0.4763.1000)从c#(.Net framework 4.0)中读取Excel(97-2003).xls文件,并取得了很长时间的成功。 但是,现在,在使用Excel 2013打开文件并以相同格式(97-2003 .xls)再次保存文件后,我们无法再读取这些文件。 它给了我们以下错误: 外部表格不是预期的格式。 当我们使用Excel 2007或2010打开和保存文件时,这种情况不会发生,只能在2013年。我们使用以下连接string来读取文件: Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0;HDR=YES 其中{0}被文件名和pathreplace。 看来Excel 2013以某种ACE不理解的方式破坏了97-2003文件结构。 有什么办法可以解决这个问题吗? 要清楚的是,我们需要读取的文件格式总是.xls(97-2003),我们不想读取.xlsx文件(我们可以做到这一点没有问题),但我们需要使用(97- 2003)与其他系统兼容。 编辑: 我做了一个非常简单的testing程序来说明,你可以在这里得到它: https : //www.dropbox.com/s/1ftw3emilnbuw6t/ExcelTest.rar .rar文件包含: ExcelReadingTest.exe(本程序) Program.cs(源代码) SavedFromExcel2007.xls(以97-2003格式从Excel 2007保存的示例Excel文件) SavedFromExcel2013.xls(与Excel 2013以97-2003格式保存的Excel文件相同) 要运行该示例,请保存c:\ temp中的所有文件,然后在cmd控制台上键入: C:\>cd c:\temp (Enter) C:\temp>ExcelReadingTest SavedFromExcel2007.xls (Enter) 你会得到: 1 Hello 2 World 3 Reading 4 Excel Press Enter… 如果你input: […]

通过OLEDB更新Excel字段删除定义的单元名称

我使用OLEDB来更新Excel文件,这是我遇到麻烦的一个更新示例: OleDbConnection myConnection; OleDbCommand myCommand = new OleDbCommand(); myConnection = new OleDbConnection( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\my_template.xslm; Extended Properties=\"Excel 12.0 Macro;HDR=No;\"" ); myConnection.Open(); myCommand.Connection = myConnection; string sql = "Update [Sheet1$D16:D16] SET F1 = 'Some Text Here'"; myCommand.CommandText = sql; myCommand.ExecuteNonQuery(); 该更新正常工作,更新我想要的单元格。 但是,它也更新了以前定义的单元名称。 公式中使用的单元格名称。 你可以看到这个图像的问题: 任何人都面临过这个问题? 有什么build议么 ?

在Excel单元格中有大量文本的ACE OLEDB“外部表格不是预期的格式”

我正在尝试使用System.Data.OleDb和Microsoft ACE OLEDB提供程序读取碰巧有一个非常大的文本单元格(大约8900个字符)的.xls文件。 我无法控制.xls文件的内容。 尝试.Open() OleDbConnection时,我得到以下exception: Exception thrown: 'System.Data.OleDb.OleDbException' in System.Data.dll Additional information: External table is not in the expected format. 我已经最小化.xls文件,似乎文本单元格是什么导致exception。 我有安装在x64操作系统上的MS Office 2010 x86。 我已经尝试了以下所有内容,但都没有解决问题: ACE 12.0 x86 ACE 12.0 x64 ACE 15.0 x32 registry调整设置TypeGuessRows = 0 连接stringIMEX = 1 连接string扩展属性=“Excel 8.0;” 连接string扩展属性=“Excel 12.0;” 从我的研究看来,旧的JET提供程序用于截断字段为255个字符。 我不能让ACE读取文件而不抛出exception。

使用带有ACE OLEDB的Excel工作表上的“插入到”SQL语句与列名失败

所以,我想在如何将数据存储到工作表中,并希望使用SQL OLEDB提供的Excel和标准的SQL语句来遵守规则。 插入到列名不起作用,但至less对我来说。 一些代码演示了这个问题。 期望在这里显示的这两种forms工作W3学校SQL INSERT INTO声明 Option Explicit Sub MinimalCompleteVerifiableExample() 'Tools->References "Microsoft ActiveX Data Objects 2.8 Library" Dim wsNew As Excel.Worksheet Set wsNew = ThisWorkbook.Worksheets.Add wsNew.Cells(1, 1) = "TimeStamp" wsNew.Cells(1, 2) = "Path" Dim oConn As ADODB.Connection Set oConn = New ADODB.Connection Debug.Assert UBound(Split(ThisWorkbook.Name, ".")) > 0 '* Workbook needs to be saved oConn.Open […]

ADO与Delphi XE中的XLSX文件

这里的问题是与Excel的ADO连接 – 这仍然是在Dephi XE环境中读取/写入excel文件的标准方式吗? 当使用ACEOLEDB驱动程序(ACE 12)进行读写时,我们会遇到多个问题,这包括 用标签读取单元格不返回结果 导出网格时出现“无效浮点”。 我们也注意到,在微软的网站上有许多版本的ACE 12驱动程序(通过Access数据库驱动程序可执行文件),并且它们每个都与Delphi有不同的问题。 考虑到这些事情, 在这一点上使用Excel的ADO不好? 是否有其他人有这些问题,你做了什么来解决它们(除了使用XLS文件而不是XLSX)?

更新Excel工作表:无法更新“(expression式)”; 字段不可更新

好的,我是.NET新手,在使用ACE.OLEDB连接更改Excel工作表中的更新值时遇到了问题。 我不断收到错误:无法更新'(expression式)'; 字段不可更新。 所以我的工作表的结构如下所示: Symbol AssetClass MarketValue SharePrice ABC formula $1000 $10.50 MSFT formula $2000 $12 公式字段包含一个公式,该公式在另一个Excel工作簿中查找符号,然后获取其资产类别。 问题是它不允许我更新该字段。 我将列的格式改为文本,看是否是问题,但没有改变。 我不知道为什么我不能像添加文本一样添加公式 这里是我的代码如下: Private m_sConn1 As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PATH_Workbook1 & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;MAXSCANROWS=3;READONLY=FALSE\""" Dim conn As New OleDbConnection(m_sConn1) conn.Open() Dim cmd As New OleDbCommand() cmd.Connection = conn Dim da As New OleDbDataAdapter("Select * […]

ACE oleDb驱动程序无法处理巨大的Excel文件

ACE OLEDB驱动程序是否有更大文件的已知问题? 我正在使用下面的代码来检索400Mb xls文件中的工作表 public string[] GetWorkSheets() { var connectionString = "Provider=Microsoft.ACE.OleDb.12.0; data source=c:\filepath\filename.xls; Extended Properties=\"Excel 8.0;IMEX=1;HDR=YES;\""; DataTable dataTable; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open();//Exception thrown here for large files dataTable = connection.GetSchema("Tables"); } int lenght = dataTable.Rows.Count; string[] worksheets = new string[lenght]; for (int i = 0; i < lenght; i++) { […]

连接到Excel VBA中的只读Access数据库

我一直是一个长期访问者stackoverflow,但这是我的第一个问题。 我试图查询用户只有只读权限的文件夹中的Access 2010数据库。 strDBPath = <full path of accdb> Set myConn = New ADODB.Connection myConn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Mode=Read; Data Source=" & strDBPath Set myRS = New ADODB.Recordset myRS.ActiveConnection = myConn myConn.Open行给出了“当前正在使用的文件”错误。 如果我将accdb移动到用户可以编写的文件夹中,代码运行良好。 在此先感谢您的任何build议!

如何防止VB6中的Microsoft ACE和JET复制Excel电子表格中第一行的数据?

我正在处理一个用VB6编写的遗留应用程序,它读取Excel电子表格并将它们插入数据库。 它大部分工作,但如果电子表格中的数据没有在第一行开始,则第一个数据行将被复制。 例如,电子表格中的前3行是空白的,前四行数据如下所示: _| A | B | C | D | E | F | G | 1| | | | | | | | 2| | | | | | | | 3| | | | | | | | 4| 99 |Text1|Text2|Text3|Text4|Text5| 77 | 应用程序连接到Excel电子表格并使用以下代码读取它: Public Function obtainConnectionExcel(sql_conn, uid) As Variant Dim […]

检测来自Excel的varchar列中的值0x

我有一个SQL表格,从Excel中通过SQLBulkCopy填充。 副本是使用Microsoft ACE驱动程序完成的。 我有一个特定的文件的问题 – 当它被加载到SQL,一些列(在Excel中显示为空)包含一个奇怪的值。 例如,运行这个sql: SELECT CONVERT(VARBINARY(10),MyCol), LEN(MyCol) FROM MyTab 会返回 0x, 0 即 – 将列中的值转换为varbinary显示的东西,但做长度的varchar显示没有长度。 我意识到,所显示的值是hex值的词干,但其奇怪的是它到达那里,以及检测有多困难。 很明显,我可以清除Excel中的单元格,但是我真的需要自动检测,因为最终用户会遇到同样的问题。 当数据得到处理时,会导致问题进一步恶化。 这个问题很难从最终的症状中追溯到源头上的这个问题。 除了上面的转换到varbinary到SSMS输出,我还没有想出一种方法来检测这些值,在Excel中或通过SQL脚本来删除它们。 有任何想法吗?