Just nu i M3-nätverket
Gå till innehåll

Starta excel makro med asp


Wippika

Rekommendera Poster

Hej på er..

 

Har kört fast riktigt ordentligt nu.

 

Jag har en webbsida som startar olika excelmakron. I början var det en del problem med detta vad det gällde behörigheter med Dcom objekt osv.

Verkar ha löst allt sånt trassel och det mesta fungerar som jag tänkt mig..

 

Nu när jag testar en del så har jag satt administratörs kontot i iis istället för IUSR kontot.

 

När jag kör ett av excelmakron i en excel fil så hänger sig sidan och bara står och tuggar tills timeout.

Jag har provat att köra flera olika makron både i samma fil och i andra och det fungerar kanon. Men just detta

speciella makro vill inte fungera.

 

Jag gjorde så att jag startade ett nytt word dokument och från det gjorde ett anropa till excelfilen och det

specifika makrot, inga problem då. Excel startas och makrot körs och sedan stängs excel. Precis som det ska

fungera. Men när jag använder samma kod och gör detta från en asp fil så hänger sig sidan och bara tuggar.

Alla andra makron fungerar från webbsidan..

 

Enda avvikelsen som jag kan se i det makrot som inte fungerar är att det skapas en variabel innehållande ett objekt

typ (Set varObj = New Garp.Application). GARP är ett gammalt affärssystem.

Den referens som anropas när objektet skapas är en exe fil som är det gränssnitt som man kommunicerar med GARP servern med.

 

Funderar på om det är något här som skapar problem, i andra makron som fungerar så skapar jag ju objekt på samma sätt

när jag kommunicerar med databaser osv.

Finns det någon behörighetspryl inblandad i detta, konstiga är ju att det fungerar när jag kör från ett worddokument men

inte från webbsida??

 

Jag har inte en aning om vad jag ska prova med nu, fattar inte hur det kan strula??

 

Öppen för alla förslag och ideer

 

ha det gott alla

Länk till kommentar
Dela på andra webbplatser

Vad gör du egentligen med Excel? Använder det som en databas?

 

kanske migrera upp till en riktig databas och vandra bort från dessa problem?

 

Som du märker är VBA inte alls lätt att felsöka, att hitta vad det är som går fel när det går.

Tips? Råd?

Tja, försök finna vad det är som bråkar och se om du kan ta dig runt det.

Skapa någon form av fellogg. Exempelvis en rutin som sparar debug-data till en fil och ta reda på var i koden du stannar.

Länk till kommentar
Dela på andra webbplatser

jo jag vet..

 

Det här är så oerhört special, dom jag försker hjälpa med detta gör massa uträkningar i detta exceldokument. Jag använder en

MSSQL databas men måste ändå köra igenom vissa saker i excel och sen spara ut information till databasen.

Låter skitdumt men i dagsläget är det i princip omöjligt att bygga bort exceldokumentet till en databas och göra uträkningarna

i ett annat programspråk.. ( inget är omöjligt) men den tid och resurser som går åt finns inte :)

 

Men din idee är att om jag lägger in en felhanterare i dom funktioner som körs när makrot anropas och sen skriver ut felen till

ett text dokument, eller? det låter ju faktiskt vettigt.. Just nu får man ju inget besked om vad det är som felar..

 

Roliga är ju att makrot fungerar om jag anropar det från ett worddokument som jag fysiskt öppnat..

 

Vad är igentligen skillnaden på att som ovan anropa från ex. ett word dokument eller från en hemsida? Behörigheter vrkar inte strula,

det har jag nog fått ordning på? detta är ju det som gör mig mest konfundersam, just att word anrop funkar men inte asp, koden är ju

exakt densamma?

Länk till kommentar
Dela på andra webbplatser

jadu, jag vet inte vad som går fel.

 

Det låter ju dock som om det anropar Excel från en programdomän, kör VBA-kod som i sin tur anropar en tredje "domän" med kod.

 

Kan lugnt säg att du nu är inne på teknikaliteter som jag inte har den blekaste om hur de fungerar. Kanske är helt enkelt som så att anropsstacken i ASP blir full?

Eller helt enkelt att Excel/VBA säger stopp vid denna typ av anrop. Nä, jag vet inte.

Länk till kommentar
Dela på andra webbplatser

Jag har suttit och testat som en tok och kommit fram till att felet är att det inte går skapa en instans av ett objekt..

 

Det som inte fungerar är denna rad.

 Set garp = Createobject("garp.Application")

jag testar med

if garp.tables is nothing

Raden ovan blir sann. Det fungerar istället om jag kör koden direkt i exceldokumentet eller om jag anropar från ett worddokument.

 

KOnstiga är ju att just den raden inte fungerar men det fungerar när jag skapar adodb objekt typ

 Set Con = Createobject("ADODB.Connection")

 

Jag är så dålig på detta men vad är det som händer här, vad kan det vara som skiljer dessa klasser. Är det något jag kan ändra för dessa?

 

 

Lite frågor på dina förslag, ursäkta min dumhethet nu..

Vad är en programdomän? och tredje domän, hur funkar det?

Vad är anropsstack?

 

Tacksam för alla ideer och förslag, hemligheten måste ju ligga någonstans där att att jag kan skapa connection object men inte garp objekt?

 

Tack för alla förslag hitills..

Länk till kommentar
Dela på andra webbplatser

Vad är Garp?

 

Det där med domäner, jag som spånar.. men det kan ju finnas en säkerhet i anropen, vad ASP tillåter.

 

En vanlig databaskoppling är ju inget konstigt, men vad är garp? Är det ett objekt som ni lagt till Excel eller finns det i Excel/VBA?

Länk till kommentar
Dela på andra webbplatser

Garp är ett gammalt affärssystem. På denna server som jag provkör allt på så har jag installerat en klient av Garp.

Tittar man under Verktyg->referenser i excel så finns garp med i listan där och den pekar mot garp.exe..

 

Jag har inte fattat det här riktigt med referenser, är det samma som klasser, kan det även kallas objekt..

 

en klass/objekt/referens kan man väll förklara som en Funktion som har metoder och egenskaper?

 

Sen trodde jag att klasser/funktion/referenser oftast var en .dll eller .ocx fil, vad är skillnaden på dessa två. Hur kan Garp i detta fall peka direkt på garp.exe som igentligen är klientgränssnittet mot affärssystemet?

 

Kan det vara så att just för för att det är en .exe så ställer det till det?

 

det här med säkerhet i anropen, har du några nyckelord jag kan googla på för att försöka leta mer om detta?

 

Stort tack för att du hjälper till..

Länk till kommentar
Dela på andra webbplatser

Osäker, eller rättare sagt, vet inte exakt vad referenserna är/gör/tillåter. I princip är det dock referenser till bibliotek, eller exe-filer, som synliggör funktioner/klasser mot VBA/VB.

 

En tanke jag fick nu på morgonen är att du kan testa de två olika typerna av bindning som är möjliga i VBA. Den ena kallas för tidig respektive sen bindning. (early, late binding)

 

Tidig bindning är exempelvis när du skapar en referens till Scripting Runtime och då får tillgång till exempelvis Dictionary (ett objekt):

Dim myDC As New Dictionary

och kan använda denna precis som vilket annat objekt som helst i VBA.

 

Andra är som sagt sen bindning, utan referens till Scripting kan du ändå skapa ett Dictionary

Dim myDC as Object
Set myDC = CreateObject("Scripting.Dictionary")

även här kan du använde ditt objekt som vilket annat men utan den hjälp du har av VBA-editorn ovan.

 

Fördelen? VBA-koden stannar inte, om du hanterar det rätt, om klassen du refererar till inte finns installerad, med tidig bindning blir det ett kompileringfel.

 

fler exempel här

http://www.dicks-clicks.com/excel/olBinding.htm

http://support.microsoft.com/kb/245115

 

Möjligt att testa de olika metoderna? Kan du nå Garp både tidigt och sent? Om inte sent, kanske en sökväg måste läggas till?

 

Som du märker, inte helt hemma i dessa vatten.

Länk till kommentar
Dela på andra webbplatser

jag har igentligen inte vetat innebörden av binding men det blev lite kalrare nu. Men jag har faktiskt testa de två olika metoderna utan att vet skillnaderna.

Har provat

Dim myDC As New Dictionary

och

Dim myDC as Object

Set myDC = CreateObject("Scripting.Dictionary")

 

båda sätten verkar funka om jag kör makrona från excel eller andra office applikationer men inte när webbservern gör anropet.

 

Konstiga är ju att om jag anvvänder mig av ADODB.Connection objektet så funkar det oavsett..

 

Hur menar du med att lägga upp en sökväg??

 

En annan liten intressant notis är att själva garp kienten måste vara igång på datorn där excelfilen körs som skapar Garp instanserna?

 

Som sagt jag provar alla ideer du kan komma på oavsett..

 

Tack för en bra insats :)

Länk till kommentar
Dela på andra webbplatser

När du exekverar ett program i Windows får det per standard Windows normala sökväg, dvs om programmet anropar något obekant söker Windows på denna sökväg efter objekt som matchar denna sökning.

Du kan säkert undersöka denna sökväg i ASP. (inte min domän). Kanske att du måste lägga till mappen där Garp.exe finns till sökvägen? det kan du säkerligen göra inifrån ASP...osäker.

 

 

fast vette tusan om jag kan hjälpa dig att få detta att fungera, jag vet ärligt talat inte vad det är som strular.

 

jag skulle tro att du nog får söka dig ut på nätet, hitta ett ASP-forum där det finns Excel-kunskap...

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...