Ondřej | Lotus Notes -> Excel (602Tab) |
| | Programátor
15.03.2004 07:24:25
ID: 483.0
Ondřej |
| Dobrý den přeji. Dají se nějakým způsobem převést data z Lotus Notes do již existujícího excelovského nebo 602Tab souboru (xls, wls)? Ať už z pohledu nebo jen z dokumentu? Předem děkuji za odpověď. |
Marshi | Nabízíme aplikaci Excel.InOut ... |
Vývoj
15.03.2004 07:46:23
ID: 483.1
| Nabízíme aplikaci Excel.InOut demo ke stažení viz link1 |
Karel | A co tak pohledat na Internetu? Otestuj tohle ! |
15.03.2004 13:26:24
ID: 483.2
| Option Explicit Declare Function NEMGetFile Lib "nnotesws" Alias "NEMGetFile" ( wUnk As Integer, Byval szFileName As String, Byval szFilter As String, Byval szTitle As String ) As Integer Declare Function NEMProgressBegin Lib "nnotesws.dll" ( Byval wFlags As Integer ) As Long Declare Sub NEMProgressEnd Lib "nnotesws.dll" ( Byval hwnd As Long ) Declare Sub NEMProgressSetBarPos Lib "nnotesws.dll" ( Byval hwnd As Long, Byval dwPos As Long) Declare Sub NEMProgressSetBarRange Lib "nnotesws.dll" ( Byval hwnd As Long, Byval dwMax As Long ) Declare Sub NEMProgressSetText Lib "nnotesws.dll" ( Byval hwnd As Long, Byval pcszLine1 As String, Byval pcszLine2 As String ) Const NPB_TWOLINE% = 1 '1 is for the big "in its window" progress bar Const NPB_NOTEXT%=32 'and 32 is for the small blue line at the bottom of the screen Const xlAutomatic = -4105 Const xlBottom = -4107 Const xlCategory = 1 Const xlCenter = -4108 Const xlColumnClustered = 51 Const xlContinuous = 1 Const xlDataLabelsShowValue = 2 Const xlDataLabelsShowPercent = 3 Const xlEdgeBottom = 9 Const xlEdgeLeft = 7 Const xlEdgeRight = 10 Const xlEdgeTop = 8 Const xlHairline = 1 Const xlInsideHorizontal = 12 Const xlInsideVertical = 11 Const xlLandscape = 2 Const xlLeft = -4131 Const xlLine=4 Const xlLineMarkers = 65 Const xlLocationAsObject = 2 Const xlMedium = -4138 Const xlNone = -4142 Const xlPie=5 Const xlPortrait = 1 Const xlRows = 1 Const xlThick = 4 Const xlThin = 2 Const xlTop = -4160 Const xlValue = 2 Dim text As String Dim i As Integer Sub Click(Source As Button) 'This sub will generate an Excel spreadsheet using all data from a view. Dim szFilter As String Dim startTime As Single Dim processingTime As Single Dim session As New NotesSession Dim db As NotesDatabase Dim v As NotesView Dim dc As notesdocumentcollection Dim ws As New notesuiworkspace Dim uiview As NotesUIView Dim docX As NotesDocument Dim promptlist(3) As String, choice As String, promptlist2(1) As String, exportall As String Dim platform As String, view As String Dim xl As Variant, xlWbk As Variant, xlSheet As Variant, hwnd As Variant, xlsFileName As Variant Dim row As Integer, col As Integer, numdocs As Integer ' On Error Goto errorHandler3 'Check to see if the user is on a MacIntosh 'the "Create Object" function does not run on a Mac platform = session.Platform If Not Instr (platform, "MacIntosh") = 0 Then Messagebox ("Tato funkce není kompatibilní s platformou MacIntosh. Použijte prosím PC pro konverzi dat do tabulky.") Exit Sub End If promptlist(0)="Nová tabulka - Zobrazit před dokončením" promptlist(1)="Nová tabulka - uložit přímo na disk" promptlist(2)="Otevřít existující soubor Excelu - Zobrazit před dokončením" promptlist(3)="Otevřít existující soubor Excelu - uložit přímo na disk" choice=ws.prompt(PROMPT_OKCANCELLIST, "Výběr akce", "Prosím, zvolte volbu provedení exportu.", promptlist(0), promptlist) If (choice="") Then Exit Sub End If promptlist2(0)="Všechny záznamy" promptlist2(1)="Pouze vybrané záznamy" exportall=ws.prompt(PROMPT_OKCANCELLIST, "Export výběru", "Exportovat vše?", promptlist2(0), promptlist2) If (exportall="") Then Exit Sub End If 'Get appropriate file names when required szFilter = "Tabulka Excelu|*.xls|Všechny soubory|*.*|" If choice = promptlist(0) Then Else xlsFileName = ws.OpenFileDialog (False, "Vyberte tabulku", szFilter) If xlsFileName(0) ="" Then Exit Sub End If End If 'Set the session variables startTime = Timer Set db = session.CurrentDatabase Set dc = db.unprocesseddocuments Set uiview = ws.currentview Set v = uiview.view If exportall="Všechny záznamy" Then Else Dim folderName As String Randomize folderName="TmpExportView" + Cstr (Int(Rnd()*100)) 'modifikace by RM Dim doc As notesdocument, newdoc As notesdocument If Not v Is Nothing Then Set doc=db.getdocumentbyunid(v.universalid) If Not doc Is Nothing Then Set newdoc=doc.copytodatabase(db) Call newdoc.replaceitemvalue("$Title",foldername) Call newdoc.replaceitemvalue("$Flags","3FY") Call newdoc.save(True,True) End If End If Set v = db.getview(folderName) Call dc.putallinfolder(folderName) End If numDocs=v.allentries.count ' Initialise Progress Bar hwnd = NEMProgressBegin( NPB_TWOLINE ) ' use window style progress bar NEMProgressSetBarRange hwnd, numDocs ' set range of bar to number of rows NEMProgressSetText hwnd, "Expor pohledu do Excelu.", "Start Exportu ..." Set xl = CreateObject("Excel.application") If choice = promptlist(0) Or choice = promptlist(1) Then Set xlWbk = xl.Workbooks.Add Else Set xlWbk = xl.Workbooks.Open(xlsFileName(0)) End If Set xlSheet = xlWbk.Worksheets(1) Call xlSheet.Activate On Error Goto errorHandler xlSheet.Name = "Ewine Export" xl.Cells.select xl.Selection.ClearContents 'Start filling in the header column. You can get rid of this if you want to, but then get rid of the section lower that highlights it... col=1 With xlSheet Forall vColumn In v.Columns If vColumn.IsHidden = True Then Else .Cells(1, col)=vColumn.Title col=col+1 End If End Forall End With 'Row by Row, Column by Column, fill in the values ' Dim tempItem As Notesitem Dim tempVal As String Set docX=v.GetFirstDocument row=2 On Error Goto errorHandler With xlSheet While Not docX Is Nothing col=1 Forall cValue In docX.ColumnValues .Cells(row, col)=Implodes(cValue, Chr(10)) continue: col=col+1 End Forall row=row+1 If row Mod 10 = 0 Then processingTime = Timer - startTime NEMProgressSetBarPos hwnd,row NemProgressSetText hwnd, "Export pohledu do Excelu.", "Export: "& Cstr(row) & " z " & Cstr(numDocs) & " rec za " & Format$(processingTime, "0.00") & " sec., AVG = " & Format$(row / processingTime , "0.000") End If Set docX=v.GetNextDocument(docX) Wend End With On Error Goto errorHandler2 'Set sizing, fonts, etc to make the spreadsheet readable. xl.Cells.select xl.selection.Font.Name = "Verdana" xl.selection.Font.Size = 9 xl.Rows("1:1").Select xl.Selection.Font.Bold = True xl.selection.Font.size = 12 xl.selection.RowHeight = 15 xl.Cells.select xl.selection.columnwidth = 100 xl.selection.columns.Autofit xl.selection.rows.Autofit xl.selection.VerticalAlignment = xlTop xl.ActiveSheet.Range("A1").Select 'Stop Progress Bar NEMProgressEnd hwnd 'Save and be gone! On Error Goto errorHandler3 If choice = promptlist(1) Or choice = promptlist(3) Then Call xlWbk.SaveAs(xlsFileName(0)) Call xlWbk.Close Messagebox "Export je kompletní. Nyní můžete opět otevřít uložený soubor Excelu: "&xlsFileName(0) Call xl.Quit xl = "" Else xl.Visible=True End If ' LotusScript code... processingTime = Timer - startTime Print "The script ran in " & Format$(processingTime, "0.00") & " seconds." If exportall = promptlist2(1) Then Call v.remove End If Exit Sub errorHandler: 'This is called when there is bad data in a notes view, usually text in a date field, etc. 'Notes will show it, but it will fail to export correctly. This replaces the Excel cell with a bad data text. Resume errorHandler2: NEMProgressEnd hwnd Messagebox "Špatné nastavení tabulkového formátu ??!!" Call xl.Quit If folderName Then Call v.remove End If xl = "" Exit Sub errorHandler3: NEMProgressEnd hwnd Messagebox "Špatný název adresáře. Prosíme o správné zadání." Call xl.Quit xl = "" If folderName Then Call v.remove End If Exit Sub End Sub Function Implodes(Array As Variant,Separator As String) As String If Isarray(Array) Then For i=0 To Ubound(Array) If i=Ubound(Array) Then text=text & array(i) Else text=text & array(i) & separator End If Next Implodes=text Else Implodes=Array End If End Function
|
kKarel | Marshi - mrkněte se na ten váš web. |
15.03.2004 16:20:36
ID: 483.3
| Zase jedna firma co se prezentuje jak je i nás oblibou? Jenom "blablabla-bolením"? Krásné - Frejmset ve frejmu. Fakt sila! Škoda, že nejde poslat obrázek. To by jste měli reklamu jak vyšitou. Takže už ve vývoji myslete na koncový vzhled.
|
Martin | Karle, karle... |
16.03.2004 08:32:25
ID: 483.4
| ... spoustě lidem je to blábolení příjemné, protože za pár švestek koupí produkt, na který nemusí sáhnout. Kdyby každý hledal na internetu tak nikdo nemá čas nic dělat a nikdo nic neprodá :-) |
viktor | Převod z LN do MS Excelu ... |
16.03.2004 09:03:04
ID: 483.5
| Nejjednodušší (v LN 6):
Z pohledu pomocí menu Edit-Copy Selected as Table (do clipboardu) a v Excelu Úpravy-Vložit (Paste). Protože to funguje i do OpenOffice Calc, mohlo by to fungovat i pro 602Tab.
Z dokumentu také kopie přes Clipboard.
Jinak můžete vyzkoušet export z pohledu LN - třeba přes Lotus 1-2-3 (s příponou .wk4). MS Excel s tím umí pracovat. |
Karel | Nikdo se nebrání - nakupování |
16.03.2004 09:56:03
ID: 483.6
| to bylo to: Martin Fascinuje mne to, že jsem si to prubnul. A když je to za peníze, tak by to taky mělo mít určitou funkcionalitu na úrovni. Doba 4.5 aplikací skončila! Když se podívám na dodavatelské stránky www.allfornotes.com - tak rekurzivní ve frejmech. Co k tomu říci více?
Nic moc.
To Viktor - To je řešení pro LN 6.x a ještě pro zdatné pracovníky. Řeč šla původně o appendování obsahu XLS souboru. Chci vidět ty uživatele. ------------------------------------ 1) - když mám za něco platit, tak ať to za něco stojí a má to alespoň dobrou a slušnou funkcionalitu 2) - když se podívám na stránky dodavatele, kterému mám platit, tak ať to,pro Bůh, za něco stojí. 3) - Ani to co je na Internetu nemusí být špatné jen proto, že to je "zadarmo"
Nic není zadarmo, ani Vaše psaní a ztracený čas. Příklad co jsem poslal je stažený a upravený + používaný script, který funguje v několika mých aplikacích.
Takže to, že se věnuji Ondřejovi, je 100* lepší, než-li mu nutit placenou černou skříňku a nebo zboží, jehož obal stojí za .. a chybějí mu kolečka a já nevím co. Navíc je to po záruce (©2001)
A tak se v tomto státě chová daleko, daleko více firem. |
lubm | Pane Karle, promiňte hloupému |
18.03.2004 11:50:53
ID: 483.7
| Zkoušel jsem Váš skript. Nedal jsem ho do tlačítka ale pro zkoušku do agenta. Když jsem ho spustil, tak mi vyběhla chyba na těchto řádcích: Set v = db.getview(folderName) Call dc.putallinfolder(folderName) ... numDocs=v.allentries.count o pár řádků dřív je folderName="TmpExportView" + Cstr (Int(Rnd()*100)) 'modifikace by RM
Jak se může nastavit tato složka a přesouvat do ní dokumenty když neexistuje?
Jestli je to příliš triviální dotaz, tak se omlouvám. Děkuji za odpověď
|
Karel | Aniž bych nějak přemýšlel |
18.03.2004 20:10:57
ID: 483.8
| mám to v pohledu pod tlačítkem. Agenta nepoužívám, ale jde to samozřejmě upravit pod agenta. Tak se na to mrknu o víkendu a dám vědět. |
Martin | PutInFolder |
19.03.2004 09:22:39
ID: 483.9
| Tahle akce si složku vytvoří, pokud neexistuje. Ale na zbytek dotazu neodpovídám :-) |
lubm | Re: PutInFolder |
19.03.2004 11:40:49
ID: 483.10
| Ano, vytvoří. Ale ve skriptu se na ní odkazuji ještě před voláním tohoto příkazu. A navíc (alespoň u mě)je docela dost dlouhá časová prodleva, než se vytvoří. |
Karel | Aha, skript je pod tlačítko - |
22.03.2004 01:27:09
ID: 483.11
| protože pracuje s vybranými dokumenty v pohledu.
Pokud ho chceš v agentovi, musíš provést výběr dokumentů a pak to nebude hlásit chybu!
Ahoj - držím palce |
lubm | Re: musíš provést výběr dokumentů |
25.03.2004 08:14:37
ID: 483.12
| no jo, ale abych mohl udělat db.unprocesseddocuments, tak musím na nějakém dokumentu stát nebo mi vyletí chybová hláška už při spouštění agenta ?! A stát na dokumentu = mít vybraný alespoň jeden dokument (alespoň si to myslím). |
Karel | V principu ano, |
25.03.2004 10:59:05
ID: 483.13
| ten kód je z tlačítka v pohledu.
Tak jak je - a funguje. Po otevření pohledu (DB) stojím alespoň na jednom záznamu. A o to jde. Vysleduj si funkcionalitu v případě exportu všech záznamů. To je a bude tvoje cesta. Doporučuji Ti opravdu ten kód narvat do tlačítka pohledu a odkrokovat. Uvidíš jak funguje a co je nutné udělat. |
Martin | Re: Pane Karle, promiňte hloupému |
25.03.2004 11:36:14
ID: 483.14
| Zajímavě udělané, tyto řádky totiž na základě aktuálního pohledu vytvoří složku a pak se na ni dá nasetovat.
folderName="TmpExportView" + Cstr (Int(Rnd()*100)) 'modifikace by RM Dim doc As notesdocument, newdoc As notesdocument If Not v Is Nothing Then Set doc=db.getdocumentbyunid(v.universalid) If Not doc Is Nothing Then Set newdoc=doc.copytodatabase(db) Call newdoc.replaceitemvalue("$Title",foldername) Call newdoc.replaceitemvalue("$Flags","3FY") Call newdoc.save(True,True) End If End If
|
janeecko | super |
29.09.2006 11:10:40
ID: 483.16
| Ten dlhy lotus script je super...je to opensource?? mozme ot pouzit v nejakej aplikacii? |
peja | a co tak NotesSQL |
29.09.2006 12:56:03
ID: 483.17
| NoteSQL umoznuje dotiahnut data z LN cez microsoft qurey(sucast excelu) pomocou ODCB |
s | LS / Notes SQL / komeční balík / Approach |
02.10.2006 14:03:06
ID: 483.18
| No jak vidím zase ruzné názory. Prodávat se musí a základ je le-li to uzavřené řešení či parametrické. A jinak spiše pokud se jedná o volný LS tak se kloním k nemu pokud je to zručný uživatel. A na stránku Notes SQL - sám ho již dlouhá léta používám, protože je to nejjednodušší jak rychle dostat jaká koliv dat z NSF do EXCELu či jinam. A hlavně pokud člověk vím může data dávat u jednodušších aplikací oběmi směry. Třeba do dnes používám Approach a propojuji tabulky Notes, DBF a jiné a dělám výstupy či importy do Notes. Asi každého věc co je bližší a pro danou situaci vhodnější. |