在方法C中使用函数的变量#

时间:2016-07-17 18:37:03

标签: c# excel function windows-forms-designer

我创建了一个打开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种不同的方法(基于用户点击windows窗体中的不同按钮的时间),并且在每种方法中我想以相同的方式打开excel,但随后选择不同的范围。除了重写5次之外,有没有办法做到这一点?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

你不能在另一个函数中使用一个函数的变量。

你在ws函数上声明了openExcel变量,所以你可以在那里使用它,如果你想在另一个函数中使用它,你必须在第二个函数中再次声明它。

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

或者你可以将ws转换为全局变量,在类中但在函数之外,然后它将在该类的所有函数中被访问和识别。

答案 1 :(得分:0)

您可以轻松使用现有方法。让它返回打开的工作表:

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); 
}