Expose VSTO funksjonalitet til VBA w / o lokal admin

stemmer
2

Hva ville være den beste måten å avsløre visse funksjoner i en DotNet VSTO Excel-tillegg til VBA, uten at brukeren må være en lokal administrator (dvs. ingen COM registrering, ingen HttpListener )? Ville det være mulig å bruke Microsoft meldingskøer fra VBA?

Publisert på 23/09/2008 klokken 10:11
kilden bruker
På andre språk...                            


4 svar

stemmer
3

Hvis jeg kan tolke spørsmålet ditt så bredt som "Hvordan jeg utsetter ikke funksjonalitet i en Net forsamlingen til Excel uten COM registrering" og deretter en utmerket løsning er å bruke Excel XLL grensesnitt. I utgangspunktet man utplasserer en XLL mellomlegg og en tilhørende Net dll. Når XLL er lastet det reflekterer over dll og eksponerer de funksjoner som deri til Excel.

En åpen kildekode-implementering kan bli funnet her http://exceldna.typepad.com/blog/2006/01/introducing_exc.html

En kommersiell, lukket kildekode, men mer funksjonsrikt en her http://www.managedxll.com/

Svarte 23/09/2008 kl. 11:06
kilden bruker

stemmer
1

Du kan ikke bare instantiate dem som COM-objekter, som VSTO ikke skal kjøre i standardprogrammet domene.

Her er hvordan jeg har gjort det, som er riktignok litt uoversiktlig. Dette var med VSTO arbeidsbok lagret som en XLA-fil, som på noen måter er mer fleksibel enn en ren VSTO-tillegg.

  • Du trenger å generere en type biblioteket ved hjelp regasm.exe som vil bli referert av VBA-kode.

  • Lag en rot fabrikk klasse i .NET objektmodellen, som er i stand til forekomster noen av klassene du ønsker å konsumere i VBA (noe sånt som "Søknad" -klassen i objektmodeller Kontor).

  • Deretter må du finne en måte å passere en referanse til en forekomst av denne fabrikken klassen til VBA. Når VBA har en referanse til en forekomst av denne fabrikken klasse, kan det ringe sine metoder på å bruke andre gjenstander i .NET objektmodellen.

  • Å passere en forekomst til VBA, definere en makro i VBA-koden som følger

Eksempel kode:

Private m_objMyFactory As Object

Public Sub RegisterFactory(MyFactory As Object)

    On Error GoTo ErrHandler
    Set m_objMyFactory = MyFactory
    Exit Sub
ErrHandler:
    MsgBox "An unexpected error occurred when registering the Factory component: " & Err.Description
    Exit Sub
End Sub
  • Nå kan du legge koden til VSTO ThisWorkbook_Open hendelseshåndterer, som instantiates fabrikken objekt og kaller det ovennevnte makro passerer en referanse til fabrikken objektet.

Eksempel kode:

void ThisWorkbook_Open()
{
     try
     {
         ThisApplication.Run("RegisterFactory",
             new MyNamespace.MyFactory(),
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Load error: " + ex.ToString());
     }
}

Det er noen flere spørsmål å vurdere å få dette arbeidet robust - Hvis du er interessert i å følge opp dette gi meg beskjed og jeg skal legge flere detaljer.

Svarte 23/09/2008 kl. 11:20
kilden bruker

stemmer
1

Du kan være interessert i Excel4Net (det ligner på ExcelDNA og ManagedXll, men enklere å bruke):

Nettside: http://www.excel4net.com

blog: http://excel4net.blogspot.com

Svarte 04/01/2009 kl. 10:13
kilden bruker

stemmer
0

Bare for referanse for fremtidige lesere: Du kan også være lurt å ta en titt på dette spørsmålet:

Tilgang til et VSTO applikasjons tillegget typer fra VBA (Excel)

og særlig til bloggen som er referert det:

VSTO Add-ins, COMAddIns og RequestComAddInAutomationService

Ved å overstyre RequestComAddInAutomationService () du kan utsette hva funksjonaliteten du ønsker, ved å definere en Fasade klasse som gir inngangspunkter for alle disse funksjonene, og utsette den klassen til VBA.

Svarte 16/08/2010 kl. 13:40
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more