2012-10-04 13 views
5

기존 엑셀 2003 템플릿 (xlt)을 편집하고 새로운 * .xls 파일로 저장하는 간단한 C# 응용 프로그램을 만들고 있습니다. 그리고 내가 파일 내부에 다양한 공식에 사용되는 일부 세포를 수정하고 새 파일에 서식 파일을 저장엑셀 2003 파일 저장

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open("\\my_template.xlt"); 
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[0]; 

: 것입니다

workbook.SaveAs("newfile.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); 
workbook.Close(true, misValue, misValue); 
app.Quit(); 

worksheet = null; 
workbook = null; 
app = null; 

그래서 문제가있을 때 새 파일이 successfuly 내가 그것을 열어 편집 한 셀을 사용하는 수식의 결과가 "# NAME"과 같은지 확인합니다. 파일을 다시 열면 모든 것이 잘됩니다. 왜 그렇게됩니까?

어쩌면 내가 잘못된 방법으로 파일을 저장하고 있기 때문에 처음 열 때 오류가 나타나는 이유는 무엇입니까? 이 문제는 2003 년 사무소에만 적용됩니다 ... 제가 인정한 것입니다.

+0

당신이 참조하는 어떤 Interop 어셈블리 버전? –

+3

어떻게 세포를 편집하고 있습니까? – oberfreak

답변

3

으로는 xlWorkbookNormalxlExcel8 대신 에 열거 변경 here 언급,이 올바른 형식으로 저장됩니다.

두 번째로, 참조 값을 null로 설정하면 .Net에서는 아무 것도하지 않지만 VB6과 같지 않습니다. 가비지 수집기는 참조가 더 이상 사용되지 않을 때마다 알아낼 수있을만큼 똑똑하고 정리할 수 있습니다.

셋째, 당신은 닷넷 4 이상 사용하는 경우, 당신은 통합 문서 닫기 방법의 선택적 인수에 대한 값을 제공 할 필요가 없습니다, 그래서 이것은 단지뿐만 아니라 작동합니다

workbook.Close(true); 

을 마지막으로, 워크 시트로 워크 시트를 캐스팅 할 필요가 없습니다, 당신은이 작업을 수행 할 수 있습니다 작업이 완료되면 응용 프로그램 개체를 해제하기 위해 원수를 사용

Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Sheets[0]; 

마지막으로 생각을, 또는 엑셀에 놀아됩니다 작업 관리자를 영원히 (어쩌면 당신이 try 블록 내부에서해야 할 일을하고 나서 최종적으로 블록이) :

Marshal.ReleaseComObjct(app); 

방법의 버전은 다음과 같습니다 업데이트 :

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 

try 
{ 
    Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open(@"\my_template.xlt"); 
    Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Sheets[0]; 

    //Do stuff 

    workbook.SaveAs("newfile.xls", Microsoft.Office.Interop.Excel.XlFileFormat..xlExcel8); 
    workbook.Close(true); 
    app.Quit(); 
} 
finally 
{ 
    Marshal.ReleaseComObject(app); 
} 
+0

나중에 조언을 테스트하고 여기에 결과를보고 해주세요. – TakinosaJi

+0

그것은 나를 도와주지 못했습니다 ..... – TakinosaJi

+0

'xlExcel8'은 Excel 2003 통합 문서를 저장하기위한 올바른 열거 형입니다. 'Value' 또는'Value2' 속성으로 값을 설정하고 있습니까? – JMK