interop을 사용할 때 COM 개체를 릴리스해야한다는 것을 알고 있습니다. 개발 및 추가 기능, 엑셀 (Excel)과 같은 것들은 약간 다릅니다. 여기 루프가 있는데, Marshal.ReleaseComObject
이 필요한지 궁금합니다.Excel Addin을 개발할 때 COM을 출시 하시겠습니까?
foreach (var sheet in results.Sheets)
{
var newSheet = workbook.AddSheet();
newSheet.SetSheetTabColor(sheet.TabColor);
newSheet.SetSheetName(sheet.TabName);
newSheet.Cells.SetFont("Calibri", 8);
newSheet.FreezeRow(1);
var endRow = sheet.Data.GetUpperBound(0) + 1;
var endColumn = sheet.Data.GetUpperBound(1) + 1;
var writeRange = newSheet.SetWriteRange(1, 1, endRow, endColumn);
writeRange.Value2 = sheet.Data;
newSheet.AutoFitColumns();
newSheet.RemoveColumn(1);
Marshal.ReleaseComObject(newSheet);
}
또한 확장 메소드가있는 라이브러리를 만들었습니다. 나는이 객체의 해제해야합니까,
public static Worksheet AddSheet(this Microsoft.Office.Interop.Excel.Workbook workbook)
{
var sheets = workbook.Sheets;
return sheets.Add(After: sheets[sheets.Count]);
}
내가 workbook.Sheets
에서 sheets
에 접근하고 있기 때문에 : 한 가지 예는 workbook.AddSheet()
AddSheet
이런 모습입니까? 그렇다면 워크 시트를 반환 할 때부터 어디에서? 돌아 오기 전에 풀어줄 수 없나요?
이것은 바보 같은 질문 일 수 있지만 Marshal.ReleaseComObject
이 foreach 범위에서 필요하지 않은 경우에도 여전히 거기에 있더라도 상처가 있습니까?
필자의 경우 사용자가 Excel을 열어 기존 파일에서 추가 기능을 실행하지만 대개 원할 때까지 닫지 않으므로이 경우 닫기 나 종료 할 필요가 없습니다. 옳은? – xaisoft
올바른지, 추가 시나리오에서 이것이 필요하지 않습니다. 사용자가 응용 프로그램을 닫습니다. –