반응형
.Net Excel Interop 워크시트 삭제
에서 엑셀 문서에서 워크시트를 삭제하려고 합니다.interop Excel 클래스를 사용하는 Net c# 3.5 어플리케이션(Excel 2003의 경우).
저는 다음과 같은 많은 것을 시도합니다.
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();
작동도 안 되고 오류도 안 나는데...
한 시간 이상 살펴본 후 답을 찾았습니다.
xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
Excel 워크시트 삭제 시 알아야 할 두 가지 중요한 사항이 있습니다.
Excel interop은 0부터가 아니라 1부터 카운트되므로 두 번째 항목을 제거하면 세 번째 항목이 대체됩니다.따라서 워크시트를 삭제하는 적절한 방법은 마지막부터 처음까지입니다.
// Remove LAST worksheet MyWorkBook.Worksheets[3].Delete(); // and only then remove the second (which is the last one) MyWorkBook.Worksheets[2].Delete();또는 목록의 두 번째 항목([2])을 두 번 삭제하면 동일한 결과가 나타납니다.
워크시트가 하나만 남아 있으면 다음 행에서 예외가 발생합니다.
MyWorkBook.Worksheets[1].Delete();
또한 워크북에 워크시트가 하나 이상 포함되어 있어야 합니다. 즉, 워크북의 모든 워크시트를 삭제할 수 없습니다.
Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1];
worksheet.Delete();
이름으로 워크시트 찾기:
var app = new Microsoft.Office.Interop.Excel.Application();
var workbook = app.Workbooks.Add();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete();
이렇게 작업 시트를 삭제할 수 있습니다.
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return;
}
xlApp.DisplayAlerts = false;
string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
+ "\\Sample.xlsx";
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets worksheets = xlWorkBook.Worksheets;
worksheets[4].Delete();
worksheets[3].Delete();
xlWorkBook.Save();
xlWorkBook.Close();
releaseObject(worksheets);
releaseObject(xlWorkBook);
releaseObject(xlApp);
그리고 이것을 사용한다.
static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}
다음과 같이 c# 콘솔애플리케이션에서 Excel 워크시트를 삭제합니다.
Microsoft.Office.Interop.Excel.Worksheet worksheet =
(Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"];
worksheet.Delete();
언급URL : https://stackoverflow.com/questions/678736/net-excel-interop-deleting-a-worksheet
반응형
'programing' 카테고리의 다른 글
| 사용자 정의 UITableViewCells 높이 설정 (0) | 2023.04.14 |
|---|---|
| 명령줄 또는 배치 파일에서 Excel 매크로를 실행하는 방법 (0) | 2023.04.14 |
| IFS=$'\n'의 정확한 의미는 무엇입니까? (0) | 2023.04.14 |
| Windows Scipy 설치: Lapack/Blas 리소스를 찾을 수 없음 (0) | 2023.04.14 |
| 셸 내의 변수로 출력을 리다이렉트하려면 어떻게 해야 하나요? (0) | 2023.04.14 |