如何编辑数据表列值



Excel列名可能包含尾随空格,如果列因空格而不匹配,则会出现异常。

我正在寻找方法来处理数据表中列名中的尾随空格。

foreach (DataRow row in caseTable.Rows)
{
foreach (DataColumn column in caseTable.Columns)
{
if (!(string.isNullOrEmpty(column.toString())))
{
//Cannot assign value to 'column' because it is in a 'foreach iteration variable'
column = column.ToString().TrimStart().TrimEnd(); 
trimmed = 1;
}
}
while (trimmed == 0) ;
}
...
//errored out due to 'Excel.firstName' value not existing in DataTable due to trailing spaces
if (row[Excel.firstName].ToString().Trim() != "")
{
caseEntity.Attributes[Case.firstName] = row[Excel.firstName];
}

您的代码中有两个错误:

  1. 您正在使用foreach迭代序列,并试图修改迭代项;因此,抛出的异常
  2. 您正在尝试替换列对象而不是其名称

此外,您正在滥用ToString,并且正如Michal Turczyn所述,您没有使用专门为测试空字符串或null字符串而设计的内置String方法。

您可以尝试用替换内部循环中的代码

var oldName = column.ColumnName;
if (!string.IsNullOrEmpty(oldName))
{
var newName = oldName.Trim();
if (newName != oldName)
{
column.ColumnName = newName;
trimmed = 1;
}
}

从这个替换代码你可以看到:

  1. 您应该读取/写入ColumnName属性,而不是使用ToString
  2. 使用Trim可以避免相继调用TrimStartTrimEnd(按任何顺序(
  3. 您应该使用string.IsNullOrEmpty,而不是检查空字符串
  4. 通过声明oldNamenewName,您可以将列名跟踪为修剪,只有当这真的是真的时

此外,如果只为trimmed变量分配值01,则应考虑将其声明为bool,并分配falsetrue。否则,可以将trimmed变量保持为一个数字,但增加其值,而不是始终指定相同的常数(1(。

如果您试图更改的不是列名,而是该列的当前行中的单元格值,那么您将无法获取(以及稍后设置(单元格值(您正在评估并试图仅更改列名(。在这种情况下,内部循环代码变为:

var oldValue = row[column] as string;
if (!string.IsNullOrEmpty(oldValue))
{
var newValue = oldValue.Trim();
if (newValue != oldValue)
{
row[column] = newValue;
trimmed = 1;
}
}

最新更新