A anbj Medlem sedan juli 2000 231 inlägg Frågan 2 aug. 2004 12:19 #1 Är det någon som vet hur man gör för att via asp öppna ett nytt word dokument baserat på en viss mall och för att köra ett visst macro i det nya dokumentet? Vad jag har läst mig till så ska detta gå att göra, frågan är bara hur.....
/Anders
A anbj Medlem sedan juli 2000 231 inlägg Som jag fattade det så är den enda möjligheten att bygga ett ActiveX objekt som körs på klienten. Det kräver dock att man kan tillåta körning av ActiveX centralt, så att inte varje användare måste rodda med inställningar för det.
Ett annat alternativ är att länka till .lnk filer, i dessa kan man sätta diverse växlar som behandlar hur man ska öppna dokumentet:
http://support.microsoft.com/default.aspx?scid=kb;en-us;210565
anbj skrev:
Som jag fattade det så är den enda möjligheten att bygga ett ActiveX objekt som körs på klienten. Det kräver dock att man kan tillåta körning av ActiveX centralt, så att inte varje användare måste rodda med inställningar för det.
Ett annat alternativ är att länka till .lnk filer, i dessa kan man sätta diverse växlar som behandlar hur man ska öppna dokumentet:
http://support.microsoft.com/default.aspx?scid=kb;en-us;210565
Strunt i ActiveX och överför koden i makrot till webbsidan så att du manipulerar worddokumentet innan du skickar det till klienten.
S solbulle Medlem sedan mars 2001 5 287 inlägg Hur avancerad är wordfilen samt makrot?
Word filen är tom från början. Det är makrot som fyller word filen med informationen.
Så här ser makrot ut:
Sub Katalog()
With ActiveDocument.Styles(wdStyleNormal).Font
If .NameFarEast = .NameAscii Then
.NameAscii = ""
End If
.NameFarEast = ""
End With
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientPortrait
.TopMargin = CentimetersToPoints(2.5)
.BottomMargin = CentimetersToPoints(2.5)
.LeftMargin = CentimetersToPoints(2.5)
.RightMargin = CentimetersToPoints(2.5)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1.25)
.FooterDistance = CentimetersToPoints(1.25)
.PageWidth = CentimetersToPoints(21)
.PageHeight = CentimetersToPoints(29.7)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
End With
ActiveWindow.ActivePane.VerticalPercentScrolled = 0
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
If Selection.HeaderFooter.IsHeader = True Then
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Else
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
End If
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
'Kör funktionerna
Call Produkter
Call Framsida
Call Innehålssförteckning
Selection.EndKey Unit:=wdStory
Selection.TypeBackspace
Selection.HomeKey Unit:=wdStory
End Sub
Sub Innehålssförteckning()
Selection.TypeText Text:="Innehåll:"
Selection.TypeParagraph
Selection.TypeParagraph
With ActiveDocument
.TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
LowerHeadingLevel:=3, IncludePageNumbers:=True, AddedStyles:="", _
UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
True
.TablesOfContents(1).TabLeader = wdTabLeaderDots
.TablesOfContents.Format = wdIndexIndent
End With
End Sub
Sub Produkter()
Dim con
Dim sqlString
Dim produkterRS
Dim kategorierRS
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\datbas.mdb"
sqlString = "SELECT kategori_id, kategori_namn FROM kategori ORDER BY kategori_ordning, kategori_namn"
Set kategorierRS = con.Execute(sqlString)
While Not kategorierRS.EOF
sqlString = "SELECT * FROM produkt Where produkt_kategoriID = " & kategorierRS("kategori_id") & " ORDER BY produkt_namn"
Set produkterRS = con.Execute(sqlString)
If Not produkterRS.EOF Then
Selection.Style = ActiveDocument.Styles("Rubrik 1")
Selection.TypeText Text:=kategorierRS("kategori_namn")
Selection.TypeParagraph
Selection.TypeParagraph
End If
While Not produkterRS.EOF
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "Tabellrutnät" Then
.Style = "Tabellrutnät"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = True
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = True
End With
Selection.InlineShapes.AddPicture FileName:="http://www.swisstime.se/bilder/klockor/produkt/" & produkterRS("produkt_id") & "_stor.jpg", LinkToFile:=False, SaveWithDocument:=True
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.Style = ActiveDocument.Styles("Rubrik 2")
Selection.TypeText Text:=produkterRS("produkt_namn")
Selection.TypeParagraph
Selection.TypeText Text:=Replace(Replace(Trim(produkterRS("produkt_kortbeskrivning")), vbTab, " "), "," & vbCrLf, ", ")
Selection.TypeParagraph
Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=68.4, RulerStyle:=wdAdjustNone
Call katlinjerBort
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.TypeParagraph
produkterRS.MoveNext
Wend
produkterRS.Close
Selection.InsertBreak Type:=wdPageBreak
kategorierRS.MoveNext
Wend
kategorierRS.Close
con.Close
End Sub
Sub katlinjerBort()
With Selection.Tables(1)
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleSingle
.DefaultBorderLineWidth = wdLineWidth050pt
.DefaultBorderColor = wdColorAutomatic
End With
End Sub
Sub Framsida()
Selection.HomeKey Unit:=wdStory
Selection.InsertBreak Type:=wdPageBreak
Selection.HomeKey Unit:=wdStory
Selection.TypeParagraph
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.Style = ActiveDocument.Styles("Normal")
Selection.TypeText Text:="Företag"
Selection.TypeText Text:="Produktkatalog"
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
Selection.InlineShapes.AddPicture FileName:="http://www.swisstime.se/bilder/klockor/produkt/34_stor.jpg", LinkToFile:=False, SaveWithDocument:=True
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeParagraph
With ActiveDocument.Styles(wdStyleNormal).Font
If .NameFarEast = .NameAscii Then
.NameAscii = ""
End If
.NameFarEast = ""
End With
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientPortrait
.TopMargin = CentimetersToPoints(2.5)
.BottomMargin = CentimetersToPoints(2.5)
.LeftMargin = CentimetersToPoints(2.5)
.RightMargin = CentimetersToPoints(2.5)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1.25)
.FooterDistance = CentimetersToPoints(1.25)
.PageWidth = CentimetersToPoints(21)
.PageHeight = CentimetersToPoints(29.7)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = True
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
End With
Selection.EndKey Unit:=wdStory
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
If Selection.HeaderFooter.IsHeader = True Then
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Else
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
End If
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Selection.HomeKey Unit:=wdStory
Selection.MoveDown Unit:=wdLine, Count:=8
Selection.InsertBreak Type:=wdSectionBreakNextPage
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
End Sub
S solbulle Medlem sedan mars 2001 5 287 inlägg Ujuj Addeladde, det där var ett riktigt makro, över min förmåga.
Så svårt är det inte. Om man spelar in ett makro och titta på koden så lär man sig rätt fort. :)
Det är i princip samma kod i ASP-lösningen som i ditt makro. Du måste skapa ett wordobjekt först.
Typ:
Dim oWordApp as Word.Application
Dim oWordApp=Createobject("Word.Application")
sedan kan du använda din makrokod. Du måste bara tänka på att använda oWordApp hela tiden. När du arbetar med makron i Word vet Word om att det är Word du jobbar med. Därför behöver man ingen referens till wordapplikationen.
Det som ser ut såhär i Wordmakro:
ActiveDocument.Name="Clarkbones.doc"
ska se ut såhär i ASP
owordapp.ActiveDocument.Name="Clarkbones.doc"
Spelar man in ett makro får man oftast en mängd kodrader man inte behöver. I extrema fall kan man skippa 90% av koden och ändå få exakt samma resultat. Det beror på att många värden är default och inte behöver sättas, men makrot sätter dem ändå.
Word måste vara installerat på servern eller hur?
Vad ska man installera minimun installation räcker det?
Tänkte köra in en office standard för det tror jag att jag har någon oanvänd licens för.
Addeladde skrev:
Word måste vara installerat på servern eller hur?
Vad ska man installera minimun installation räcker det?
Tänkte köra in en office standard för det tror jag att jag har någon oanvänd licens för.
Jo, Office måste nog vara installerat på servern. Det borde funka med en minimiinstallation, det beror ju lite på vad du skall göra. Är det bara makrokoden du visat hittills så ska det räcka med minimi.