返回ExcelvariablesC#

我有一个Windows窗体应用程序与5个方法(每个基于用户单击button)。 在每种方法中,我想以同样的方式打开相同的Excel文件。 但是,在每种方法中,我想在工作表上select不同的范围。 我试图创build一个函数打开Excel文件,而不是重写5次…

// method to open Excel and load a the workbook based on date selected. public Tuple<Microsoft.Office.Interop.Excel.Application, Workbook, Worksheet> openExcel() { Microsoft.Office.Interop.Excel.Application 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(); // Activates file. Worksheet ws = wb.Worksheets[frm2.month.Text]; ws.Activate(); return Tuple.Create(excelObj, wb, ws); } 

所有的工作正常。

我试图在其中一种方法中引用此function…

 var excelObj = openExcel(); Workbook wb = openExcel(); Worksheet ws = openExcel(); var cellValue = ws.Range["A1"].Value2; 

我得到一个错误说…

“不能隐式地将types”System.Tuple“转换为”Microsoft.Office.Interop.Excel.Workbook“。显式转换存在(你是否缺less一个转换?)”

我得到了同样的错误的工作表。 它说,相同的确切的东西只是替代单词工作表来代替工作簿。

你能解释一下我做错了什么吗? 谢谢。

你的方法的返回types(这是一个Tuple )和你想要捕获openExcel输出的variables的types之间有一个不匹配

它应该看起来更像这样

 Tuple<Microsoft.Office.Interop.Excel.Application, Workbook, Worksheet> allThreeInOne = openExcell(); 

那么你可以尝试和一切分开…或者

你也可以做的是在函数调用的时候访问右边的值:

 var excelObj = openExcel().Item1; Workbook wb = openExcel().Item2; Worksheet ws = openExcel().Item3; 

这样你就可以将匹配types完全分配给variables

编辑:后者的解决scheme是不可取的,因为你会不必要地打开文件3次,只是为了得到你已经从第一个电话已经得到的结果,正如乔尔Coehoorn正确指出。

摆脱元组分开将是要走的路:

 var excelObj = allThreeInOne.Item1; Workbook wb = allThreeInOne.Item2; Worksheet ws = allThreeInOne.Item3; 
 var result = openExcel(); var excelObj = result.Item1; Workbook wb = result.Item2; Worksheet ws = result.Item3; var cellValue = ws.Range["A1"].Value2;