【问题标题】:Array not filling with .Split Method数组未填充 .Split 方法
【发布时间】: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 - 请参阅编辑。

标签: c# arrays split


【解决方案1】:

从代码看来,您正在遍历工作表 (for (int j = 0; j &lt; sheetNames.Length; j++)),因此对于第一张工作表,您可能有 rangeNames[j] 值 ("$A$1:$A$10"),而在其他工作表上您没有t.

据我所知,Excel 默认创建 3 张工作表,所以这可能是问题所在。

【讨论】:

  • 我应该指出 sheetNames 是由用户预先输入的,与默认创建的三个选项卡几乎没有关系,但我明白为什么会这样。
【解决方案2】:

感谢你们中的一些人指出没有使用该变量,我检查了我的设置,它正在优化该变量。我以为我已经改变了这一点。添加一个简单的 console.writeline(而不是使用 Watch)将变量推入使用并使其粘住。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2016-07-11
    • 1970-01-01
    • 2015-01-22
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多