Jag sitter och trasslar väldigt mycket med VBA för att få till en lösning och det har dykt upp många frågetecken..
I excel kan man ju gå på Verktyg->referenser
Här har man ju alla tillgängliga funktioner (tilläggsprogramm).
Här är mina första fråga. Vad kallas dessa, är det klasser eller bibliotek.. Jag fattar ju att de tillför viss funktionalitet i programmet..
Jag behöver nog få dom olika begreppen lite tydliggjorda så man fattar vad man snackar om..
Man ser ju också vad alla dessa referenser pekar mot, det verkar ju kunna vara .ocx filer eller .dll filer, och det som strular för mig är en referens som pekar mot en .exe fil?
Vad blir skillnaden på dessa, är det också så att dessa måste vara registrerade i windowsregistret?
När jag skapar instanser av dessa i programeringen så använder jag ju typ:
Createobject("ADODB.Connection")
eller
Dim object as new ADODB.Connection")
finns skillnader i säkerheten vad det gäller referenser leder till .exe object eller .dll och .ocx?
Skapar jag makro i excel som i sin tur skapar olika instanser m.m. så funkar det att anropa från övriga Office programm osv, men om jag anropar makrot från en asp sida så fungerar det inte.. Detta gäller just objekt med referens till en .exe fil?
Blev en del frågor men nu är det mest frågor, vet ju knappt vad man pratar om :)
ok , det gjorde vissa frågor lite tydligare... Detta gäller ett intranät där det finns en väldigt avancerad excelfil som gör ganska många beräkningar.. Det jag måste lösa är att hämta information från denna excelfil och sedan använda det på webbsidan (intranätet).
Jag har lyckats lösa detta genom att skapa en instans av excel och på så sätt kunna öppna excelfilen och till och med skriva ut från filen med anrop från asp script.. Mitt problem är nu att när jag skriver ut från asp script där jag öppnat excelfilen så får jag inte rätt teckensnitt, men om jag öppnar excelfilen rent "fysiskt" genom interaktivitet och skriver ut så blir det rätt..
HUr funkar det när man skapar en instans av ett objekt och jobbar med det? något som påverkar teckensnitten, läst någonstans att det är ett systemkonto som exekverar ett program om jag exempelvis använder
Server.createobject("Excel.application")
Kan det stämma, har sökt som en tok men lyckas inte hitta någon information om detta?
Mitt problem är nu att när jag skriver ut från asp script där jag öppnat excelfilen så får jag inte rätt teckensnitt, men om jag öppnar excelfilen rent "fysiskt" genom interaktivitet och skriver ut så blir det rätt..
Hur menar du.
Är det så att du ifrån din ASP-sidan anropar en funktion i EXCEL filen som sedan returnerar ett resultat tillbaka till din ASP-Kod och du därifrån printar ut denna information på din websida.
Eller menar du att du genererar ett excel dokument från din ASP-kod som laddas ner från din websida och det i detta dokument blir ett annat typsnitt än ditt "orginal dokument".
Jag har snurrat så mycket med detta att jag knappt själv vet vad jag gör, ursäkta att det är lite rörigt..
Så här är det:
jag har en excelfil med flera olika flikar som gör olika beräkningar (avancerade och allmänt krångliga)
Nu har jag en asp sida på intranätet som öppnar denna excelfil för att sedan skriva ut en av flikarna..
Då gör jag det i stil med:
<%
Set xlApp = Server.createobject("Excel.application")
Set xlWorkBook = xlApp.workbooks.open(xlfil.xls)
xlWorkBook.sheets(1).Printout
%>
När jag gör enligt ovan metod så skrivs dokumentet ut med något teckensnitt jag inte känner igen, och det är inte det man ser när man fysisiskt öppnar och arbetar med excelfilen.. Samma är att om jag öppnat excelfilen rent fysiskt och skriver ut så blir det rätt teckensnitt??
IIS user har jag satt till samma konto som jag loggar in med (admin konto)..
En annan sak jag itne heller förstår är att om jag via asp kod anropar ett makro i en excelfil så fungerar det kanon, men om jag i ett excelmakrot lagt till en rad för sheets(1).Prinout så händer inget när jag anropar det från asp script, men om jag öppnar excelfilen fysiskt och kör makrot så skrivs det ut??
Då använder jag kod typ:
<%
Set xlApp = Server.createobject("Excel.application")
Set xlWorkBook = xlApp.workbooks.open(xlfil.xls)
xlApp.Run "Test"
%>
Jag använder redan Windows Authentication.
KOm nog precis fram till att detta inte blir något roligt problem.. Nu har jag testat på en Windows xp maskin med IIS 6 och då funkar det, men när jag kör på Winsows 2003 server med IIS 6 så händer inget.. MÅste väll vara någon säkerhetspryl antar jag som pajar allt...
Nedan kod anropar ett makro i filen print.xls
Set oExcelApp = CreateObject("Excel.Application")
oExcelApp.DisplayAlerts = False
oExcelApp.Visible = FALSE
Set oWorkbook = oExcelApp.workbooks.Open(server.mapPath("print.xls")) 'Öppnar fil med arbetsböcker
oExcelApp.Run "'print.xls'!test" 'Anropar makro i fil
oWorkbook.Close False 'stänger objektet
oExcelApp.Quit 'stänger excelobjektet
Excel kod
Sub test()
Application.ActivePrinter = "Xerox Phaser 6125N på Ne00:"
ThisWorkbook.Sheets("Blad1").PrintOut
End Sub
Så ovan funkar på Xp maskinen men inte windows server maskinen... Fan!!!
ursäkta språket..
Här är en rolig sak, denna koden funkar däremot på båda maskinerna:
Set oExcelApp = CreateObject("Excel.Application") 'Skapar excelobjektet
oExcelApp.DisplayAlerts = False
oExcelApp.Visible = FALSE 'visar inte excelfönstret
Set oWorkbook = oExcelApp.workbooks.Open(server.mapPath("print.xls")) 'Öppnar fil med arbetsböcker
oExcelApp.ActivePrinter = "Xerox Phaser 6125N på Ne00:"
oWorkbook.sheets(1).Printout
oWorkbook.Close False 'stänger objektet
oExcelApp.Quit 'stänger excelobjektet
Måste väll ha något med säkerheter att göra när det inte går anropa utskriftkommandot innifrån excel??
Puuhh..
@nders:
Jag vet inte var tråden hör hemma riktigt, försökte söka på lite liknande problem och hittade många av trådarna i detta forumet..
Hoppas alla har en go kväll, öl vore sjukt fint nu!
Eftersom tråden inte har något med .NET att göra flyttar jag den till "Webbutveckling - Övrigt".
Jag tycker också det låter som att det är någon sorts rättighets- eller inställningsgrej på servern som bråkar. I min erfarenhet är det ALLTID problem med att automatisera Excel på en server. Det är inte meningen att man ska göra det. "Alla" gör det, men Microsoft vägrar stödja det. Saker du kan prova är:
* Se till att Excel alltid körs som administratör
* Prova att göra samma sak från något som inte är en asp-sida (typ en .vbs-fil eller liknande)
* Kolla att det är samma version av Excel på din XP-maskin som på servern
jo det har varit obgränsat med problem vad det gäller automatiseringen av excel.. Tyvärr kommer jag inte ifrån det utan behöver lösa det :(
Det är inte meningen att man ska göra det. "Alla" gör det, men Microsoft vägrar stödja det. Saker du kan prova är:
Då är jag inte ensamm alltså, har sökt hur mycket som helst på nätet men det känns ändå gasnak begränsat (för att vara internet)?
Några motfrågor..
Du skriver att jag alltid ska se till att excel körs som administratör:
Jag har ju nu satt ett användakonto med admin rättigheter i IIS som kör alla sidor, är det rätt så eller finns det någon annastans jag behöver kolla behörighet?
jag har provat att köra samma sak från en annan excelfil istället för ett asp script, då fungerar det: Ska jag pröva på något annat sätt??
Excelversionerna är desamma på båda maskinerna s det kan jag nog stryka..
Ang behörighet: om jag kör en excelfil via ett asp script och jag då angivit et konto i IIS'en som är det samma som jag är inloggad med, är det då det kontot som används när jag kör filen..
Jag läste för ett tag sedan på någon sida att det skulle vara ett systemkonto inblandat och för utskrifter så var man tvungen att lägga upp aktuella slrivare i registret för just systemanvändaren?
Man kan ju bryta ihop över den skiten...
Ny dag nya möjligheter !! (så länge man inte håller på med vba automation) :)
Okej som om jag förstår dig rätt så försöker du alltså skriva ut till skrivaren och inte skärmen.
Är det så att din IIS är på samma maskin som när du skriver sidan ifrån EXCEL direkt, eller är det så att din IIS ligger på en helt annan maskin och du försöker skriva ut från den. Om det är fallet så skulle det ju kunna vara så enkelt som att den font som du vill skriva ut med inte är installerade på servern och därför inte kan användas till din print.
precis den iden fick jag för ett par dagar sedan.. Men jag har isntallerat alal fonter på servern och direkt genom att öppna excelfilen p servern skrivit ut den, då ser det ok ut, men om det görs via asp scriptet som körs på samma server så blir det fel..
Du skriver att jag alltid ska se till att excel körs som administratör:
Jag har ju nu satt ett användakonto med admin rättigheter i IIS som kör alla sidor, är det rätt så eller finns det någon annastans jag behöver kolla behörighet?
Det borde gå att välja att excel.exe (typ via högerklick på exe-filen) alltid ska köras som administratör. Men jag vet inte hur det ser ut på en gammal 2003-server.
Beror på vilken version av Windows server man kör, och jag minns inte hur det är i 2003. I Windows 2008 kan man välja "Run this program as administrator" på fliken "Compatibility".
jag använder följande kod för att anropa ett makro i en excelfil:
Set oExcelApp = Server.CreateObject("Excel.Application") 'Skapar excelobjektet
oExcelApp.DisplayAlerts = False
oExcelApp.Visible = FALSE 'visar inte excelfönstret
Set oWorkbook = oExcelApp.workbooks.Open(server.mapPath("../mod_excel/test.xls")) 'Öppnar fil med arbetsböcker
oExcelApp.Run "'test.xls'!test(119)" 'Anropar makro i fil
Som ni ser så skickar jag med ett argument till makrot.
Makrot i excelfilen är inte konstigare än att det anropa en subrutin som finns i en modul i samma excelfil..
Ser ut så här:
Sub test(nr)
Call manual
end sub
Här kommer dte som är helt sjukt!!
När jag skickar med ett argument i anropet så verkar aldrig "Manual" anropet köras, men anrpar jag istället makrot utan argument så fungerar det?
oExcelApp.Run "'test.xls'!test" 'Anropar makro i fil
Kan bara inte förstå vad fan som händer?
Ursäkta franskan..
men det funkar om jag faktiskt fysiskt öppnar filen och kör det..
Enda jag kan komma fram till att det blir fel när man via asp script anropar ett makro och skickar med argument.. kör jag utan rgument så funkar det klockrent...