Используя переменную из функции в методе C#

Я сделал функцию, чтобы открыть Excel, открыть рабочую книгу и затем установить определенный рабочий лист как активный (в зависимости от ввода пользователя). Функция...

public void openExcel()
    {
        var excelObj = new Microsoft.Office.Interop.Excel.Application();   
        string fileName = @"C:\Users\" + userName + @"\Documents\Visual Studio 2015\Projects\ProgramForMom\ProgramForMom\bin\Debug\Excel Files\" + frm2.year.Text + " Expenses";
        Workbook wb = excelObj.Workbooks.Open(fileName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);    
        wb.Activate(); 
        Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text];
        ws.Activate(); 
    }

У меня есть другой метод, в котором я хотел бы выбрать диапазон на листе...

var cellValue = ws.Range["A10"].Value2; 

Я получаю следующую ошибку:

"Имя" ws "не существует в текущем контексте"

Я попытался посмотреть на эту страницу msdn, но мне было трудно ее понять (я новичок в программировании) - https://msdn.microsoft.com/en-us/library/ms173114.aspx

У меня есть около 5 разных методов (в зависимости от того, когда пользователь нажимает разные кнопки в формах окон), и в каждом методе я хочу открыть Excel одинаково, но затем выбрать разные диапазоны. Есть ли способ сделать это, кроме переписывания 5 раз?

Любая помощь приветствуется.

2 ответа

Решение

Вы можете легко использовать свой существующий метод. Просто дайте ему вернуть открытую рабочую таблицу:

public Worksheet openExcel()
{
    var excelObj = new Microsoft.Office.Interop.Excel.Application();   
    string fileName = @"C:\Users\" + userName + @"\Documents\Visual Studio 2015\Projects\ProgramForMom\ProgramForMom\bin\Debug\Excel Files\" + frm2.year.Text + " Expenses";
    Workbook wb = excelObj.Workbooks.Open(fileName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);    
    wb.Activate(); 
    Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text];
    ws.Activate(); 
    return ws; // return the activated Worksheet
}

Затем вы можете использовать ссылку на ws другими вашими методами:

public void SomeMainMethod()
{
    // open the worksheet
    Worksheet ws = openExcel();

    // and use it anywhere
    // invoke your other method(s) and provide the reference to 'ws'
    YourOtherMethod(ws); 
}

Вы не можете использовать переменную из одной функции в другой функции.

Вы объявили ws переменная на openExcel функция, так что вы можете использовать его там, если вы хотите использовать его в другой функции, вы должны объявить, если снова во второй функции.

Microsoft.Office.Interop.Excel.Worksheet ws = wb.Worksheets[frm2.month.Text];
var cellValue = ws.Range["A10"].Value2; 

Или вы можете удалить ws как глобальная переменная, внутри класса, но вне функций, и тогда она будет доступна и распознается во всех функциях этого класса.

Другие вопросы по тегам