我创建了一个打开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次之外,有没有办法做到这一点?
非常感谢任何帮助。
答案 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);
}