【问题标题】:DataTable normalize blanks cellsDataTable 标准化空白单元格
【发布时间】:2016-02-05 13:00:15
【问题描述】:

我还没有找到一种方法来规范化来自具有合并单元格的 Excel 的 DataTable。当我从那个 Excel 中获取 DataTable 时,只有第一个单元格有值,其他单元格是空白的。

这个数据表的一个例子是:

和预期的结果:

总结一下:空白单元格应该用上面下一个单元格的值完成,因为这就是 Excel 合并单元格时发生的情况。

我正在使用 Excel.dll 来读取这个 Excel,没有提供单元格的自动填充,所以这就是我在 C# 中搜索方法的原因。

我想逻辑应该是:如果单元格是空白的,则使用上面的单元格作为值。逻辑看起来很清楚,但我在尝试让代码应用它时遇到问题。

这是一个示例,但最后,我正在寻找一种方法来在列或行具有数据表时执行此操作。

编辑: 感谢您的快速反馈。 附上我到目前为止只有一列的内容,并且有错误,因为不处理第一行和最后一行,但是这个想法......我试图实现的是为任何数量的列和行(如果 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();


        }
    }

【问题讨论】:

  • 如果没有看到您的代码,将很难理解为什么会发生这种情况。这可能是您发布与您所拥有的代码相关的代码的多种原因
  • 逐行读取表格会有所帮助...只需复制最后一行并替换不为空的单元格值...但是,作为完成的表格,您可以循环每一行...没有任何信息,您将如何处理它,很难提供帮助......

标签: c# excel datatable


【解决方案1】:

这是我在项目中用于相同需求的函数。

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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多