我还没有找到一种方法来规范化来自带有合并单元格的Excel的DataTable。当我从该Excel获取DataTable时,只有第一个单元格具有该值,其他单元格为空白。
此DataTable的一个示例是:
和预期结果:
总结一下:空白单元格应该使用上面的下一个单元格的值来完成,因为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 :(得分: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;
}