Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Snabba upp Word ifrån VB dll

Postades av 2002-03-05 20:21:28 - Axel Nilsson, i forum visual basic - allmänt, Tråden har 6 Kommentarer och lästs av 469 personer

Nån som vet hur man kan snabba upp bearbetningen av tabeller i word?

För att vara mer exakt:

Jag har en dll (gjort i VB) som jag anropar inifrån en applikation (mathematica). Denna dll gör insert på tabeller samt utför formattering på tabellen, kolumn för kolumn (kan vara individuellt formatterade).

I vb-dll:en använder jag mig av Word 9 typelibraryt, där jag skriver tillexempel

for i=1 to minwordapp.selection.tables(1).columns.count
with minwordapp.selection.tables(1).columns(i).font
.name=minfontarray(i)
.bold=minboldarray(i)
.italic=minitalicarray(i)
end with
next
...etc

Problemet är att word traverserar tabellen oerhört långsamt. Har prövat med ranges, screenupdating=false. Nån som har tips hur man kan snabba upp words bearbetning av tabeller?

Har även provat med DDE vilket visat sig gått snabbare än COM (OLE) konversation mellan mathematica word, tyvärr är dde opålitligt och saknar felhantering så det måste vara i OLE.


Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-05 23:45:13 - Raderat konto

Axel,

Men om du prövar utifrån följande sample, vilka är hämtade direkt från två lösningar jag har gjort i MS Word:

Application.Visible = False
With ActiveDocument.Tables(1).Columns(1).Cells.Font
.Name
.Bold
.Italic
End With

Application.Visible = True

En annan variant är

Sub RangeTable()
Dim MyRange As Range
Dim i As Integer
i = ActiveDocument.Tables(1).Rows.Count
Set MyRange = ActiveDocument.Range(ActiveDocument.Tables(1).Cell(1,
1).Range.Start, _
ActiveDocument.Tables(1).Cell(i, 1).Range.End)
Application.StatusBar = "Message"
MyRange.Shading.BackgroundPatternColorIndex = wdBlue
End Sub


Blir det snabbare då?

Mvh
XL-Dennis


Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-06 00:10:11 - Andreas Hillqvist

Några tips är:<br>
* Använd inte Selection objektet.<br>
* Använd For each<br>
* Gör så få anrop som möjligt. Typ att loopa ett recordset är ej att rekomendera.<br>
<br>
Skulle skrivit då här. Om det var så att Column objektet stöde font egenskapen:
<code>
Dim MyWord As Word.Application
Dim MyDoc As Word.Document
Dim MyTable As Word.Table
Dim MyColumn As Word.Column
Dim Font As StdFont
Dim I As Long

Set MyWord = New Word.Application
Set MyWord = MyWord.Documents.Add("C:\MyTemplate.doc")
Set MyTable = MyWord.Tables(1)

For Each MyColumn In MyTable.Columns
Set Font = New StdFont
Font.Name = MinFontArray(I)
Font.Bold = MinBoldArray(I)
Font.Italic = MinItalicArray(I)
Set MyColumn.Font = Font
I = I + 1
Next
</code>


Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-07 04:42:36 - Peter Holm

Håller Med ANdreas.

Selection-Objektet är en enda enormt stor och klumpig, seg och oöverskådlig massa.

Här är det "direktaccess" som gäller.

Det är ju rätt vanligt att man recordar ett macro för att se hur koden ser ut så man vet ungefär hur man skall progga. I Macron får man nästan uteslutande selectionobjektet.

Jämför exvis dessa rader för Excel.

sheets("Blad1").Select
Range("A1").Select
With Selection
.Interior.Color=rgb(0,0,0)
.Font.Color=rgb(255,255,255)
End With

Mot denna

Sheets("Blad1").cells(1,1).Interior.Color = rgb(0,0,0)
Sheets("Blad1").cells(1,1).Font.Color = rgb(255,255,255)

Den sistnämnda går avsevärt mycket snabbare att exekvera.

/peterh



Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-07 20:11:10 - Axel Nilsson

Hej,


Men hur definierar man en range som sträcker över sig en kolumn??

Följande trodde jag skulle funka, men det visar sig på något konstigt sätt definiera hela tabellen i sin range...

dim curRange as range
set curRange = curTable.Range

with curTable
curRange.SetRange Start:=.cell(1, colIndex).range.Start, _
End:=.cell(.Rows.Count, colIndex).range.End
end With

Faktum är att om jag byter t ex font för alla celler i rangen, (låt oss säga att vi är på kolumn 1 (colIndex=1)) så byter denna kolumns alla celler font = helt OK

MEN, om jag t ex vill lägga decimaltabbar för samma range, så blir av någon anledning HELA tabellen (alla kolumner) försedda med decimaltabben för första kolumnen....när jag sen är på colIndex=2 så ligger decimaltabben från kolumn 1 kvar, varvid kolumn 2 får 2 decimaltabbar...

Hade varit käckt om det gick att lösa enligt

curRange.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(Xtab.GetCol(colIndex - 1, ";")), _
Alignment:=wdAlignTabDecimal, Leader:=wdTabLeaderSpaces

...men det finns en implicit referans till hela tabellen

..vilket gör att jag måste sätta decimaltabbar med selection objektet enligt:

curColumn.Select

Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(Xtab.GetCol(colIndex - 1, ";")), _
Alignment:=wdAlignTabDecimal, Leader:=wdTabLeaderSpaces

...några förslag??

DESSUTOM, vad gäller hastigheten så har jag klockat det nu, med minimalt antal selection object referenser (selection.tables(1).columns(x).select)) osv och det är några hundradelar snabbare. Selection objektet var alltså inte så mycket långsammare trots att jag pillar bort selection på massa ställen.



Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-08 00:56:18 - Raderat konto

Axel,

Här får du ytterligare ett uppslag att bygga vidare på:

Tabell: 2 kolumner 5 rader

[Kod]
Dim tbl As Table
Dim oRng As Range

Set tbl = ActiveDocument.Tables(1)

Set oRng = ActiveDocument.Range _
(Start:=tbl.Range.Columns(1).Range.Start, _
End:=tbl.Range.Columns(2).Range.End - 1)
With oRng
.Cells(1).Range.Style = "Heading"
.Cells(2).Range.Shading.ForegroundPatternColor = wdColorBrightGreen
End With
[/Kod]

Vad beträffar hastigheten så blir skillnaden större ju större datamängd vi hanterar ;-)

Mvh
XL.-Dennis
www.xldennis.com




Svara

Sv: Snabba upp Word ifrån VB dll

Postades av 2002-03-08 11:11:49 - Axel Nilsson

Hej igen


Columns verka rinte ha något range object.

<code>

Set oRng = ActiveDocument.Range _
(Start:=tbl.Range.Columns(1).Range.Start, _
End:=tbl.Range.Columns(2).Range.End - 1)

</code>

funkar alltså inte, tbl.range.columns(1).range finns inte..

tacksam för fler exempel. Frågeställningen är hur man väljer en column som en range (se ovan) ...fonter etc går att sätta för en range som defnierar en kolumn, medans decimaltabbar etc inte funkar utan sätts för hela tabellen.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 644
27 953
271 710
12 362
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies