DataTable规范化空白单元格

时间:2015-11-04 21:00:48

标签: c# excel datatable

我还没有找到一种方法来规范化来自带有合并单元格的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();


        }
    }

1 个答案:

答案 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;
        }
相关问题