繁体   English   中英

ODBC驱动程序无法读取Excel中添加的行

[英]ODBC driver cannot read rows added in Excel

我使用ODBC(使用Provider=Microsoft.ACE.OLEDB.12.0 )从C#创建xls/xlsx文件。 结果表有4行(例如)。 我用Excel打开文件,添加第5行并保存文件。 当尝试使用SELECT * FROM [table] ODBC通过C#读取它时,我只得到原始的4行,而不是5行。 似乎ODBC在XLS文件中的某处存储了行数,以后只读取它们,而没有从Excel或LibreOffice输入新数据。 这是已知问题,我可以解决吗? 如果我在Excel中创建新的电子表格,则其所有行均从C#中读取。

编辑:我发现了一些有用的信息。 首次从C#/ ODBC创建XLS文件时,有2个表(表格)。 如果表名是TABLE,则DataTable sheets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)将包含sheets.Rows[0] ==“ TABLE”和sheets.Rows[1] ==“ TABLE $”。 Excel将仅显示一张工作表“ TABLE”。 编辑后,更改(第5行)仅存在于“ TABLE $”表中。

如果是,您是否按代码添加第五行,请您分享用于执行此操作的代码行。 您的代码中可能存在以下问题。

  1. 保存提交未正确完成。
  2. 在读取文件连接之前,刷新未完成。

我想我找到了问题。 似乎由Excel创建的内部电子表格名称的末尾带有“ $”符号。 ODBC生成的工作表名称是CREATE TABLE给出的确切字符串。 另一方面,Excel(和LibreOffice)对于TABLETABLE$表仅显示一个工作TABLE 如果我在Excel中编辑表,则保存后所做的更改仅在TABLE$ 另一张TABLE保持不变。 当我执行SELECT * FROM [TABLE] ,结果来自原始ODBC生成的表,而没有Excel更改。 现在,我枚举XLS文件中的可用工作表,如果第一个工作表名称不以“ $”结尾并且工作表大于1,则在第一个工作表名称中添加“ $”并打开正确的表。 我想ODBC连接字符串可能包括用于以“ $”结尾的表的选项...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM