返回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;