【发布时间】:2015-11-05 21:04:48
【问题描述】:
我在获取数组“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)作为组的起点从上到下删除,第二部分($A$10)作为起点从下往上删除。
我想一次遍历“组”中的单元格,如果前两个字符与两个字符 stateId 不匹配。在这一点上,我移动到下一个,直到找到匹配的一个,向后移动一行获取该地址,然后获取列表的开头 ($A$1) 并从那里选择不匹配的最后一行,然后删除块。我将对最后一场比赛之后的行做同样的事情到最后($A$10)。我会逐行执行此操作,但我执行此操作超过 15K 行,因此一次一个非常慢。我希望这更有意义。
【问题讨论】:
-
澄清一下,Console.WriteLine(rangeNames[j]) 打印 $A$1:$A$10
-
该变量根本没有使用。编译器可能已经根据发布/调试模式完全优化了那行代码。
-
它在哪一行给你这个错误?
-
不清楚您在问什么或问题出在哪里,因为您从不将该变量用于任何事情。
-
@David - 请参阅编辑。