未填充.Split方法的数组

时间:2015-11-05 21:04:48

标签: c# arrays split

我在使用数组“ 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行,所以一次一个非常慢。我希望这更有意义。

2 个答案:

答案 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)将变量推入使用并使其坚持。