我在使用数组“ whyWontYouWork ”填充值时出现问题。在以下示例中, rangeNames [j] 的值为“$ A $ 1:$ A $ 10”。 字符串“ group ”将正确填写为“$ A $ 1:$ A $ 10”但上面的行显示为“名称'why'tontYouWork'不存在在这种情况下“,所以我不知所措,因为它工作一次,当我试图分裂字符串时,我什么都没得到。有什么想法吗?
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)作为从上到下删除的组的起点,第二部分($ A $ 10)作为从下到上删除的起点。
我想一次一个地遍历“group”中的单元格,如果前两个字符与两个字符stateId不匹配。那时我移动到下一个,直到我找到一个匹配,向后移动一行抓住该地址,然后抓住列表的开头($ A $ 1)并从那里选择不匹配的最后一行,并且删除块。我会在最后一场比赛结束后为这一行做同样的事情($ A $ 10)。我会逐行做这个,但是我这样做超过15K行,所以一次一个非常慢。我希望这更有意义。
答案 0 :(得分:1)
从代码中看起来你正在遍历工作表(for (int j = 0; j < sheetNames.Length; j++)
)所以对于第一张工作表你可能有rangeNames [j]值(&#34; $ A $ 1:$ A $ 10&#34; )和其他表格你不会。
根据我的记忆,默认情况下Excel会创建3张,这可能是问题所在。
答案 1 :(得分:0)
感谢你们中的一些人指出这个变量没有被使用,我检查了我的设置并且它正在优化变量。我以为我改变了那个。添加一个简单的console.writeline(而不是使用Watch)将变量推入使用并使其坚持。