Используя переменную из функции в методе 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
как глобальная переменная, внутри класса, но вне функций, и тогда она будет доступна и распознается во всех функциях этого класса.