Avatar billede painz Nybegynder
10. november 2000 - 17:34 Der er 24 kommentarer og
1 løsning

Vb-Word eksempel søges..

Hejsa..

Jeg har ledt med lys og lygt efter et eksempel i vb, hvor der bliver genere et Word dolument, ud fra hvad der står i db..

Det skal bruges til at lave en kompunent med.
Så jeg fra en ASP side sender en \"request\" med eks. bruger id med, så slår dll\'en op i en db, og henter alle data på den bruger, og derefter generers et Word doc ud fra en template.

db eks.

user:
UserID, Name, ect.
Link,
UserID, link, ect.

Templaten skal eks. indeholde Navn og andre ops i det toppen til venstre. Og der under i en tabel skal link og andre være..

Jeg har fundet et eks. på http://www.asptoday.com/articles/19990825.htm men kan ikke få det til at virke..
Men der kan i se hvad det er jeg gerne vil have..

Og hvis i ikke har noget i mod det vil jeg gerne ha tilladelse til at give/bruge det eks. som i/du lavet til andre..

Mail til mig hvis der et eller andet som i vil vide mere om.. brisans@get2net.dk
Avatar billede enlize Nybegynder
10. november 2000 - 17:38 #1
Avatar billede enlize Nybegynder
10. november 2000 - 17:41 #2
Når du gemmer teksten, gemmes det i en .txt fil.
Du kan sagtens ændre det, så du indlæser det ind i en database, da det er en streng der indlæses i .txt dokumentet.
Avatar billede painz Nybegynder
11. november 2000 - 01:11 #3
Hej igen..

Der er ikke et af de eksempler på microsofts side der kan bruges.

Det som jeg søgere en et eksembel der laver en word-fil (.doc) ud fra en template (.dot) med en tabel i.

Og jeg vil ikke indlæse noget i en db. men hente nogle data ud som skal fyldes ind i en tabel som findes i templaten..
Hvor lang tabelen er vides ikke for det kommer an på det udtræk som man laver fra db\'en.

Det eksembel som vises på :
http://www.asptoday.com/articles/19990825.htm
viser \"næsten\" det som jeg søger. Men ikke helt..

håber at det var bedre forklarende..

PainZ
Avatar billede vbghost Nybegynder
11. november 2000 - 18:18 #4
.doc er en del af RTF formatet.. (Rich Text Format), og den er en VB-komponent til den, Microsoft RichText Box (5.0,6.0)

Når du gemmer RTF, kan word sagtens åbne dem, og når du gemmer i Word (.doc), kan RTF boxen sagtens åbne dem (dog uden extra feat. som Skygge på teksterne osv. Men Fed, Kursiv, Centrer tekst kan den godt åbne...
Avatar billede vbghost Nybegynder
11. november 2000 - 18:21 #5
det er i hvert fald sådan du kan få et word document...
Avatar billede vbghost Nybegynder
11. november 2000 - 18:24 #6
jeg kan også lave et eks. hvor jeg kan vise hvordan du kan lave et word document...
Avatar billede vbghost Nybegynder
11. november 2000 - 18:30 #7
Et RTF temp. her kan du oprette tabeller, text, farve, skrift type... og hvis du kopiere denne tekst, indsætter den i notepad, og gemmer den som .doc, kan word sagtens læse den.

{\\rtf1\\ansi\\ansicpg1252\\deff0\\deftab720{\\fonttbl{\\f0\\fswiss MS Sans Serif;}{\\f1\\froman\\fcharset2 Symbol;}{\\f2\\fswiss MS Sans Serif;}}
{\\colortbl\\red0\\green0\\blue0;}
\\deflang1030\\pard\\plain\\f2\\fs17 Hej...
\\par }

Avatar billede painz Nybegynder
11. november 2000 - 19:37 #8
Hej igen,,
Og det er en udemærket ide med et RTF document,
Men det er heller ikke lige det som jeg søger.

Jeg vil gerne se et eksempel med en access db. en word template.
Templaten skal have en tabel hvor et recordset bliver indsat.

hvis det er nemmere at lave med en RTF template,er det helt ok..

I det eksempel som jeg fandt i ASP, kan jeg ikke få til at virke. Og men det skulle kunne næsten det som jeg søger. Det bygger godt nok ikke på en db, men en form som man udfylder, og sender afsted.

Jeg har søgt en masse forskellige steder men har ikke fundet noget som kan bruges.

Det som det hele skal ende med er at jeg vil laver en dll, som jeg kan bruge i APS.
Dll\'en skal lave et word.doc udfra en templete, og det som der ligger i db\'en på den enkelte bruger, og udfylde en tabel ud fra et recordset.

Hvis det er fulstendigt umuligt eller urimeligt det som jeg søger, så sig lige til, og jeg vil lukke spørgsmålet..(Håber IKKE at det kommer der til).

PinZ
Avatar billede painz Nybegynder
11. november 2000 - 20:07 #9
Formuleret så kort som jeg overhovedt kan.

Jeg vil meget gerne se et eksempel som indeholder:
En access database.
En word template (indeholdene en tabel)
Tabellen ud fyldes med et udtræk fra databasen.

PainZ
Avatar billede painz Nybegynder
12. november 2000 - 00:25 #10
Hej, igen igen !! *LOL*

Nu skal i dare se her.. Jeg har lavet noget som næsten virker. *LOL*
Gider i kigge på det og hjælpe mig med at få det tilrettet så det virker..

Problemet er at det document som der tabeller er i og hvor data indsættes ikke er det document der gemmes, men der i mod et tomt document.

Og hvordan indsætter jeg noget tekst under tabelen?


Her er lidt kode !!
---------------------------------------

Option Explicit

Private objWord As Word.Application

Private Sub Command1_Click()
 
  Dim strConn As String
  Dim conn As ADODB.Connection
  Set conn = New ADODB.Connection
 
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
 
  strConn = \"TestDB\"
 
  conn.Open strConn
 
  rs.Open \"SELECT * FROM Pri_Artikler\", conn, adOpenKeyset, adLockOptimistic
  If Not rs.BOF Or rs.EOF Then
    rs.MoveFirst
   
    Dim tabRow As Integer
    Dim j As Integer
    Dim objDocument As Word.Document
    Set objWord = New Word.Application
 
    Set objDocument = objWord.Documents.Add
    objDocument.Application.Documents.Add \"E:\\VB Files\\Henrik\\worddoc\\Fax.dot\", False
    objDocument.Application.Visible = True
 
    tabRow = 2
    objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow - 1).Borders.Enable = False

    For j = 1 To rs.RecordCount
      objDocument.Application.ActiveDocument.Tables(1).Rows.Add
      objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow).Borders.Enable = False
      objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(1).Range.InsertAfter rs(\"Art_nr\")
      objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(2).Range.InsertAfter rs(\"Overskrift\")
      objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(3).Range.InsertAfter rs(\"Colli\")
      objDocument.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(4).Range.InsertAfter rs(\"Pris\")
      tabRow = tabRow + 1
      rs.MoveNext
    Next
   
    objDocument.SaveAs FileName:=\"E:\\VB Files\\Henrik\\worddoc\\\" & Format(Now, \"hh-mm-ss_dd-MM-yyyy\") & \".doc\"
   
    objDocument.Close
    Set objDocument = Nothing
    Set objWord = Nothing
  End If
  rs.Close
  conn.Close
  Set rs = Nothing
  Set conn = Nothing
End Sub

-----------------------------------

PainZ
Avatar billede painz Nybegynder
12. november 2000 - 01:47 #11
Har rettet det så den rigtige fil gemmes..

    objDocument.SaveAs FileName:=\"E:\\VB Files\\Henrik\\worddoc\\\" & Format(Now, \"hh-mm-ss_dd-MM-yyyy\") & \".doc\"

Er rettet til:

    objDocument.Application.ActiveDocument.SaveAs FileName:=\"E:\\VB Files\\Henrik\\worddoc\\\" & Format(Now, \"hh-mm-ss_dd-MM-yyyy\") & \".doc\"

Tror snart at jeg lukker dette spørgsmål..
Men hvis der er nogle der har nogle ide til at gære det bedre så sig endelig til!!

PainZ
Avatar billede danagadk Nybegynder
12. november 2000 - 16:37 #12
PainZ, kan dette bruges??
/Dan
----------------------
Option Explicit

Private objWord As Word.Application

Private Sub Command1_Click()
 
  Dim strConn As String
  Dim conn As ADODB.Connection
  Set conn = New ADODB.Connection
 
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
 
  strConn = \"TestDB\"
 
  conn.Open strConn
 
  rs.Open \"SELECT * FROM Pri_Artikler\", conn, adOpenKeyset, adLockOptimistic
  If Not rs.BOF Or rs.EOF Then
    rs.MoveFirst
   
    Dim tabRow As Integer
    Dim j As Integer
    Dim objDocument As Word.Document
    Dim objWord As Word.Application
   
    Set objWord = New Word.Application
    objWord.Visible = True
 
    \' Fejlen lå her, hvor du først fik Add\'et et ekstra dokument, og til dets aplikation (Word) fik tilføjet et ekstra dokument (ud fra templaten) som du ingen reference havde til efterfølgende
    Set objDocument = objWord.Documents.Add(\"E:\\VB Files\\Henrik\\worddoc\\Fax.dot\", False, , True) \' sidste True er for at dokumentet skal være synligt
 
    tabRow = 2
    With objDocument.Tables(1)
      .Rows(tabRow - 1).Borders.Enable = False
     
      For j = 1 To rs.RecordCount
        .Rows.Add
        .Rows(tabRow).Borders.Enable = False
        .Rows(tabRow).Cells(1).Range.InsertAfter rs(\"Art_nr\")
        .Rows(tabRow).Cells(2).Range.InsertAfter rs(\"Overskrift\")
        .Rows(tabRow).Cells(3).Range.InsertAfter rs(\"Colli\")
        .Rows(tabRow).Cells(4).Range.InsertAfter rs(\"Pris\")
        tabRow = tabRow + 1
        rs.MoveNext
      Next
    End With
   
    objDocument.SaveAs FileName:=\"E:\\VB Files\\Henrik\\worddoc\\\" & Format(Now, \"hh-mm-ss_dd-MM-yyyy\") & \".doc\"
    objDocument.Close
    Set objDocument = Nothing
   
    \' Test evt. for at se om der er andre dokumenter åbne i dette Word instance og luk så Word hvis antallet er 0
    If objWord.Documents.Count = 0 Then objWord.Quit False \' Hvis der alligevel skulle være nogen dokumenter (!??), så ignorer dem og luk
    Set objWord = Nothing \' så kan objWord sættes til Nothing (lukker man ikke først vil der være en amsse Winword.exe instanser i hukommelsen)
  End If
  rs.Close
  conn.Close
  Set rs = Nothing
  Set conn = Nothing
End Sub
Avatar billede vbghost Nybegynder
12. november 2000 - 19:48 #13
kære venner....?

hvorfor skal alting være så \"komponent agtigt??\"...

Et Word-document er opbyggget efter et RFT document (og opbyggelsen er sku ikke svært at oversætte).

DVS.:
Du kan lave et .doc document med kode, uden at åbne word, eller andre ting... fks. kan du sagtens lave en tabel i tekst (rtf-kode tekst), og en skabelon, hvor du derefter med kode udfylder og gemmer den doc fil.

Det er RFT (doc) kode som sagtens kan åbnes fra Word:
{\\rtf1\\ansi\\ansicpg1252\\deff0\\deftab720{\\fonttbl{\\f0\\fswiss MS Sans Serif;}{\\f1\\froman\\fcharset2 Symbol;}{\\f2\\fswiss MS Sans Serif;}}
{\\colortbl\\red0\\green0\\blue0;}
\\deflang1030\\pard\\plain\\f2\\fs17 Hej...
\\par }

Det der \"Hej...\" kan du sagtes skifte ud, så der kommer et værdi fra DB databasen (fks. et navn), sådan kan du også finde ud af hvordan Word opretter tabeller, lave en skabelon og udfylde den med diverse værdier... Det er der usmart at bruge system kræfter på at indlæse et Word-komponent eller at åbne word, når man kan lave det smartere.

Men valget er jo dit, som sagt: Hvis du skal lave en visuelt HTML editor: Kan du bruge 2 ting: En hvor du laver din egn tekstboks, eller at bruge RFT eller andres tekstbokse... de andres vil altid være dårligere end din egn, siden du slev bestemmer hvad du vil proppe i den, og i de andres mangler der altid et eller andet...
Avatar billede danagadk Nybegynder
12. november 2000 - 23:13 #14
vbghost, jeg forstår udemærket at du synes det er kedeligt med alle de komponenter - og jeg kan da kun give dig ret i, at det bliver en smule tungt. Jeg ville da også hellere kunne lave tingene lette og kompakte, men der forventes altså noget andet idag. Det skal være letlæseligt og kunne læses af andre som en dag skal kunne overtage ens kode. Idag kodeer man ikke så langt nede som jeg gjorde engang og som du tilsyneladende også gerne vil, men jeg tror at man må se i øjnene, at man får meget mere ved at bruge komponenterne end man vinder i (eksekverings)tid ved at kode tingene lidt mere \'low-level\'.
En af de ting jeg vil påpege her kunne være danske tegn og andre tegn, som du i din programmering måske ikke har mulighed for at tage højde for som det ser ud nu, for slet ikke at tænke på portabiliteten fremover.
Lige bortset fra det, så skal Word forbi en lille konverteringsindlæsning for at åbne et TF dokument, men skrevet rigtigt, så fylder det naturligvis noget mindre end et klodset Word-dokument... det medgi\'r jeg... *S*

/Dan
Avatar billede painz Nybegynder
13. november 2000 - 08:16 #15
Hejsa..

Dan, i denne linje får denne fejl:
Wrong number of arguments or invalid property assignment 

Set objDocument = objWord.Documents.Add(\"E:\\VB Files\\Henrik\\worddoc\\Fax.dot\", False, , True)

vbghost..
Jeg giver dig også ret i at det egentlig er en dårlig løsning med et word doc. Men det var jo det som jeg søgte..
Jeg er meget grøn inden for VB, og kender ikke ret meget til det at udvikle apps, Jeg koder i asp til hverdag, og suntes at det ville være rart hvis jeg kunnne udvikle nogle kompunenter, som jeg kunne bruge sammen med asp.

Jeg vil blive meget glad hvis du gider at lave et eksempel med en tabel i et RTF dokument som udfyldes med et recordset..

Og min lille word løsning er meget langsom, selv på min pc, som jeg ikke selv syntes er langsom.. (Athlon Thunderbird 800 MHz, 256MB)..

Og hvis i begge (vbghost & Dan) gider at sende et \"svar\", så vil jeg bele sol og vind lige mellem jer. (point mæssigt).

PainZ
Avatar billede danagadk Nybegynder
13. november 2000 - 09:46 #16
OK, jeg kunne godt selv se fejlen - selvom jeg antog at du brugte Office 2000, for der *mener* jeg dette burde kunne lade sig gøre.
I Office 97 findes 3. og 4. parameter ikke, og for at være sikker på hvilke parametre man sigter på kan man jo endda angive dem (Template:=\"...\"), sådan:

Set objDocument = objWord.Documents.Add(Template:=(\"E:\\VB Files\\Henrik\\worddoc\\Fax.dot\")

Hvis dette er noget du looper med, altså skal udføre en masse gange, så undlad at Quit\'e Word og oprette en ny instans hele tiden (Set objWord = New Word.Application), men genbrug den eksisterende instans.

/Dan
Avatar billede danagadk Nybegynder
13. november 2000 - 09:47 #17
Åh, ja... du bad jo om et svar, såøøh..: Svar

Kan du ikke selv lave en kommentar om til et svar? Er ny på Eksperten - men det kan man da på Experts-Exchange.

/Dan
Avatar billede hba Nybegynder
13. november 2000 - 10:07 #18
Nu prøver jeg at lave et \"Svar selv\"..

Jeg har både offive 97 og Office 2000 installeret.

Det er Word 2000 som blive åbnet, når programmet køre. Så det er da lidt mystisk..
Avatar billede painz Nybegynder
13. november 2000 - 10:09 #19
Nu prøver jeg at lave et \"Svar selv\"..

Jeg har både offive 97 og Office 2000 installeret.

Det er Word 2000 som blive åbnet, når programmet køre. Så det er da lidt mystisk..
Avatar billede danagadk Nybegynder
13. november 2000 - 10:56 #20
Hmmm... måske Type Library\'et fra Word.8 (97) bliver brugt i stedet for det nye fra Word.9 (2000) - det kunne være grunden.
Nå men det er vel ikke det store problem... Fik du det til at virke?

/Dan
Avatar billede painz Nybegynder
13. november 2000 - 11:12 #21
Hej Dan..

Jeg havde selv nået at finde ud af det inden du kom med løsningen..

Set objDocument = objWord.Documents.Add(Template:=\"E:\\VB Files\\Henrik\\worddoc\\Fax.dot\")

Mange tak for hjælpen..

Kan du evt. lave et rtf eksempel i tilfælde af at vbghost ikke laver et?

Det tager min PC ca. 6-7 sek. at lave et doc hvor der indsættes 25 rækker..
Så jeg vil gerne se hvor lang tid det vil tage at lave et rtf doc.
Avatar billede danagadk Nybegynder
13. november 2000 - 17:31 #22
painz, jeg kunne godt lave et eksempel, men jeg skrev faktiskt at det er lidt low-levet netop fordi løsningen bliver meget specifik, når man bruger RTF - medmindre man opbygger et helt lille funktionsbibliotek af formatteringsfunktioner til RTF, for det så absolut det pæneste. Som du nok kan forstå, så laver jeg ikke sådant et funktionsbibliotek til dig - jeg har andet at bruge min tid til *S*.

Du skulle dog prøve selv, at gemme det færdige resultat af noget du mener ser rigtigt ud i .rtf format, og så åbne den .rtf filen i Notepad (eller UltraEdit-32 eller det du nu foretrækker). Så kan du sikkert se sammenhængene i layoutet. Skal du se de helt rigtige specifikationer, så står de blandt andet her: http://msdn.microsoft.com/library/default.asp?PP=/library/toc/specs/specs10.xml&tocPath=specs10&URL=/library/specs/rtfspec.htm

/Dan
Avatar billede painz Nybegynder
13. november 2000 - 18:41 #23
Hej Dan..

Det med fonktionsbiblioteket kan jeg ude mærket forstå..
Tak for linket..
Avatar billede vbghost Nybegynder
13. november 2000 - 19:55 #24
hvorfor lukker i spørgsmålet...?? hvad er meningen!

men eller Painz jeg gider godt vise dig ind i Verden af RTF, istedet for at åbne word for at lave tabeller... det er da tåbeligt, og et word doc. fylder sku 30 kb..??

men ellers syntes jeg det er sku synd at du har allerede afsat dit svar ;(
Avatar billede guro.not Nybegynder
18. maj 2001 - 13:26 #25
vbghost jeg havde ikke set din sidste kommentar.

Står dit tilbud stadig ved magt?

Hilsen
Henrik
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