NOTESSIDAN

Allt om Lotus Notes & Domino




Grafer i Lotus Notes med Excel
Uppdatering : ladda ner en fungerande databas här


Animationen nedan visar ett exempel på hur man kan visa grafer i Lotus Notes med Excel. jag har tidigare visat denna animation här, men vad jag inte visade då var hur man gjorde, här kommer nu koden och en beskrivning.

Följande sker när man trycker på knappen "Show Graf" som man ser i animationen nedan.
  • 1. jag loopar ett antal dokumenten i en vy exporterar några fält till till Excel.
  • 2. Jag skapar en graf i excel och sparar grafen till disk som en .gif fil.
  • 3. Jag skapar ett dokument, ett RT fält och lägger in grafbilden med DXL
  • 4. Jag sparar dokumentet och visar det för användarna, tar sedan bort filen från disk


Vid import av bilden till dokumentet måste bilden kodas om till Base64 encoding, detta görs med ett scriptbibliotek som finns att ladda ner här. Om man vill kan man lägga till lite kod som tar bort dokumentet med grafen efter att den visats för användaren.



Use "Base64" Sub CreateChart(stype As String) ' Skapar excelgrafen och exportera ut den till disk med Base64 Dim db As notesdatabase,session As New notessession,objexcel As Variant,oWorkbook As Variant,i As Integer Dim nvec As notesviewentrycollection,xdoc As notesdocument,view As notesview,cdb As notesdatabase Set cdb = session.CurrentDatabase Set view = cdb.GetView("ThomasTemp") Set nvec = view.AllEntries Const xlDataLabelsShowPercent = 3 Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False Set objWorkbook = objExcel.Workbooks.Add() Set objWorksheet = objWorkbook.Worksheets(1) For i = 1 To 20 Set xdoc = nvec.GetNthEntry(i).document objWorksheet.Cells(i,1) = xdoc.getitemvalue("Com_CompanyName")(0) objWorksheet.Cells(i,2) = xdoc.getitemvalue("Com_TSum")(0) Next Set objRange = objWorksheet.UsedRange objRange.Select Set colCharts = objExcel.Charts colCharts.Add Set objChart = colCharts(1) objChart.Activate Select Case stype Case "Bar" Case "Pie" objChart.ChartType = 70 objChart.Elevation = 30 objChart.Rotation = 80 objChart.ApplyDataLabels xlDataLabelsShowPercent objChart.PlotArea.Fill.Visible = False objChart.PlotArea.Border.LineStyle = -4142 objChart.SeriesCollection(1).DataLabels.Font.Size = 10 objChart.SeriesCollection(1).DataLabels.Font.ColorIndex = 2 objChart.ChartArea.Fill.ForeColor.SchemeColor = 49 objChart.ChartArea.Fill.BackColor.SchemeColor = 23 objChart.ChartArea.Fill.TwoColorGradient 1,1 objChart.Legend.Shadow = True Case Else End Select Call objExcel.ActiveChart.Export("c:\myChart.gif", "GIF") objExcel.ActiveWorkbook.saved = True Call objExcel.quit ' Grafen ligger nu på disk, nu lägger vi in den i ett notesdokument Call CreateDocument End Sub Sub CreateDocument ' Här skapar vi ett nytt notesdokument med DXL, lägger in grafen i ett bodyfält och visar för användarna Dim session As New notessession,stream1 As notesstream,stream2 As notesstream,db As notesdatabase Dim estring As String,import As notesdxlimporter,noteid As String,ws As New notesuiworkspace,
doc As notesdocument Set db = session.CurrentDatabase Set stream1 = session.createstream Set stream2 = session.createstream isOkay = EncodeFile("c:\mychart.gif", "C:\mychart.guf") stream1.Open("c:\mychart.guf") stream2.WriteText(|<?xml version='1.0' encoding='utf-8'?><
!DOCTYPE document SYSTEM 'xmlschemas/domino_6_5_1.dtd'> <document xmlns="http://www.lotus.com/dxl" version='6.5' maintenanceversion='1.0' form='Chart'> <item name="Body"><richtext><pardef id="1"/><par def="1"> <picture width="977px" height="600px"> <gif>|
+ stream1.ReadText + |</gif></picture></par></richtext></item></document>|) Set importer = session.CreateDXLImporter(stream2, db) Call importer.process noteid = importer.GetFirstImportedNoteID Set doc = db.GetDocumentByID(noteid) Call ws.DialogBox("Chart",True,True,True,True,True,True,"Chart",doc,True,False,False) Call doc.save(False,False) Set stream1 = Nothing Set stream2 = Nothing Kill "c:\mychart.gif" Kill "c:\mychart.guf" End Sub


- Excel måste vara installerat på den maskin som triggar scriptet.
- Scriptet och animationen hör inte riktigt ihop.



Relevanta Poster på Notessidan:



Publicerad 2007-05-09 | Kommentarer: 8 | Läsningar: 3251
Kommentarer

Andrei Kouvchinnikov ( 2007-05-09 21:39:49 ) Websida
Blir det alltid samma bildstorlek när man "exporterar" grafen från Excel, eller kan det variera beroende på grafens komplexitet?
Thomas Adrian ( 2007-05-09 23:52:23 ) Websida
Vet faktiskt inte, men jag sätter bredd och höjd i DXL:en så jag har kontroll över hur stor den visas ialla fall.

Det är väl bara att göra en graf manuellt i excel,spara den och se om det finns några val för storlek antar jag.


- Thomas

Patrick Kwinten ( 2007-05-10 09:02:51 ) Websida
I made similar solutions using Fusion Charts, but then you need to run the http task to see some results...

A good start for more info about integration with Domino you can find here:

http://www.ferdychristant.com/blog/archive/DOMM-6NDQEJ
Robert ( 2007-05-10 14:49:13 )
Hej Thomas!

Jag får inte detta att fungera. Jag har laddat ner och importerat scriptbiblioteket Base64 och får fel på följande:

Function ReplaceSubstring (text As String, find As String, replace As String)
Dim pos As Integer
pos = Instr(text, find)

Do While (pos > 0)
text = Left$(text, pos - 1) & replace & Mid$(text, pos + Len(find))
pos = Instr(pos + Len(replace), text, find)
Loop
End Function

Unexpected: replace Expected: Identifier; BYVAL

Jag har klistrat in Sub CreateChart och Sub CreateDocument, men vilken kod ska det vara i knappen Show Graph?

Hälsningar
Robert
Thomas Adrian ( 2007-05-10 16:12:48 ) Websida
Robert,

Jag fixar i ordning en databas som funkar och lägger på openntf så fort som möjligt.

- Thomas
Ulrich Krause ( 2007-05-11 07:42:51 ) Websida
Cool :-)
Roert ( 2007-05-15 09:53:35 )
Hej Thomas!

Tack. Nu fungerar databasen som den ska.
Jag har ytterligare en fråga.
Den lilla delen bredvid själva diagrammet, den som visar vad de olika delarna i diagrammet representerar med text, är nästan oläsligt liten. Hur ändrar man storlek på den delen så att man kan utläsa vad de olika delarna i diagrammet representerar?
Om man inte kan det så är ju denna diagramfunktion i princip oanvändbar.

Hälsningar
Robert
Thomas Adrian ( 2007-05-15 10:06:03 ) Websida
Hej Robert,

Du måste in i koden och ändra bredd och höjd, du kan sätta vilken storlek du vill här och man kan då se texten utan problem.

jag hade satt ner bredd och höjd i applikationen eftersom animationen jag visar behövde vara max 640x480.

Lycka till
Thomas



Sök på Notessidan
Thomas Adrian
ThomasCertifierad utvecklare och administratör inom Notes & Domino

Kontakta mig







Senaste Sökningarna på Notessidan
Sön - sharepoint (R:1)
Sön - räkna and antal and besökare (R:0)
Sön - browser (R:17)
Sön - stoppar and mail (R:1)
Sön - korrupt (R:3)
Sön - böcker (R:0)
Sön - kalendern (R:12)
Sön - feature (R:15)
Sön - print and mime (R:2)
Sön - länka (R:0)
Sön - databasen (R:94)
Sön - access (R:47)
Sön - outlook (R:15)
Sön - webanvändare (R:0)
Sön - google and maps (R:6)
Sön - juffe (R:2)
Sön - uidoc.print (R:1)
Sön - java and lotusscript (R:26)
Sön - besök (R:0)




Databasstatistik Blogg
Uppdateras var 15:e Minut

Antal Poster:562
Antal Kommentarer: 1405
Alla sidvisningar idag:
Unika Besökare idag:
Databasstorlek: 153Mb
Fixup: 2019-09-21 00:31:16
FT:2019-09-22 16:18:56
DB Procent använd: 99,8
Antal Agenter: 42
Antal Formulär: 65
Antal Vyer: 60
Antal Dokument: 7982
Antal Image Resources: 108
Antal Subformulär: 18
Antal Scriptbibliotek: 11
Totalt Antal Designelement: 576
Antal Attachments: 159
Antal Konflikter: 0
Server version 1: 405
Server version 2: Release 9.0.1FP9|August 14, 2017
Server Plattform: Windows/64
Ändrad: 2019-09-22 17:05:44
Server Tidszon: Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=131$ZN=W. Europe
Region:
Kommentarsspam Idag: 10
Kommentarsspam Totalt: 18892


BlogRankers.com

Top Sites at iWEBTOOL.com

Fight Spam! Click Here!

Bloggtoppen.se

Listed on BlogShares

Increase website traffic

Top Internet Blogs

Site Checker