2015-11-04 68 views
0

我還沒有找到一種方法來標準化來自Excel與合併單元格的DataTable。當我從該Excel中獲取DataTable時,只有第一個單元格具有該值,其他單元格爲空。DataTable標準化空白單元格

此數據表的一個例子是:

enter image description here

和預期的結果:

enter image description here

總結:空白細胞應與下一個單元的上面的值完成有一個值,因爲Excel合併單元格發生了什麼。

我使用Excel.dll來讀取這個Excel,沒有提供單元格的自動填充,所以這就是爲什麼我在C#中搜索一個方法。

我想,邏輯應該是:如果一個單元格是空白的,使用上面的單元格作爲一個值。邏輯看起來很清晰,但我試圖讓代碼應用它的問題。

這是一個示例,但在最後,我正在尋找一種方法來做到這一點,只要列或行具有數據表。

編輯: 感謝您的快速反饋。 附加到目前爲止只有一列和錯誤,因爲沒有照顧第一行和最後一行,但是這個想法...我試圖實現的是有一個方法任何數量的cols和行(如果cols是用名字固定的話可以確定,然後如果我有更多的專欄我會適應)。

 private void NormalizeDataTable(DataTable dtRawTable) 
    { 

     DataTable dtFinalized = new DataTable(); 
     dtFinalized.Columns.Add("Col1", typeof(String)); 

     string previousValue = ""; 

     for (int index = 0; index <= dtRawTable.Rows.Count; index++) 
     { 
      DataRow dr = dtFinalized.NewRow(); 



      if (index != 0 || index == dtRawTable.Rows.Count -1) 
      { 

       if (dtRawTable.Rows[index]["Modelo"].ToString() == "") 
       { 
        dr["Col1"] = previousValue; 
       } 
       else 
       { 
        dr["Col1"] = Convert.ToString(dtRawTable.Rows[index]["Modelo"].ToString()); 
        previousValue = (string)dr["Col1"]; 
       } 
      } 

      dtFinalized.Rows.Add(dr); 
      dtFinalized.AcceptChanges(); 


     } 
    } 
+0

這將是非常困難的,看看爲什麼發生這種情況,沒有看到你的代碼..這可能是多種原因您可以將您的代碼,涉及張貼到你有什麼 – MethodMan

+0

讀通過排片行將幫助...簡單地複製最後一行,如果它們不是空的,則替換單元格值...但是,作爲完成的表格,您可能會循環每行...沒有任何信息,您將要使用它,使得很難幫幫我... –

回答

0

這裏是我在我的項目中使用的功能相同的要求。

public static DataTable AutoFillBlankCellOfTable(DataTable outputTable) 
     { 
      for (int i = 0; i < outputTable.Rows.Count; i++) 
      { 
       for (int j = 0; j < outputTable.Columns.Count; j++) 
       { 
        if (outputTable.Rows[i][j] == DBNull.Value) 
        { 
         if (i > 0) 
          outputTable.Rows[i][j] = outputTable.Rows[i - 1][j]; 
        } 
       } 
      } 
      return outputTable; 
     }