programing

Excel Interop - 다른 워크시트를 모두 추가합니다.

magicmemo 2023. 4. 26. 23:13
반응형

Excel Interop - 다른 워크시트를 모두 추가합니다.

새로운 워크시트를 Excel 워크북에 추가하여 C# Excel Interop의 마지막 워크시트로 만들려고 합니다.

이것은 정말 간단해 보이고, 저는 아래 코드가 그것을 할 것이라고 생각했습니다:

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var excel = new Excel.Application();

            var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(excel);
        }
    }
}

운이 별로 없는.다음과 같은 유용한 오류가 발생합니다.

COME 예외가 처리되지 않았습니다 - HRESULT에서 예외: 0x800A03EC

저는 Microsoft.com 에서 이 페이지를 발견했는데, 먼저 시트를 추가한 후에 시트를 이동하여 아래와 같이 시도했습니다.이 웹 페이지가 Excel 95를 대상으로 한다는 것을 알고 있지만 VBA는 여전히 사용할 수 있기 때문에 계속 작동하기를 희망했습니다.

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var excel = new Excel.Application();

            var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add();
            workbook.Sheets.Move(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(excel);
        }
    }
}

위와 같은 오류가 발생합니다.나는 또한 나의 마지막 워크시트의 이름을 문자열로 전달하려고 시도했습니다.After두 가지 모두에 있는 매개 변수Add그리고.Move방법, 기쁨이 없습니다!

이것이 제가 시도한 것입니다. 그래서 제 질문은 어떻게 하면 C# Excel Interop을 사용하여 Excel 워크북에 워크시트를 추가하고 워크북의 마지막 시트로 만들 수 있을까요?

감사해요.

여기 http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx, 의 설명서를 보면 '다음' 개체가 숫자 위치가 아니라 시트를 배치하려는 시트를 나타내는 개체라는 것을 알 수 있습니다.코드는 다음과 같은 것이어야 합니다(테스트되지 않음).

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 

이 작업을 수행해야 합니다.

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);

이것이 저에게 맞는 유일한 방법입니다.

xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.Add
    (System.Reflection.Missing.Value,
     xlWorkBook.Worksheets[xlWorkBook.Worksheets.Count], 
     System.Reflection.Missing.Value, 
     System.Reflection.Missing.Value);

저한테는 효과가 있어요.

WorkBook.Worksheets.Add(
    System.Reflection.Missing.Value,
    WorkBook.Worksheets[WorkBook.Worksheets.Count], 
    1, 
    System.Reflection.Missing.Value);

언급URL : https://stackoverflow.com/questions/12156302/excel-interop-add-a-new-worksheet-after-all-of-the-others

반응형