我xls/xlsx
使用 ODBC(带有Provider=Microsoft.ACE.OLEDB.12.0
)从 C#创建文件。结果表有 4 行(例如)。我用 Excel 打开文件,添加第 5 行并保存文件。当尝试通过 ODBC 从 C# 读取它时,SELECT * FROM [table]
我只得到原始的 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 将只显示一张“表格”。编辑后更改(第 5 行)仅存在于“TABLE$”表中。
我想我发现了问题。Excel 创建的内部电子表格名称的末尾似乎有“$”符号。ODBC 生成的工作表名称是CREATE TABLE
. 另一方面,Excel(和 LibreOffice)只显示一个工作表TABLE
和工作TABLE$
表。如果我在 Excel 中编辑表格,保存后更改仅在TABLE$
. 另一张纸TABLE
没有变化。当我这样做时SELECT * FROM [TABLE]
,结果来自没有 Excel 更改的原始 ODBC 生成表。现在我枚举 XLS 文件中的可用工作表,如果第一个工作表名称不以“$”结尾并且工作表大于 1,我将“$”添加到第一个工作表名称并打开正确的表格。我想 ODBC 连接字符串可能包含使用“$”结尾的表的选项...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句