Darw1n34
Darw1n34

Reputation: 332

Array not filling with .Split Method

I am having an issue getting the array "whyWontYouWork" to populate with a value. In the following example, the value of rangeNames[j] is "$A$1:$A$10". the string "group" will fill in correctly as "$A$1:$A$10" but the line above it shows up as "The name 'whyWontYouWork' does not exist in this context", so I am at a loss since it works once, and when I try to split the string, I get nothing. Any ideas?

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
    }

I plan on using the first part ($A$1) as the starting point of a group to delete from the top down, and the second part ($A$10) to be the starting point from the bottom up to delete.

I want to iterate through the cells in "group" one at a time and if the first two characters don't match the two character stateId. At that point I move to the next until I find one that matches, move back one row grab that address and then grab the start of the list ($A$1) and select from there to the last row that doesn't match, and delete the block. I will do the same for the row after the last match to the end ($A$10). I would do this line by line but I do this over 15K rows so one at a time is terribly slow. I hope that makes more sense.

Upvotes: 0

Views: 67

Answers (2)

Darw1n34
Darw1n34

Reputation: 332

Thanks to A few of you pointing out that the variable wasn't used, I checked my settings and it was optimizing the variable away. I thought I had changed that. Adding a simple console.writeline (instead of using the Watch) pushed the variable into use and made it stick.

Upvotes: 0

nikib3ro
nikib3ro

Reputation: 20596

From code it seems you are iterating through sheets (for (int j = 0; j < sheetNames.Length; j++)) so it is possible that for first sheet you have rangeNames[j] value ("$A$1:$A$10") and on other sheets you don't.

From what I remember Excel by default creates 3 sheets, so that's probably the problem.

Upvotes: 1

Related Questions