我需要在OpenOffice中使用C++,VBScript,VB.Net或C#通過OLE或本地API進行簡單的郵件合併。有沒有好的例子?如何在OpenOffice中做一個簡單的郵件合併
回答
我還沒有想出了一個解決方案,我很快樂的事情,但這裏有一些注意事項:
問:什麼是郵件合併OO API?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
問:什麼支持團體?
A. http://user.services.openoffice.org/en/forum/viewforum.php?f=20
問:示例代碼?
A. http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
Q.更多的例子嗎?
A.文件:/// C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html(隨SDK)
問:如何建立例子?
A.例如,對於WriterDemo(C:\ Program Files文件\ OpenOffice.org_2.4_SDK \例子\ CLI \ VB.NET \ WriterDemo)
- 添加對一切都在這裏:C:\ PROGRAM文件\ OpenOffice.org 2.4 \程序\裝配
- 也就是說cli_basetypes,cli_cppuhelper,cli_types,cli_ure
問:OO使用郵件合併相同的單獨的數據/文檔文件?
A.它允許範圍內的數據源,包括CSV文件
問:不OO讓你合併所有不同類型(傳真,電子郵件,新的文件打印機)?
答:您可以合併到一個新文檔,打印和電子郵件
問:你能否添加自定義字段?
答:是的
問:你如何創建VB.Net一個新的文件?
A.
Dim xContext As XComponentContext xContext = Bootstrap.bootstrap() Dim xFactory As XMultiServiceFactory xFactory = DirectCast(xContext.getServiceManager(), _ XMultiServiceFactory) 'Create the Desktop Dim xDesktop As unoidl.com.sun.star.frame.XDesktop xDesktop = DirectCast(xFactory.createInstance("com.sun.star.frame.Desktop"), _ unoidl.com.sun.star.frame.XDesktop) 'Open a new empty writer document Dim xComponentLoader As unoidl.com.sun.star.frame.XComponentLoader xComponentLoader = DirectCast(xDesktop, unoidl.com.sun.star.frame.XComponentLoader) Dim arProps() As unoidl.com.sun.star.beans.PropertyValue = _ New unoidl.com.sun.star.beans.PropertyValue() {} Dim xComponent As unoidl.com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL(_ "private:factory/swriter", "_blank", 0, arProps) Dim xTextDocument As unoidl.com.sun.star.text.XTextDocument xTextDocument = DirectCast(xComponent, unoidl.com.sun.star.text.XTextDocument)
問:你如何保存文檔?
A.
Dim storer As unoidl.com.sun.star.frame.XStorable = DirectCast(xTextDocument, unoidl.com.sun.star.frame.XStorable) arProps = New unoidl.com.sun.star.beans.PropertyValue() {} storer.storeToURL("file:///C:/Users/me/Desktop/OpenOffice Investigation/saved doc.odt", arProps)
問:你如何打開文件?
A.
Dim xComponent As unoidl.com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL(_ "file:///C:/Users/me/Desktop/OpenOffice Investigation/saved doc.odt", "_blank", 0, arProps)
問:你如何開始在VB.Net郵件合併?
A.
不知道。此功能位於API參考中,但IDL中缺少該功能。我們可能會稍微擰緊。假設API正在工作,它看起來像運行合併相當簡單。
在VBScript:
集objServiceManager = WScript.CreateObject( 「com.sun.star.ServiceManager」)
「現在設置使用來自DOC 集oMailMerge萃取設置的新郵件合併= objServiceManager.createInstance( 「com.sun.star.text.MailMerge」)
oMailMerge.DocumentURL = 「文件:/// C:/用戶/我/桌面/ OpenOffice的調查/郵件merged.odt」 oMailMerge .DataSourceName =「adds」 oMailMerge.CommandType = 0 'http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Command = 「加」 oMailMerge.OutputType = 2' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(陣列())
在VB.Net(選項嚴格關)
Dim t_OOo As Type t_OOo = Type.GetTypeFromProgID("com.sun.star.ServiceManager") Dim objServiceManager As Object objServiceManager = System.Activator.CreateInstance(t_OOo) Dim oMailMerge As Object oMailMerge = t_OOo.InvokeMember("createInstance", _ BindingFlags.InvokeMethod, Nothing, _ objServiceManager, New [Object]() {"com.sun.star.text.MailMerge"}) 'Now set up a new MailMerge using the settings extracted from that doc oMailMerge.DocumentURL = "file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt" oMailMerge.DataSourceName = "adds" oMailMerge.CommandType = 0 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Command = "adds" oMailMerge.OutputType = 2 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(New [Object]() {})
同樣的事情,但與選項嚴格開啓(不工作)
Dim t_OOo As Type t_OOo = Type.GetTypeFromProgID("com.sun.star.ServiceManager") Dim objServiceManager As Object objServiceManager = System.Activator.CreateInstance(t_OOo) Dim oMailMerge As Object oMailMerge = t_OOo.InvokeMember("createInstance", _ BindingFlags.InvokeMethod, Nothing, _ objServiceManager, New [Object]() {"com.sun.star.text.MailMerge"}) 'Now set up a new MailMerge using the settings extracted from that doc oMailMerge.GetType().InvokeMember("DocumentURL", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt"}) oMailMerge.GetType().InvokeMember("DataSourceName", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"adds"}) oMailMerge.GetType().InvokeMember("CommandType", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {0}) oMailMerge.GetType().InvokeMember("Command", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"adds"}) oMailMerge.GetType().InvokeMember("OutputType", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {2}) oMailMerge.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod Or BindingFlags.IgnoreReturn, Nothing, oMailMerge, New [Object]() {}) ' this line fails with a type mismatch error
你應該看看Apache OpenOffice API。一個爲Open Office創建API的項目。他們說支持的幾種語言是:C++,Java,Python,CLI,StarBasic,JavaScript和OLE。
- 1. 如何做一個簡單的事件
- 2. PHP:郵件應該如何與openoffice合併?
- 3. 如何兩個簡單的鏡頭,結果合併成一個
- 4. 做一個簡單的C頭文件
- 5. 如何訪問郵件合併文檔中的一個條目?
- 6. 如何在Laravel中做一個簡單的重定向?
- 7. 如何在nette數據庫中做一個簡單的JOIN
- 8. 如何在Linq中做一個簡單的Count?
- 9. 如何做一個data.table合併操作
- 10. 簡單的方法將多個CSS文件合併爲一個?
- 11. 如何在gtk2hs中做簡單的ComboBoxEntry?
- 12. 如何將郵件合併到一個以上的特定合併域在同一個文件
- 13. 如何做一個清單的名單組合在Python
- 14. 如何合併的.csv文件做一個矩陣
- 15. 簡單的Flex的問題(如何做一個菜單)
- 16. 如何在Git/EGit上做一個簡單的還原工作?
- 17. 如何做兩個查詢併合併爲一個答案?
- 18. haskell簡單合併
- 19. OpenOffice Base - 將200個表合併爲一個
- 20. 如何做一個數組中的一個簡單的隨機排序
- 21. 如何在LINQ中做到這一簡單的加權平均?
- 22. 想做一個簡單的URL shortner
- 23. 需要做一個簡單的查詢
- 24. 做一個簡單的Twitter API調用
- 25. 做一個簡單的登錄頁面
- 26. 做一個簡單的Ajax調用
- 27. 如何在一個文件中合併多個文件。 MongoDB
- 28. 如何在PHP中將多個PDF文件合併到一個單頁PDF中
- 29. 如何在java中編寫簡單的郵件服務器?
- 30. 合併1個多維數組有一個簡單的數組
不要在.NET中使用反射來創建MailMerge的實例。我一直在這樣做的基礎上,這個答案,雖然它合併到一個文件,嘗試通過設置PrintOptions屬性合併到打印機將失敗,一個variantToAny轉換異常。正確的方法似乎是將上下文的getServiceManager()作爲XMultiComponentFactory返回,然後調用createInstanceWithContext(「com.sun.star.text.MailMerge」,上下文)來創建MailMerge對象。將其作爲XPropertySet進行投射,並使用XPropertySet的方法設置MailMerge的屬性。 – rgonet 2015-12-16 01:33:45