簡體   English   中英

C# 讀取 excel 並仍然從空白單元格獲取數據

[英]C# reading excel and still getting data from blank cells

我有一個為工作而制作的工具。 每周有 5-20 個文件用於某個進程失敗,我必須找到它們的作業 ID 並重新運行它們。

我在 C# 中制作了一個工具,該工具在 Excel 電子表格中獲取失敗文件的名稱(如果你覺得憤世嫉俗,我們將其稱為失敗文件電子表格,或 FFS),然后使用不同的 ZC1D81AF58319DEDF44 電子表格交叉引用它們。作業 ID,並在終端中顯示結果。 它使用相當簡單的OledDbDataAdapter代碼讀取 FFS:

public static DataTable GetDataFromExcel(string filename, string sheetName)
{
    using(var oledb = new OleDbConnection(CONN_STR.Replace("<FILENAME>", filename).Replace("<HDR>", "no"))
    {
         var result = new DataSet();
         new OleDbDataAdapter($"SELECT * FROM [{sheetName}]", oledb).Fill(result);
         return result.Tables[0];
    }
}

該工具大部分工作正常。 它與另一個 excel 表交叉引用,我得到了我的工作 ID,我可以繼續我的任務。

但是有一個小問題,那就是,通常在運行該工具時,當它從 FFS 讀取時,有時它會返回空行。 就像上周我有 7 個文件,然后這周我刪除了這些文件,粘貼到 5 個文件中,然后我的工具將顯示這 5 個文件的作業 ID,但也顯示兩個空白,好像它仍在讀取這兩個額外的前一周的行。 但是,如果我在 Excel 中制作一個新的空白電子表格,插入我失敗的文件並覆蓋保存文件,我根本沒有這個問題,讓我認為這是一個 Excel 問題而不是 ZD7EFA19FBE7D3972FD5ADB6024 問題。

如果我刪除單元格的內容,OleDbDataAdapter 仍然會讀取這些單元格,是否有原因? 刪除內容后是否仍然存在空白字符或其他隱藏字符? 我的意思是我可以在代碼中修復它,然后說“如果值是空格或空值,請不要寫出來”,但我想知道為什么甚至會讀取空白單元格。

這只是一個小錯誤,它並沒有阻止我做我的工作,這個工具只不過是幫助完成每周任務的個人工具。 但我仍然想知道為什么那些有內容但又被刪除的單元格仍然被閱讀。

Excel 有點古怪。 如果您正在手動編輯“失敗的文件電子表格”(FFS),並且正如您所說,您在現有的 7 行上粘貼了 5 行,那么您仍然可以在您期望的數據之后讀取那些額外的行(如果有任何格式)在細胞上。 為避免這種情況,在 Excel select 中,整個工作表的單元格范圍並右鍵單擊 select “清除內容”。

公平地說,正如您所提到的,我認為在代碼中修復它並跳過 DataTable 中為空的行會更簡單。 或者這里有一個 SO 帖子顯示如何從 DataTable 中刪除空行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM