Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1928
Jeg kom nylig over en liten tutorial som viser hvordan man kan kontrollere Excel via. Python. Slik jeg har forstått det så bruker man noe som heter "COM interfaces" for å gjøre dette, etter å ha googlet litt så har jeg funnet ut at utrolig mange programmer faktisk kan styres på denne måten.

Jeg har imidlertid ikke funnet så mye dokumentasjon på dette, så jeg hadde håpet at noen kunne ha opplyst meg litt.


Spørsmål:
  1. Er det slik at disse COM interfacene er lagt inn av programmererne (som et API), eller er dette noe som automatisk følger med når man kompilerer programmer?
  2. Av eksemplene jeg har sett på, så virker det som at kommandoene man bruker ligner veldig på et API. Excel har eksempelvis egne kommandoer med logiske navn i forhold til hva de gjør, men jeg har ikke klart å finne ut hvordan jeg kan hente ut alle gyldige kommandoer for forskjellige programmer, er dette noe som kan hentes ut? Skulle gjerne ha funnet en måte å printe alle tilgjengelige kommandoer for hvert enkelt program.
  3. Dette var mildt sagt revolusjonerende for min del, tanken på å slippe å bruke VB for å scripte i Excel er utrolig befriende. Jeg har tidligere googlet på hvordan man kan styre Excel med Python, jeg har funnet forskjellige obskure metoder, men jeg har aldri kommet over denne metoden. Hva er grunnen til at dette ikke mer vanlig? Er det noen bakdeler ved det som jeg ikke vet om?
  4. Nå har ikke jeg testet med så mange programmer, men samtlige av de jeg har testet med har støtte for scripting, er dette en forutsetning for å kunne bruke disse COM interfacene? Eller kan man styre programmer som ikke har scripte-muligheter også?
  5. Er det mulig å bruke dette på forskjellige platformer? Kan f.eks. kode som fungerer mot Excel på Windows også brukes på Mac? Nå vet jeg ikke om Mac har Excel i det hele tatt, men det er bare ment som eksempel.
Før jeg svarer, så vil jeg anbefale deg om å ikke ta i bruk COM om du ikke absolutt må. Den eneste gode grunnen til å bruke det i 2017 er skikkelig gammel software. Hvis du har klart deg uten COM til nå, så klarer du deg fint videre uten. Interfacet er utrolig rart implementert, mangler moderne dokumentasjon og guider (for ingen bruker det). I tillegg har Microsoft introdusert DCOM, DDE, MSRPC, OLE og ActiveX i tillegg til COM, og det gjør forvirringen komplett for min del. Advarsel slutt.

1./2. COM Interfaces er lagt inn av utviklerne, ja. Hvert objekt blir registrert til å peke mot funksjoner og konstanter i et bibliotek, som i bakkant kan være en DLL- eller objekt-fil. Hva hver funksjon gjør er opp til de som utviklet APIet, og det er ikke sikkert at det er mulig å gjøre like mye via COM APIet til Excel som i Excel selv.

2. Det å hente ut liste over funksjoner er innebygd i APIet, og noe må hele tiden må gjøre, for COM er bygd slik at du kan ikke anta *noe* før du har spurt. Alle objektene arver fra "IUnknown interface", og du kan bruke QueryInterface()-funksjonen fra det interfacet til å få informasjonen du etterspør. I Python så har jeg hatt hell med comtypes-modulen (mini-guide med Excel-eksempel) og så inspisere filene som Python genererer i "gen_cache"-mappen første gang du lager et Excel-objekt.

3. Bakdelene er at 1) APIet antageligvis ikke har lik tilgang til interne ting i Excel som VB har, og kan være begrenset i datastørrelse. 2) COM er treigt. Skal du utføre mange lese- og skrive-operasjoner over kort tid så vil det gå idiotisk sakte. 3) Læringskurven til COM er relativt bratt, og du vil slite med å finne moderne bøker om temaet. Når noe går galt og du lurer på hva error 0x3C000BD4C betyr, så vil du savne et slikt oppslagsverk, for informative feilmeldinger var ikke oppfunnet da COM ble påtenkt.

4. De fleste programmer fra Microsoft støtter COM, og det er noe som må bevisst kompileres inn når man lager programmet. Det er ikke mulig å kalle noe COM-objekt i et program uten, for det finnes ikke noe kode å kjøre der.

5. COM er kanskje fysisk mulig å få til å virke på andre OS, men det er originalt bare for Windows. Jeg nekter å tro at noen liker det så godt at de portet det videre til f.eks. Mac, men jeg har sett verre ting.

PS: Sjekk ut https://www.bleepingcomputer.com/new...uage-to-excel/. I kommentarene til den nyheten er det også et par forslag til alternativer, mens du venter.
Ikke direkte svar på det du spør om, men "gspread" kan brukes til å styre google spreadsheets med python.

https://github.com/burnash/gspread
Pytnon har god støtte for Excel,og COM nå idag brukes svært sjelden.
For og nevne noen av de beste Pandas, Openpyxl, pyexcel.

Pandas leser en masse formater Excel er bare et av formatene.
Fordel er at pandas dataframe ligner på Excel,
når man bruker dett igjennom Jupyter NoteBook eks Common Excel Tasks Demonstrated in Pandas
Pandas kan også erstatte Excel.

Openpyxl er spesialisert bibliotek mot Excel,har utviklet seg veldig bra.
Noen eksempler her
Python Excel The Definitive Guide..
Tusen takk for utfyllende svar Da skjønner jeg hvorfor det ikke er så mange ressurser å oppdrive rundt dette.

Jeg må innrømme at jeg synes det er litt synd, idéen er jo veldig god, det blir litt som å ha et API som kan nås fra alle programmerings/scripte-språk. Jeg har snoket litt på Adobe programmene også, også her kan man styre f.eks. After Effects og Photoshop fra Python, meget kult! Det som er litt stilig er at man kan legge inn JavaScript/ActionScript kode i Python, så man kan egentlig gjøre alt man vil.

Inn til Microsoft legger inn Python støtte så skal jeg sjekke ut alternativene snippsatt nevner

Takk igjen