数组未填充.Split方法
本文关键字:方法 Split 填充 数组 | 更新日期: 2023-09-27 18:20:40
我在获取数组"whyWontYouWork"以填充值时遇到问题。在以下示例中,rangeNames[j]的值为"$A$1:$A$10"。字符串"group"将正确填写为"$A$1:$A$10",但它上面的行显示为"名称'whyWontYouWork'在此上下文中不存在",所以我不知所措,因为它只起过一次作用,当我尝试拆分字符串时,我一无所获。有什么想法吗?
private void CutStates(string[] sheetNames,string[] rangeNames, string[] idNums)
{
Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel.Workbook wkbk = null;
wkbk = xlApp.ActiveWorkbook;
for (int i = 0; i < idNums.Length; i++)
{
string stateId = idNums[i];
for (int j = 0; j < sheetNames.Length; j++)
{
string[] sheet = sheetNames[j].Split('!');
List<string> rowsToDelete = new List<string>();
List<string> reverseDelete = new List<string>();
string tabName = sheet[0];
string[] whyWontYouWork = rangeNames[j].Split(':');
string group = rangeNames[j];
Excel.Range range = wkbk.Sheets[tabName].Range[group];
foreach (Excel.Range cell in range)
{
string val2 = cell.Value.Substring(0, 2);
string cellAdd = cell.Address.ToString();
if (val2 != stateId)
{
string delCell = cell.Address.ToString();
rowsToDelete.Add(delCell);
}
}
reverseDelete = rowsToDelete.ToList();
reverseDelete.Reverse();
foreach (string item in reverseDelete)
{
Excel.Range delete = wkbk.Sheets[tabName].Range[item];
delete.Delete();
}
}//j
}//i
}
我计划使用第一个部分($A$1)作为从上到下删除的组的起点,使用第二个部分($10)作为从下到上删除的起点。
我想一次迭代一个"组"中的单元格,如果前两个字符与两个字符的stateId不匹配。在这一点上,我移动到下一个,直到我找到一个匹配的,向后移动一行,获取该地址,然后获取列表的开头($A$1),从那里选择不匹配的最后一行,然后删除块。最后一场比赛结束后,我也会这样做(10澳元)。我会一行一行地做,但我在15K行上做,所以一次一个非常慢。我希望这更有意义。
从代码来看,您似乎正在遍历工作表(for (int j = 0; j < sheetNames.Length; j++)
),因此第一张工作表可能具有rangeNames[j]值("$A$1:$A$10"),而其他工作表则没有。
据我所知,Excel默认情况下会创建3张工作表,所以这可能是问题所在。
感谢你们中的一些人指出没有使用该变量,我检查了我的设置,它正在优化该变量。我以为我已经改变了。添加一个简单的console.writeline(而不是使用Watch)将变量推入使用状态并使其保持不变。