2016-07-17 2 views
1

나는 5 가지 방법 (각각 단추를 클릭하는 사용자 기반)이있는 Windows Forms 응용 프로그램이 있습니다. 각 방법마다 동일한 Excel 파일을 같은 방법으로 열고 싶습니다. 그러나 각 방법마다 워크 시트에서 다른 범위를 선택하려고합니다. 나는 5 번 다시 쓰기보다는 오히려 엑셀 파일을 여는 함수를 만들려고 노력했다 ...Excel 변수 반환 C#

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

모두 잘 작동합니다.

나는 방법 중 하나에이 기능을 참조 시도

...

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

내가 말하는 오류가 ...

"암시 적으로 형식을 변환 할 수 없습니다 'System.Tuple'에 'Microsoft.Office.Interop.Excel.Workbook'. 명시 적 변환이 존재합니다. 캐스트가 누락 되었습니까? "

워크 시트에 대해 동일한 오류가 발생합니다. 똑같은 것이 워크 북이라는 단어를 워크 북 대신에 대체한다고합니다.

내가 잘못 한 것을 설명해 주시겠습니까? 고맙습니다.

답변

1

당신의 (a Tuple입니다) 귀하의 메서드의 반환 형식 사이에 불일치 당신이 그것을 더이

과 같아야합니다 openExcel

의 출력을 잡으려고하려는 변수의 유형이

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

당신은 시도 할 수 있습니다 떨어져 모든 것을 바이올린 ... 또는 당신은 또한 무엇을 할 수

바로 함수 호출의 시점에서 값에 액세스하는 것입니다

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

당신이 변수

에 정확히 일치하는 유형을 지정 것이다 이런 식으로

편집 : 당신이 불필요하게 당신이하고자 결과를 얻기 위해 3 시간 만 파일을 열 것이기 때문에 타 후자의 솔루션은 권장하지 않습니다 Joel Coehoorn이 정확하게 지적한 것처럼 첫 번째 호출에서 이미 얻었습니다.

var excelObj = allThreeInOne.Item1; 
Workbook wb = allThreeInOne.Item2; 
Worksheet ws = allThreeInOne.Item3; 
+0

완벽한 : 떨어져 튜플을 조롱

갈 수있는 방법이 될 것입니다! 정말 고맙습니다. 정확히 필요한 것! – Michael

+0

당신은 오신 것을 환영합니다. 튜플은 단시간에 한 곳에서 정보를 수집하는 훌륭한 도구입니다. –

+0

예. 누군가가 3 함수를 만들거나 내 문제와 비슷한 것을 달성하기 위해 전역 변수를 사용하고자하는이 게시물을 보았습니다. 귀하의 솔루션이 나아졌습니다! 아주 쉽고, 깔끔하고 시간을 절약 해줍니다. – Michael

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

이것은 또한 작동합니다. 따라서이 솔루션과 Mong Zhu가 게시 한 솔루션 모두 매우 유용합니다. 사람들에게 알리고 싶었습니다. – Michael

+1

같은 파일을 세 번 열지 않으려 고 ... –