2017-05-17 51 views
-1

我使用ODBC從C#創建xls/xlsx文件(使用Provider=Microsoft.ACE.OLEDB.12.0)。結果表格有4行(例如)。我用Excel打開文件,添加第5行並保存文件。當試圖從C#通過ODBC讀取它時,我只能得到原來的4行而沒有第5行。看起來ODBC在XLS文件的某處存儲了行數,後來只讀取了它們,而沒有從Excel或LibreOffice輸入新數據。這是已知的問題,我能解決嗎?如果我在Excel中創建新的電子表格,它的所有行都從C#中讀取。ODBC驅動程序無法讀取在Excel中添加的行

編輯:我發現了一些有用的信息。當首次從C#/ ODBC創建XLS文件時,有2個表格(工作表)。如果表格名稱是TABLE,DataTable sheets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)將包含sheets.Rows[0] ==「TABLE」和sheets.Rows[1] ==「TABLE $」。 Excel將只顯示一張工作表「TABLE」。編輯後,只有「TABLE $」表中存在更改(第5行)。

+0

檢查電子表格中的特定行值也許有不必要的額外字符,這就是爲什麼它拒絕保存。 –

+0

如果沒有看到任何代碼,就很難提供幫助。您是否在ODBC連接上執行刷新:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.odbcconnection.refresh.aspx – PaulF

回答

-1

我想我發現了這個問題。看來由Excel創建的內部電子表格名稱最後有「$」符號。由ODBC生成的工作表名稱是CREATE TABLE中給出的確切字符串。另一方面,Excel(和LibreOffice)僅爲TABLETABLE$表單顯示一張表。如果我在Excel中編輯表格,保存更改後僅在TABLE$。其他表TABLE未更改。當我做SELECT * FROM [TABLE]時,結果來自原始的ODBC生成的表,沒有進行Excel更改。現在我枚舉XLS文件中的可用工作表,如果第一個工作表名稱不以「$」結尾且工作表大於1,則將「$」添加到第一個工作表名稱並打開正確的表格。我想ODBC連接字符串可能包含選項以「$」的工作 - 結尾的表...

0

如果是的話,你是否通過代碼添加了第五行,你能否分享一下你用來做同樣的代碼行。您的代碼中可能存在以下問題。

  1. 保存提交沒有正確完成。
  2. 在讀取文件連接之前刷新沒有完成。
+0

第5行是在Excel中添加的,而不是在C#中。然後,帶有ODBC的C#只讀取前4行。我知道ODBC具有緩存功能,但不知道緩存是在HDD /臨時文件還是在XLS文件中。從C#存儲的每一行然後在C#中讀取。 – i486