Dnes jsem nauploadoval release v0.1.2. Obsahuje všechny výčtové datové typy ( enum types ) z knihoven office, excelu, wordu a outlooku.
Naštěstí jsem je nemusel psát ručně ( je jich přes tisíckovku ), ale zvládl to generátor kódu za pár vteřin.
Ten generátor zatím vypadá velmi dobře, chce to ještě dodělat nějaké nastavení, aby se správně generovaly členy tříd. Pak už nebude problém vygenerovat wrapper třídy pro ostatní typy.
Přemýšlím, jak moc zuniverzálnit ten generátor kódu. Našel jsem totiž pár COM komponent, které by se mi ( a myslím, že nejen mě ) docela hodily a nepoužívám je. Tak bych chtěl proces vygenerování zdrojového kódu pro wrapper assembly co nejvíce zjednodušit.
10.08.2008
10.07.2008
MS Office for .NET v0.1.1
Včera jsem udělal další release MS Office for .NET. Jedná se o verzi v0.1.1.
Zakomponoval jsem do wrapper tříd vazby, které zajišťují automatické uvolnění COM objektů. Teď už by se tedy měly aplikace uvolňovat z paměti, i když někde zapomenete referenci na wrapper objekt.
Všechny wrapper třídy nyní implementují rozhraní IDisposable. Při volání metody Dispose se uvolňí reference na COM objekt. Tím se i trochu zjednodušila práce s třídou Application, jelikož ji nyní lze uzavřít do bloku "using( ... ) { ... }".
Zakomponoval jsem do wrapper tříd vazby, které zajišťují automatické uvolnění COM objektů. Teď už by se tedy měly aplikace uvolňovat z paměti, i když někde zapomenete referenci na wrapper objekt.
Všechny wrapper třídy nyní implementují rozhraní IDisposable. Při volání metody Dispose se uvolňí reference na COM objekt. Tím se i trochu zjednodušila práce s třídou Application, jelikož ji nyní lze uzavřít do bloku "using( ... ) { ... }".
10.01.2008
MS Office for .NET na CodePlex.com
Založil jsem open-source projekt MS Office for .NET na serveru CodePlex.com. Jeho model je/bude stejný jako jsem popsal v minulém příspěvku.
Tak by mělo být všem jasné, jak s MS Office pracovat, a každý si to nebude muset psát sám.
Jelikož ale vývoj tohoto projektu není žádná zábava, nepočítám, že bych měl moc přispěvatelů :).
Tak by mělo být všem jasné, jak s MS Office pracovat, a každý si to nebude muset psát sám.
Jelikož ale vývoj tohoto projektu není žádná zábava, nepočítám, že bych měl moc přispěvatelů :).
9.25.2008
Použivani MS Office z prostředí .NET
Jedna z častých otázek, která se objevuje na diskuzních fórech, je ovládání MS Office či přístup do jejich souborů. Přestože se to zdá jako jednoduchý úkol, realita je trošku někde jinde.
Máte v zásade tři možnosti, které mají své pro i proti.
1) OleDB provider pro Excel
2) Visual Studio Tools for Office ( VSTO )
3) Napsat si vlastni wrapper
Paradoxne nejjednodužší (*) a nejspolehlivějši je třetí možnost.
Když využijete schopnost VB.NET - late binding - tak můžete komunikovoat s COM rozhraním Office s poměrně vysokým (oproti ostatním možnostem) komfortem. V podstatě opisujete to, co vidíte ve VBA u Office a Excelu/Wordu/Outlooku/atd...
Přiklad:
Public Class ExcelApplication
private m_NativeApplication As Object 'COM objekt s aplikaci excelu
Public Sub New(nativeApplication As Object) 'konstruktor
m_NativeApplication = nativeApplication
End Sub
Public Shared Function CreateApplication() As ExcelApplication
Dim comObj = CreateObject("Excel.Application") 'vytvori instanci COM objektu excelu
Dim ret As New ExcelApplication(comObj) 'vytvori wrapper tridu nad COM objektem
Return ret
End Function
Public Readonly Property WorkBooks() As WorkBooks
Get
Dim comObj As Object = m_NativeApplication.WorkBooks 'ziska se COM objekt WorkBooks
Dim ret As New WorkBooks(comObj)
Return ret
End Get
End Property
Public Sub Quit()
m_NativeApplication.Quit() 'za behu aplikace se "samo" zjisti jaka metoda se ma zavolat = late binding
End Sub
End Class
Public Class WorkBooks
Dim m_NativeWorkBooks As Object
public Sub New(nativeWorkBooks as Object)
m_NativeWorkBooks = nativeWorkBooks
End Sub
Public Default Readonly Property Item(index As Integer)
Get
Dim comObj as Object = m_NativeWorkBooks(index)
Dim ret As new WorkBook(comObj)
Eeturn ret
End Get
End Property
Public Function Open(filename As String) As WorkBook
Dim comObj as Object = m_NativeWorkBook.Open(filename)
Dim ret As New WorkBook(comObj)
Return ret
End Function
End Class
...
...
...
A takto si vytvoříte třídy, jejich metody a property, které potřebujete. Navíc nejste zavislí na konkrétni verzi Office. Toto bude fungovat na Office 2000, xp, 2003, a novejsi, mozna i starsi.
(*) S příchodem VSTO 2007 SE se situace trochu zlepšila, a už to není tak strašné. Leč, stále mají co vylepšovat.
P.S.: Pokud chcete těch tříd hodně, zamyslete se nad možnosti automatické generace kódu.
Máte v zásade tři možnosti, které mají své pro i proti.
1) OleDB provider pro Excel
2) Visual Studio Tools for Office ( VSTO )
3) Napsat si vlastni wrapper
Paradoxne nejjednodužší (*) a nejspolehlivějši je třetí možnost.
Když využijete schopnost VB.NET - late binding - tak můžete komunikovoat s COM rozhraním Office s poměrně vysokým (oproti ostatním možnostem) komfortem. V podstatě opisujete to, co vidíte ve VBA u Office a Excelu/Wordu/Outlooku/atd...
Přiklad:
Public Class ExcelApplication
private m_NativeApplication As Object 'COM objekt s aplikaci excelu
Public Sub New(nativeApplication As Object) 'konstruktor
m_NativeApplication = nativeApplication
End Sub
Public Shared Function CreateApplication() As ExcelApplication
Dim comObj = CreateObject("Excel.Application") 'vytvori instanci COM objektu excelu
Dim ret As New ExcelApplication(comObj) 'vytvori wrapper tridu nad COM objektem
Return ret
End Function
Public Readonly Property WorkBooks() As WorkBooks
Get
Dim comObj As Object = m_NativeApplication.WorkBooks 'ziska se COM objekt WorkBooks
Dim ret As New WorkBooks(comObj)
Return ret
End Get
End Property
Public Sub Quit()
m_NativeApplication.Quit() 'za behu aplikace se "samo" zjisti jaka metoda se ma zavolat = late binding
End Sub
End Class
Public Class WorkBooks
Dim m_NativeWorkBooks As Object
public Sub New(nativeWorkBooks as Object)
m_NativeWorkBooks = nativeWorkBooks
End Sub
Public Default Readonly Property Item(index As Integer)
Get
Dim comObj as Object = m_NativeWorkBooks(index)
Dim ret As new WorkBook(comObj)
Eeturn ret
End Get
End Property
Public Function Open(filename As String) As WorkBook
Dim comObj as Object = m_NativeWorkBook.Open(filename)
Dim ret As New WorkBook(comObj)
Return ret
End Function
End Class
...
...
...
A takto si vytvoříte třídy, jejich metody a property, které potřebujete. Navíc nejste zavislí na konkrétni verzi Office. Toto bude fungovat na Office 2000, xp, 2003, a novejsi, mozna i starsi.
(*) S příchodem VSTO 2007 SE se situace trochu zlepšila, a už to není tak strašné. Leč, stále mají co vylepšovat.
P.S.: Pokud chcete těch tříd hodně, zamyslete se nad možnosti automatické generace kódu.
9.24.2008
StackOverflow
Nedávno jsem narazil na server StackOverflow.com. Musím přiznat, že mě hned ze začatku chytnul. Mají tam docela pěkný systém bodování odpovědí ( rating ), a ( což je nezvyklé ) i otázek. Kromě toho lze získávat i odznaky, za různé aktivity. Bohužel mi některé připadají docela přízemní - zřejmě mají motivovat, ale dle mého názoru spíš devalvují jejich hodnotu.
Podle výše získaného ratingu se uživatelům zpřístupňují komunitní funkce. Úplně ze začátku může uživatel jen posílat dotazy či na ně odpovídat. Po získání 15 bodů už může i přidávat komentáře a hodnotit ostatni. Dále se pak nabízí další možnosti, nebudu je tu vypisovat, můžete si je přečíst ve faq.
Je vidět, že je server ještě mladý, jelikož již po chvíli používání člověku chybí pár užitešných funkcí. Mě osobně například chybí filtrování dotazů podle více tagů - nyní lze jen podle jednoho. Nicméně to vypadá, že vývojový tým ( mimochodem složený z docela známých jmen ) má zájem o odezvu uživatelů, tak se tato funkce snad brzy objeví.
Zatím jsem dosáhl hodnoceni 267 bodů a mé nadšení ještě neopadlo. Vypadá to, že se StackOverflow stane mým oblíbeným serverem ... a kdo ví, třeba nahradí i moje oblíbené fórum builder.cz.
Podle výše získaného ratingu se uživatelům zpřístupňují komunitní funkce. Úplně ze začátku může uživatel jen posílat dotazy či na ně odpovídat. Po získání 15 bodů už může i přidávat komentáře a hodnotit ostatni. Dále se pak nabízí další možnosti, nebudu je tu vypisovat, můžete si je přečíst ve faq.
Je vidět, že je server ještě mladý, jelikož již po chvíli používání člověku chybí pár užitešných funkcí. Mě osobně například chybí filtrování dotazů podle více tagů - nyní lze jen podle jednoho. Nicméně to vypadá, že vývojový tým ( mimochodem složený z docela známých jmen ) má zájem o odezvu uživatelů, tak se tato funkce snad brzy objeví.
Zatím jsem dosáhl hodnoceni 267 bodů a mé nadšení ještě neopadlo. Vypadá to, že se StackOverflow stane mým oblíbeným serverem ... a kdo ví, třeba nahradí i moje oblíbené fórum builder.cz.
Subscribe to:
Posts (Atom)