我目前正在开发一个插入数据库的Excel阅读器。事情进展顺利,直到我偶然发现Excel表格中的一些变化。
100行,其中一些位于工作表的中间,具有与工作表其余部分不同的样式,并且我的子字符串失败。
在这里给出一些澄清,通常看起来如何:
DMK.2003602
DMK.4663501
DMK.3307301
etc.
要获取数字,我在行中的列上使用substring
,如此
row[12].ToString().Substring(4).ToString());
非常简单。但是在某些时候它会改变这个
82AVG.A410201
我的子字符串不起作用,插入数据库时出现类型错误。
关于如何在行循环期间处理此类更改的任何线索?
这是我的循环,
foreach (var row in albums)
{
if (row.ItemArray.Length == 33 && row.ItemArray[0].ToString() != ""
&& row.ItemArray[1].ToString() != ""
&& row.ItemArray[2].ToString() != ""
&& row.ItemArray[3].ToString() != ""
&& row.ItemArray[4].ToString() != ""
&& row.ItemArray[5].ToString() != "")
{
Order ord = new Order(
1,
maxTrNo +1,
row[6].ToString().Substring(row[6].ToString().Length - 5).ToString(),
1,
numVal,
row[13].ToString(),
"",
row[12].ToString().Substring(4).ToString()); //This is where it fails
orders.Add(ord);
maxTrNo++;
}
}
答案 0 :(得分:1)
只需要在'。'之后获取字符串的一部分,就可以使用(假设在DMK2003602'或者#39; DMK2003602的情况下你想要空字符串。&# 39)
var str = "DMK.2003602";
var subStr = str.IndexOf('.') > -1 && str.IndexOf('.') < str.Length -1 ? str.Substring(str.IndexOf('.') + 1) : string.Empty;
但是对于数据库插入错误,可能还有其他原因。
答案 1 :(得分:1)
使用string.IndexOf('.')
获取点后面的字符
string s = row[i].ToString();
string afterDot = s.Substring(s.IndexOf('.' + 1));
处理没有点的情况
int dot = s.IndexOf('.');
string afterDot = dot == -1 ? string.Empty : s.Substring(dot + 1);