Avatar billede madssch Nybegynder
01. juli 2003 - 11:35 Der er 20 kommentarer og
1 løsning

Asp til Word

Hej Eksperter!  ;-)

Jeg har et system, som når man opretter en post i databasen, automatisk skal generere en Word-fil. Jeg ved der findes mange indlæg omkring netop dette her på Eksperten, men intet af det har rigtig kunnet hjælpe mig.

Mit spørgsmål er: Er der nogen som har et "færdigt" script liggende som kan gøre netop det jeg omtaler? - Og er der evt. nogen som kender til en god (måske endda gratis) komponenet til at gøre dette?

Jeg har læst, at det skulle kunne lade sig gøre uden nogen form for komponent, men så får jeg en eller anden form for "makro-fejl..."

Håber der er nogen der kan hjælpe!

På forhånd tak!
Avatar billede dta Nybegynder
01. juli 2003 - 11:58 #1
Et par muligheder uden komponenter:

1.    Lave dokumentet i RTF. RTF er et tekst format som kan genereres i ASP og umiddelbart åbnes i WORD. Det kræver et stor arbejde med at sætte sig ind i RTF.
2.    Bruge XMLHTTP modulet. Lave en generisk word fil som kun indeholder macroen og henter dataene fra serveren som XML og derfra opbygger dokumentet. Da dette kan laves i Vbscript/Visual basic er der ikke langt fra ASP, selve kommandoerne i Word er til at finde ud af med den indbygget hjælp. Bagdel: Brugeren skal acceptere macroer i word dokumentet.
Avatar billede madssch Nybegynder
01. juli 2003 - 12:01 #2
Som det er lige nu, genererer jeg et almindeligt tekstdokument, men med "efternavnet" .doc.

Mit problem her er, at jeg ikke har (så vidt jeg ved) mulighed for at formatere teksten på nogen måde.

Kan man det?
Avatar billede dta Nybegynder
01. juli 2003 - 12:17 #3
Som sagt skal du enten bruge RTF (Ikke nemt) eller også XMLHTTP som du lægger i en macro. Tekst funktionen hjælper ikke noget. Alternativt skal du prøve at lave HTML i stedt for tekst men det bliver åbnet som HTML og ikke som et rigtigt word dokument.

XMLHTTP vejer har jeg her kopieret noget kode ind som viser vejen i et EXCEL dokument.

Dim xmlhttp
    Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
    Dim xmldoc
    Set xmldoc = CreateObject("Microsoft.XMLDOM")
    xmldoc.validateOnParse = True
    xmldoc.async = False
                Call xmlhttp.Open("POST", wwwadr & "xmlmedlemsliste.asp?Action=Opdater&u=" & Username & "&p=" & password & urlMsg, False)
                Call xmlhttp.send("")
                'MsgBox (xmlhttp.responsetext)
                xmldoc.loadxml (xmlhttp.responsetext)
                If xmldoc.parseError.errorCode <> 0 Then
                        strErrMsg = "Problemer med indlæsningen af Data:" & vbCrLf & _
                        "  Fejl #: " & xmldoc.parseError.errorCode & vbCrLf & _
                        "  Beskrivelse: " & xmldoc.parseError.reason & vbCrLf & _
                        "  I fil: " & xmldoc.parseError.url & vbCrLf & _
                        "  Linie #: " & xmldoc.parseError.Line & vbCrLf & _
                        "  Karacter # i linie: " & xmldoc.parseError.linepos & vbCrLf & _
                        "  Karacter # i fil: " & xmldoc.parseError.filepos & vbCrLf & _
                        "  Kilde linie: " & xmldoc.parseError.srcText & vbCrLf & vbCrLf & _
                        "Opdateringen stopper (fejlen skyldes sikkert at der ikke kan opnås forbindelse til www.haslev-fc.dk)"
                        Status.Hide
                        MsgBox (strErrMsg)
                        Exit Sub
                    End If
                If xmldoc.documentelement.Text = "OK" Then
                      Work.Unprotect
                      Work.Range(Cells(C.Row, 1), Cells(C.Row, 14)).ClearContents
                      Work.Range(Cells(C.Row, 1), Cells(C.Row, 14)).Interior.ColorIndex = xlColorIndexNone
                      Work.Protect
                End If
 

Jeg er ikke sikker på om jeg har skåret koden rigtigt så brug den som reference
Avatar billede madssch Nybegynder
01. juli 2003 - 12:20 #4
Hmmm... Det får jeg helt ærligt ikke ret meget ud af. Ville allerhelst holde det i ren ASP (hvis muligt).

Jeg har fundet et script her på Eksperten som skulle kunne gøre hvad jeg søger.

Problemet er, at jeg får fejlen: "ActiveX component can't create object: 'word.application'"

Hvad kan dette skyldes?
Avatar billede dta Nybegynder
01. juli 2003 - 12:32 #5
At word ikke er installeret på serveren. Det den gør er at lave en instan på serveren og så gør du det samme som jeg forsøjte med macroen. Forskellen er hvor Word er installeret.
Avatar billede madssch Nybegynder
01. juli 2003 - 12:40 #6
Som jeg har forstået, er det denne linje der gør forskellen:

WordApp.Application.Visible = False

True = Word er på serveren
False = Word er lokalt

Er det korrekt forstået?

Uanset hvad jeg prøver, så er fejlen den samme..?
Avatar billede madssch Nybegynder
01. juli 2003 - 12:48 #7
Jeg har nu lagt systemet lokalt, og jeg får nu denne fejl:

"Makroen kan ikke åbnes."

Er det stadig samme problem?
Avatar billede dta Nybegynder
01. juli 2003 - 12:54 #8
Du skal skælne mellem om du afvikler koden på serveren eller lokalt. Gennerelt vil jeg ikke anbefale dig at afvikle ASP lokalt da dette er blokeret i alt for mange browsere på grund af sikkerheds risikoen.

Når du arbejder på din udviklings maskine kan det godt være svært at se havd du lave på serveren og lokalt da WORD jo vil være tilgænglig for begge disse miljøer da det er samme maskine.

Jeg kan ikke se af ovenstående hvor du afvikler koden, så prøv at poste den.
Avatar billede madssch Nybegynder
01. juli 2003 - 12:56 #9
Her er koden jeg bruger:

Set Query_funktioner = objConnect.Execute("Select * From funktioner Order by overskrift1")
Set Query_tilbud = objConnect.Execute("Select * From tilbud Where id = "& intId &"")
Set Query_kunde = objConnect.Execute("Select kunde From kunder Where id = "& Query_tilbud("kundeId") &"")


    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Add()
       
    WordApp.Application.Visible = True
       
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore("Testing")       
'    MyRange1.Style = "Heading 1"       
       
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore(vbcrlf & "Weeh")

    WordDocPath = "c:\"
    WordDoc.SaveAs WordDocPath & Query_kunde("kunde") & "_" & Query_tilbud("dato") & ".doc"
       
    WordDoc.Close
    WordApp.Quit
   
    Set WordDoc = Nothing
    Set WordApp = Nothing

    MsgBox("Completed")
Avatar billede madssch Nybegynder
01. juli 2003 - 12:57 #10
Linjen "WordApp.Application.Visible = True" er ændret til "WordApp.Application.Visible = False" ...
Avatar billede dta Nybegynder
01. juli 2003 - 13:03 #11
Koden bliver afviklet på "serveren". At macroen ikke kan åbnes kan være fordi du har sat sikkerheden i Word højt så du ikke kan afvikle macroer.

Kik under: Tools-> Macoer-> Security (Word UK version)

Jeg har findet en andet script som bruger HTML som base så du ikke behøver at lære om formatering i Word.

'**************************************
    ' Name: HTML2Word
    ' Description:Convert HTML web pages int
    '    o Word documents. This is great for crea
    '    ting word documents on the fly. Can be u
    '    sed to email documents after finnished c
    '    onverting. This code is in various place
    '    s on the web. I'm supprised I didn't fin
    '    d it on PSC. This is my own version for
    '    you to modify as you wish. Larger files
    '    take longer to process. My waiting perio
    '    d is not good! System resources will be
    '    pegged. Seems to have problems with Webs
    '    ite URLs, but files on the same server d
    '    on't give me as many problems.
    ' By: Lewis Moten
    '
    '
    ' Inputs:SourceURL, TargetFileName
    '
    ' Returns:None
    '
    'Assumes:None
    '
    'Side Effects:None
    'This code is copyrighted and has limite
    '    d warranties.
    'Please see http://www.Planet-Source-Cod
    '    e.com/xq/ASP/txtCodeId.7179/lngWId.4/qx/
    '    vb/scripts/ShowCode.htm
    'for details.
    '**************************************
   
    <%
    Option Explicit
    HTML2Word "file://" & Server.MapPath("test.htm"), Server.MapPath("test.doc")
    Response.Write "Finnished at: " & Now()
    Sub HTML2Word(ByRef pstrSourceURL, ByRef pstrTargetFile)
        Dim lobjWordApp
        Dim lobjInternetExplorer
        Set lobjWordApp = Server.CreateObject("Word.Document")
        Set lobjInternetExplorer = Server.CreateObject("InternetExplorer.Application")
        lobjInternetExplorer.Navigate pstrSourceURL
        IEStandBy lobjInternetExplorer
       
        lobjInternetExplorer.document.body.createTextRange.execCommand("Copy")
        IEStandBy lobjInternetExplorer
       
        lobjWordApp.Content.Paste
        lobjWordApp.SaveAs pstrTargetFile
        lobjWordApp.Close
       
        lobjInternetExplorer.Quit
       
        Set lobjInternetExplorer = Nothing
        Set lobjWordApp = Nothing
    End Sub
    Sub IEStandBy(ByRef pobjInternetExplorer)
        ' Not good (Pegs system resources)
        ' Need to find a way to "sleep"
        While pobjInternetExplorer.busy:Wend
        While Not pobjInternetExplorer.Document.readyState = "complete":Wend
    End Sub
    %>
Avatar billede madssch Nybegynder
01. juli 2003 - 13:09 #12
Mht. mit eget script:

Jeg kører pt. systemet lokalt, og prøvede at ændre sikkerheden for makroer, men ligemeget hjalp det. Word ligger ligeledes på min lokale maskine.

Mht. det script du har pastet:

Jeg får en fejl om, at objektet er blevet slettet. Fejlen ligger på denne linje:

lobjWordApp.Content.Paste

Hvad gør jeg så galt?
Avatar billede dta Nybegynder
01. juli 2003 - 13:13 #13
Jeg gætter: Men tror at det har med sikkerheden at gøre, hver gang du "skriver" til word så stopper den. Sæte sikkerheden til lav og prøv at lukke word.
Avatar billede madssch Nybegynder
01. juli 2003 - 13:14 #14
Nej, det er desværre samme problem...  :(
Avatar billede madssch Nybegynder
01. juli 2003 - 13:44 #15
Har du selv prøvet scriptet?
Avatar billede dta Nybegynder
01. juli 2003 - 13:45 #16
<<WordApp.Application.Visible = False>> angiver om applikatione skal være synlig i Windows eller afvikle i baggrunden intet at gøre med loakalt eller på serveren.

Jeg har testet "macroen" i word og den virker, jeg kikker videre
Avatar billede madssch Nybegynder
01. juli 2003 - 13:47 #17
Tak! ;-)

Hvad mener du med at du har testet makroen?
Avatar billede dta Nybegynder
01. juli 2003 - 13:58 #18
Prøv at checke om du tillader ActiveX. Elelr bliver du nød til at vente til i aften hvor jeg har adgang til mit prod miljø.

Ja jeg har prøvet scriptet!
Avatar billede madssch Nybegynder
01. juli 2003 - 14:03 #19
Jeg kan ikke lige umiddelbart se om jeg tillader ActiveX. Hvor gør jeg bedst det henne?
Avatar billede madssch Nybegynder
01. juli 2003 - 15:12 #20
Åh ja, selvfølgelig! (DOH!)

Jo, jeg tillader ActiveX...
Avatar billede madssch Nybegynder
17. marts 2005 - 14:07 #21
...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester