source

Excel interop: _워크시트 또는 워크시트?

manysource 2023. 4. 20. 21:34

Excel interop: _워크시트 또는 워크시트?

저는 현재 동적 타이핑에 대해 쓰고 있으며, 엑셀 인터op의 예를 제시하겠습니다.사무실 인터옵션을 해본 적이 거의 없는데, 알 수 있더군요.C# 4의 MSDN Office Interop 튜토리얼에서는_Worksheet 또 인터페이스도 .Worksheet인터페이스입니다.가가른른 른

저의 터무니없이 간단한 데모 앱(아래 그림)에서는 어느 쪽이든 정상적으로 동작하지만, 베스트 프랙티스가 어느 쪽이든 지시한다면, 저는 그것을 적절히 사용하고 싶습니다.

using System;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;

class DynamicExcel
{
    static void Main()
    {
        var app = new Excel.Application { Visible = true };
        app.Workbooks.Add();

        // Can use Excel._Worksheet instead here. Which is better?
        Excel.Worksheet workSheet = app.ActiveSheet;

        Excel.Range start = workSheet.Cells[1, 1];
        Excel.Range end = workSheet.Cells[1, 20];
        workSheet.get_Range(start, end).Value2 = Enumerable.Range(1, 20)
                                                           .ToArray();
    }
}

COM 또는 Office의 상호 운용성을 상세하게 조사하지 않고 C#4의 신기능을 강조하려고 합니다.하지만 정말 바보 같은 짓은 하고 싶지 않습니다.

(상기 코드에도 정말 바보 같은 것이 있을지도 모르니, 가르쳐 주세요.단순히 "A1:T1"이 아닌 개별 시작/종료 셀을 사용하는 것은 의도적인 것입니다. 즉, 실제로는 20 셀의 범위임을 쉽게 알 수 있습니다.그 외의 것은 아마 우발적인 것일 것입니다.)

'우리'를 쓰면 요?_Worksheet ★★★★★★★★★★★★★★★★★」Worksheet 왜 왜?

제 기억이 맞다면, 그리고 제 기억은 좀 흐릿합니다. 엑셀피아를 분해한 지 오래됐습니다. 이런 식입니다.

이벤트는 본질적으로 어떤 일이 일어났을 때 객체가 호출하는 메서드입니다..NET에서는 이벤트는 일반적이고 단순한 위임입니다.다만, COM 에서는, 많은 이벤트 콜백을 인터페이스에 정리하는 것이 매우 일반적입니다.따라서 특정 오브젝트에는 "착신" 인터페이스, 다른 사람이 호출할 것으로 예상되는 메서드 및 이벤트가 발생했을 때 다른 사람에게 호출할 것으로 예상되는 "발신" 인터페이스라는2개의 인터페이스가 있습니다.

비관리 메타데이터(타입 라이브러리)에는, 작성 가능한 오브젝트의 3개의 정의가 있습니다.수신 인터페이스, 발신 인터페이스, 및 coclass는, 「나는 이 착신 인터페이스와 발신 인터페이스를 실장하는 작성 가능한 오브젝트입니다」라고 말합니다.

타입 라이브러리가 메타데이터로 자동 변환되면 이러한 관계는 유감스럽게도 유지됩니다.클래스와 인터페이스가 관리 대상 세계에서의 기대에 부응할 수 있는 수동 PIA가 있으면 좋았을 텐데 아쉽게도 실현되지 않았습니다.따라서 Office PIA는 겉으로 보기엔 이상한 복제로 가득 차 있습니다.이러한 복제에서는 모든 크리에이티브 오브젝트는 2개의 인터페이스가 관련지어져 있고, 그 위에 같은 것이 있는 것처럼 보입니다.인터페이스 중 하나는 coclass에 대한 인터페이스를 나타내며, 그 중 하나는 coclass에 대한 착신 인터페이스를 나타냅니다.

_워크북 인터페이스는 워크북 coclass의 착신 인터페이스입니다.워크북 인터페이스는 coclass 자체를 나타내는 인터페이스이므로 _Workbook에서 상속됩니다.

요컨대 워크북은 구현에 관한 세부사항입니다.

PIA 어셈블리(Microsoft).Office.Interop.Excel)의 경우,Workbook인터페이스의 정의는 다음과 같습니다.

public interface Workbook : _Workbook, WorkbookEvents_Event

Workbook_Workbook이벤트를 추가합니다.일일도 입니다.Worksheet만, 지금 막Workbooks

public interface Worksheet : _Worksheet, DocEvents_Event

DocEvents_Event

[ComVisible(false), TypeLibType((short) 0x10), ComEventInterface(typeof(DocEvents),
                     typeof(DocEvents_EventProvider))]
public interface DocEvents_Event
{
    // Events
    event DocEvents_ActivateEventHandler Activate;
    event DocEvents_BeforeDoubleClickEventHandler BeforeDoubleClick;
    event DocEvents_BeforeRightClickEventHandler BeforeRightClick;
    event DocEvents_CalculateEventHandler Calculate;
    event DocEvents_ChangeEventHandler Change;
    event DocEvents_DeactivateEventHandler Deactivate;
    event DocEvents_FollowHyperlinkEventHandler FollowHyperlink;
    event DocEvents_PivotTableUpdateEventHandler PivotTableUpdate;
    event DocEvents_SelectionChangeEventHandler SelectionChange;
}

하는 가장 생각합니다.Worksheet하지만 그게 차이점이야

내부 사용 전용 클래스 및 인터페이스

내부적으로 사용되며 일반적으로 직접 사용되지 않는 다음 클래스 및 인터페이스를 직접 사용하지 마십시오.

클래스/인터페이스:

classid 클래스: ApplicationClass(Word 또는 Excel), 워크시트 클래스(Excel)

classid 이벤트x _ SinkHelper : ApplicationEvents 4 _ SinkHelper ( Word ) 、 WorkbookEvents _ SinkHelper ( Excel )

_classid : _어플리케이션(Word 또는 Excel), _워크시트(Excel)

classid 이벤트x : ApplicationEvents4(Word), AppEvents(Excel)

I classid Events x : IApplication Events 4 (Word), IApp Events (Excel)

http://msdn.microsoft.com/en-gb/library/ms247299(office.11).aspx

edit: (re: 이 응답의 형식)은 이스케이프된 언더스코어 바로 뒤에 이탤릭체로 된 텍스트를 올바르게 포맷할 수 없습니다.프리뷰에서는 올바르게 표시되지만, 투고시에는 파손됩니다.

edit2: 언더스코어 자체를 이탤릭체로 하면 동작합니다.개념적으로는 끔찍하지만 외관은 같습니다.

지난 수년간 C# / Excel COM Interop 코드를 많이 보고 작성했으며, 워크시트도 거의 모든 경우에 사용되고 있습니다.나는 그 주제에 대해 마이크로소프트로부터 결정적인 것을 본 적이 없다.

MSDN은 인터페이스가 및 인터페이스로부터 상속받는 것을 나타냅니다.워크시트 개체에서 발생할 수 있는 이벤트를 다른 모든 이벤트와 함께 제공하는 것처럼 보입니다.내가 볼 때,Worksheet하다그냥 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, .Worksheet인터페이스로 인해 손실되는 것이 없고, 이로 인해 노출되는 이벤트가 필요할 수 있기 때문에 모든 경우에 인터페이스를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1051464/excel-interop-worksheet-or-worksheet