【发布时间】: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();
}
}
【问题讨论】:
-
如果没有看到您的代码,将很难理解为什么会发生这种情况。这可能是您发布与您所拥有的代码相关的代码的多种原因
-
逐行读取表格会有所帮助...只需复制最后一行并替换不为空的单元格值...但是,作为完成的表格,您可以循环每一行...没有任何信息,您将如何处理它,很难提供帮助......