Een klant wou een nieuwe server met Windows 2008R2 64b, Microsoft Excel en Domino 8.5.1FP5. Doel van deze server is het importeren van Excel bestanden die via uploads en mail aan diverse applicaties worden aangeboden.
Via een Lotusscript agent wordt een Microsoft.Excel object gemaakt en de bijlage ingelezen.
Op de oude server werkte dit prima, op de 2008 server niet.
Na eerst de gebruikelijke dingen als rechten e.d. gecontroleerd te hebben las ik op een forum een tip van iemand die beweerde dat een geplande Windows taak bij hem alleen werkte nadat hij de een map Desktop had aangemaakt in de map C:\Windows\SysWow64\config\systemprofile\.
En inderdaad dit was de oplossing, de agent werkte hierna ook als normaal!
Je moet het maar weten….
Tag Archives: Excel
LotusScript en Excel import van tekst bestand
Om 12000 documenten te exporteren naar Excel was een LotusScript agent te lang bezig met het vullen van de cellen.
Daarom is er gekozen om het bestand naar een comma gescheiden bestand weg te schrijven.
De klant vond het echter lastig om dit weer te openen in Excel, vandaar dat er een stukje code moest komen om dit te automatiseren.
Een stukje van de code:
Sub Initialize
Dim OfficeApplication As Variant
Dim workbook As Variant
Dim xlsheet As Variant
Dim ar() As Integer
Const xlNone = -4142
Const xlAutomatic = -4105
Const xlUnderlineStyleNone = -4142
Const xlThemeFontNone = -4142
Const xlInsertDeleteCells = 1
Const xlDelimited = 1
Const xlTextQualifierDoubleQuote = 1
Const xlTextFormat = 2
….. declareer dingen …
fList(“Form”) = “Form”
…. etc…
Set ws = New NotesUIWorkspace
filenames = ws.SaveFileDialog(False,”File name”,, “c:\”, “export” & Format(Today,”ddmmyyyy”) & “.txt”)
If (Isempty(filenames)) Then
Exit Sub
End If
Set curDB = Session.CurrentDatabase
Set View = curDB.GetView(“myView”)
View.AutoUpdate = False
fileNum% = Freefile()
Open filenames(0) For Output As fileNum%
Forall i In fList
mString$ = mString$ & “,” & i
End Forall
Print #fileNum%, Strright(mString$,”,”)
Set Doc = View.GetFirstDocument
Do Until Doc Is Nothing
mString$ = “”
Forall i In fList
If Doc.HasItem(Listtag(i)) Then
Set item = Doc.GetFirstItem(Listtag(i))
Select Case item.Type
Case 768
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”.”)
Case 1024
mString$ = mString$ & “,” & Replace(Format(item.Values(0),”dd-mm-yyyy”),”-“,”/”)
Case Else
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”;”)
End Select
Else
mString$ = mString$ & “,”
End If
End Forall
Print #fileNum%, Strright(mString$,”,”)
Set Doc = View.GetNextDocument(Doc)
Loop
Close fileNum%
con = “TEXT;” & filenames(0)
If Not (setOfficeApplication(“Excel.application”)) Then Exit Sub ‘ start Excel met een functie
rgbColor& = xlNone
x = 0
Forall i In fList
Redim Preserve ar(x) As Integer
ar(x) = xlTextFormat
x = x + 1
End Forall
Set workbook = OfficeApplication.Workbooks.Add ()
Set xlsheet = OfficeApplication.Workbooks(1).Worksheets(1)
With xlsheet.QueryTables.Add(con,xlsheet.Range(“A1″) )
.Name = Strright( filenames(0),”\”)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = ar
.TextFileTrailingMinusNumbers = True
.Refresh
End With
ExcelClose:
On Error Resume Next
OfficeApplication.Cells.EntireColumn.Autofit
OfficeApplication.Rows(“1:1″).Select
OfficeApplication.Selection.AutoFilter
OfficeApplication.Visible = True
Exit Sub
ErrorHandler:
Msgbox Lsi_info(2) & ” ” & Error & ” (” & Err & “) on line ” & Erl
Resume ExcelClose
End Sub
Kleurfuncties zoals RGB en Webkleuren
Soms is het nodig om kleuren te vertalen naar andere formaten.
Excel wil bijvoorbeeld graag een RGB kleur als type Long zien, in style sheets e.d. gebruik je de Webkleuren in Hex formaat e.d.
Meestal gebruik ik het kleurenpallet van Notes om een kleur te bepalen, en gebruik de RGB waarden om verder te werken.
Een aantal LotusScript functies die ik dan gebruik zijn de volgende:
Van RGB waarden naar Long (gelijk aan VBA functie, bijv. voor export naar Excel) :
Function RGB(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As Long
‘input 255,255,255
Dim tmpLong As Long
tmpLong = lRed
tmpLong = tmpLong + (lGreen*256)
tmpLong = tmpLong + (lBlue*Clng(65536))
RGB = tmpLong
‘Output 16777215
End Function
Van HEX naar RGB String (met kleine aanapssing voor bijv. weergavekolommen e.d.) :
Function HEX2RGB(Byval HexColor As String) As String
‘Input #FFFFFF
HexColor = Replace(HexColor, “#”, “”)
HEX2RGB = Val(“&H” & Mid(HexColor, 1, 2)) & “,” & Val(“&H” & Mid(HexColor, 3, 2)) & “,” & Val(“&H” & Mid(HexColor, 5, 2))
‘Output 255,255,255
End Function
Van RGB waarden naar Hex (voor Web, css e.d.):
Function RGB2HEX(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As String
‘ input 255,255,255
RGB2HEX = Right(Cstr(Hex(lBlue + 256*(lGreen+256*lRed))),6)
‘ Output FFFFFF
End Function
RGB kleur naar Notes kleuren (Richtext item e.d.):
Function RGB2NOTES(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As Integer
Dim session As New NotesSession
Dim color As NotesColorObject
Set color = session.CreateColorObject
RGB2NOTES = color.SetRGB(lRed,lGreen,lBlue)
End Function