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 / Artiklar / Titel på artikeln

Kommunicera med Officeprogrammen

Postad 2001-09-15 av Staffan Berg i sektionen ASP.NET, C#, Okategoriserat med 1 Kommentarer | Läst av: 5009, Betyg: 100%

Förord

I denna artikel tänkte jag visa några exempel på hur du kan etablera kommunikation med de vanligaste programmen som ingår i Microsoft Officefamiljen (Word, Excel, Powerpoint etc.). Det finns många olika metoder man kan tillämpa genom att länka till Officeprogrammen där jag ämnar visa några olika exempel. Först en metod för att hämta in data från Excel till VB. Sedan ett exempel där jag använder Word för att generera utskrifter från information ur en databas. Artikeln innehåller även ett utskriftsexempel där Access rapportdel utnyttjas och ytterligare ett kodexempel där kommunikation upprättas med presentationsprogrammet Powerpoint.
Innehåll
  » Hämta data från Excel
  » Använda Word från ditt VB-program
  » Använda Powerpoint från ditt VB-program


Hämta data från Excel

Jag börjar med att visa ett exempel på hur man till sitt Visual Basic-program kan hämta data från kalkylceller i ett kalkylblad i Excel och sedan infoga samma information i en Listviewkontroll. Först av allt får man se till att ha ett lämpligt kalkylblad tillgängligt och jag har för ändamålet tagit en skärmdump på ett blad som jag ämnar använda till detta exempel. Kolumnerna som jag tänkt att använda mig utav i nedanstående kalkylblad är Märke, Modell, Årsmodell. Färg och Km.



Efter att kalkylbladet är klart för användning skapar du en listviewkontroll i ditt VB-formulär och döper lämpligen kolumnerna i denna till samma namn som de i Excelbladet. Skriv sedan in följande kod för att hämta data från kalkylbladet och sedan addera dessa till din listviewkontroll. (Läs mer om hur du skapar en listviewkontroll här).
Vi börjar med att skriva in API;erna FindWindow och SendMessage. Dessa gör att ditt program hittar Excelfönstret utan att du behöver definiera namnet i din kod. Finns det flera Excelfönster öppna så hittar programmet det senast aktiva.
I modul:


Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Skriv sedan in nedanstående kod som först kontrollerar om Excel är öppet och sedan hämtar information från Excelbladet.
I formulär:


Dim MyXL As Object
Dim ExcelWasNotRunning As Boolean
Dim obKalkylblad As Object

'Hämta excelobjekt.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear

Const WM_USER = 1024
Dim hwnd As Long
'Om Excel är öppet...
hwnd = FindWindow("XLMAIN", 0)
If hwnd = 0 Then ' 0 betyder att Excel inte är öppet.
Exit Sub
Else

SendMessage hwnd, WM_USER + 18, 0, 0
End If
Set obKalkylblad = MyXL.ActiveSheet

'Sätt variabeln som definierar radnummer i Excelbladet till 3
i = 3

'Lägg in kalkylbladscellerna i variabler.
Do Until obKalkylblad.Cells(i, 1).Value = ""
clMärke = obKalkylblad.Cells(i, 1)
clModell = obKalkylblad.Cells(i, 2)
clYear = obKalkylblad.Cells(i, 3)
clColor = obKalkylblad.Cells(i, 4)
clKm = obKalkylblad.Cells(i, 5)

'Addera cellvärdena till din Listviewkontroll.
Set itmX = ListView1.ListItems.Add()
With itmX
.Text = clMärke
.SubItems(1) = clModell
.SubItems(2) = clYear
.SubItems(3) = clColor
.SubItems(4) = xKm
End With
i = i + 1
Loop

Frigör Excelobjektet från minnet om det inte kördes.
MyXL.Parent.Windows(1).Visible = True
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End If
Set MyXL = Nothing

Nu har förhoppningsvis värdena i kalkylbladet kopierats in i din listview. När du använder denna kod är det viktigt att felhantera ordentligt. Min erfarenhet av denna kod säger att mycket kan gå snett. Dels kanske inte Excel är öppet överhuvudtaget. Dels kanske fel datatyper lätt kan läggas in i variablerna om användaren matar in fel värden i kalkylbladscellerna.


Använda Word från ditt VB-program

Att kommunicera med ordbehandlingsprogrammet Microsoft Word kan dra med sig en rad fördelar. Du kan t ex designa en mall i Word som sedan kan ligga till grund för dina utskrifter. Med denna metod har du tillgång till alla funktioner som Microsoft Word erbjuder och du kan därigenom få till väldigt snygga utskrifter. En nackdel med denna metod är att det kräver en del prestanda av din dator och är inte att rekommendera om du har en gammal dator.

För detta exempel har jag designat en worddokument enligt bilden nedan. Jag har infogat en tabell med fem kolumner i dokumentet. Du kan ju också använda dig av tabbar om du föredrar det. Jag har i det här fallet valt att använda tabell för att det är lättare att styra informationen dit man vill och också lättare att identifiera och navigera i dokumentet från ditt VB-program.
Skapa ett bokmärke som heter StartCell i den första tabellcellen och spara sedan dokumentet som en Wordmall (t ex bilar.dot).



Nu är det dags att skriva lite kod för att få till en utskrift, men börja med att bocka för Microsoft Word x.0 Object Library under References i Project-menyn för att skapa en referens till Words objektbibliotek. I nedanstående exempel har jag valt att hämta information från en accessdatabas.
Skriv in följande kod under ett lämpligt objekt i ditt formulär.


Dim objWord As Word.Application
Dim docSplintdok As Word.Document
Dim db As Database
Dim rs As Recordset

'Skapa ett nytt Wordobjekt i ditt program
Set objWord = New Word.Application

'Gör Word osynligt
objWord.Visible = False

Set docSplintdok = Documents.Add("bilar.dot", 1)

'Hämta informationen från en databas (DAO)
Set db = OpenDatabase("bilar.mdb")
Set rs = db.OpenRecordset("SELECT * FROM Bilar")

'Gå till den första cellen med bokmärket StartCell
Selection.GoTo What:=wdGoToBookmark, Name:="StartCell"

'Lägg in data i Worddokumentet
Do While Not rs.EOF
Selection.TypeText Text:=rs.Fields(1)
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:=rs.Fields(2)
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:=rs.Fields(3)
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:=rs.Fields(4)
Selection.MoveRight Unit:=wdCell
Selection.TypeText Text:=rs.Fields(5)
Selection.MoveRight Unit:=wdCell
rs.MoveNext
Loop

'Skriv ut dokumentet
With docSplintdok
.PrintOut
End With
DoEvents

'Spara inte ändringar eftersom det är en mall
docSplintdok.Close SaveChanges:=False

'Frigör Word från minnet
objWord.Quit
Set objWord = Nothing

'Glöm inte att stänga databasen
rs.close
db.close

En annan metod för att få något utfört i Word är att först spela in ett makro som utför godtyckliga åtgärder i ett dokument och sedan kalla på makronamnet i ditt Visual Basic-program.
Även här måste du skapa en referens till Microsoft Word i Project-menyn. Skriv därefter in följande kod:


Dim objWord as Word.Application

Set objWord = New Word.Application
objWord.Visible = True

objWord.Run "makronamn"

objWord.Quit
Set objWord = Nothing


Använda Powerpoint från ditt VB-program

Det finns några olika metoder att tillämpa för att komma åt Powerpointpresentationer från ditt VB-program. Du kan skapa en referens till en öppen presentation på två olika sätt. Dels genom att använda Application-objektets ActivePresentation egenskap eller genom att använda Presentation objektet som en medlem av Presentations samlingen.
Här finns det tre sätt att tillgå:

  • Genom att använda filnamnet (Set prsPres = Presentations("PowerpointTools.ppt").


  • Genom att använda Caption egenskapen i fönstret som innehåller presentationen (Set prsPres = Presentations("PowerpointTools").


  • Genom att använda index. Powerpoints presentationsfiler är indexerade i den ordning de har öppnats (Set prsPres = Presentations(1)).


Du kan ju naturligtvis också öppna dina presentationer som som är sparade på disk på samma sätt som vi gjorde med Word och Excel-exemplen tidigare.


Dim ppApp As Powerpoint.Application
Dim prsPres As Powerpoint.Presentation

'Skapa ett nytt Powerpointobjekt i ditt program
Set ppApp = New Powerpoint.Application
Set prsPres = ppApp.Presenations.Open("C:\sökväg\powerpointtools.ppt")
With prsPres
'Lägg in din kod här...
End With

Skapa en ny presentation
Du kan också skapa en helt ny presentation genom att använda Add metoden som finns i Presentations samlingen:


Dim ppApp As Powerpoint.Application
Dim prsPres As Powerpoint.Presentation

Set ppApp = New Powerpoint.Application
With ppApp
Set prsPres = .Presentations.Add(msoFalse)
With prsPres
'kod för att utföra godtyckliga åtgärder i Powerpoint
End With
End With

Upp

1 Kommentarer


  1. Harry Rosendahl
    28 jun 2005

    Bra artikel i alltid aktuellt ämne

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 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
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

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 154
27 952
271 704
1 338
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