C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C#でOpenOfficeの印刷プレビューを開く方法


(過去ログ 173 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■99602 / inTopicNo.1)  C#でOpenOfficeの印刷プレビューを開く方法
  
□投稿者/ 河童 (1回)-(2022/05/02(Mon) 17:55:28)

分類:[C#] 

C#でOpenOfficeの印刷プレビューを開く方法を教えてください。
環境:VS2019 C#
参照ページ:
https://jehupc.exblog.jp/12764408/
https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/StarDesktop

ClosedXMLでエクセルのファイルを作成して、
そのファイルをOpenOfficeで開くことはできました。

すぐに確認して印刷ができるように、印刷プレビューの画面を開きたいと思っています。
もし設定ができるのであれば、設定方法を教えてください。
よろしくお願いいたします。


// OpenOffice用
using uno.util;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.sheet;
using unoidl.com.sun.star.table;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.util;
using unoidl.com.sun.star.view;
using unoidl.com.sun.star.drawing;
using System.ComponentModel;

        public void OpenOfficePrintDlg(string xlPath)
        {
        
            //コンポーネントコンテキストオブジェクト取得(OpenOfficeの基本プロセスらしい)
            XComponentContext context = Bootstrap.bootstrap();

            //サービスマネージャ取得
            XMultiServiceFactory factory = (XMultiServiceFactory)context.getServiceManager();

            //コンポーネントローダオブジェクト取得
            XComponentLoader loader = (XComponentLoader)factory.createInstance("com.sun.star.frame.Desktop");
                
            //ファイルを開きドキュメントオブジェクトを生成
            string docFile = "file:///" + xlPath;
              

            // OpenOffice.org Calcの起動(ファイルを指定して起動) 
            XComponent doc = loader.loadComponentFromURL(docFile, "_blank", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);
            XSpreadsheetDocument spredsheetDocument = (XSpreadsheetDocument)doc;

            // 閉じる
            if (doc != null)
            {
                XCloseable xCloseable = (XCloseable)doc;
                xCloseable.close(true);
                doc = null;
            }
 
        }


引用返信 編集キー/
■99608 / inTopicNo.2)  Re[1]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ 伝説のカレー (7回)-(2022/05/03(Tue) 17:56:52)
No99602 (河童 さん) に返信
Sub Main
	Dim document   As object
	Dim dispatcher As object
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:PrintPreview", "", 0, Array())
End Sub

マクロの記録だとこうなりました
DispatchHelperのインスタンスを作ってexecuteDispatchすればいいみたいです

引用返信 編集キー/
■99620 / inTopicNo.3)  Re[2]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ 河童 (2回)-(2022/05/06(Fri) 14:53:32)
No99608 (伝説のカレー さん) に返信
C#でどのようにインスタンスを作成するかが難しいです。
・コンテキストに「createUnoService」がなくてエラー。
・「executeDispatch」でdocFileを指定することができません。

インスタンスの作成方法を教えてください。よろしくお願いします。

// OpenOffice.org Calcの起動して印刷プレビューを開く(ファイルを指定して起動)
XDispatchHelper dispatcher = (XDispatchHelper)createUnoService("com.sun.star.frame.DispatchHelper");
dispatcher.executeDispatch(docFile, ".uno:PrintPreview", "", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);

引用返信 編集キー/
■99621 / inTopicNo.4)  Re[3]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ Hongliang (1235回)-(2022/05/06(Fri) 16:10:54)
https://ask.libreoffice.org/t/how-to-call-from-c-a-basic-macro-defined-in-a-calc-document/33390/
ここのbertrandgajacさんの投稿に、executeDispatchを呼び出すまでのコードが記載されていますが、いかがでしょうか。
// 本件とは直接関係ないコードもそれなりにあるようですが。
引用返信 編集キー/
■99623 / inTopicNo.5)  Re[4]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ 河童 (3回)-(2022/05/06(Fri) 19:12:48)
No99621 (Hongliang さん) に返信
> https://ask.libreoffice.org/t/how-to-call-from-c-a-basic-macro-defined-in-a-calc-document/33390/
参考にしました。
ビルド時にエラーはなくなりましたが、OpenOfficeが開いた後にエラーが発生します。
unoidl.com.sun.star.task.ErrorCodeIOException
Server stack trace;



//コンポーネントコンテキストオブジェクト取得(OpenOfficeの基本プロセスらしい)
XComponentContext context = Bootstrap.bootstrap();

//サービスマネージャ取得
XMultiServiceFactory factory = (XMultiServiceFactory)context.getServiceManager();

//コンポーネントローダオブジェクト取得
XComponentLoader loader = (XComponentLoader)factory.createInstance("com.sun.star.frame.Desktop");
                
//ファイルを開きドキュメントオブジェクトを生成
string docFile = "file:///" + xlPath;

//印刷プレビューを開きたい
XComponent component = loader.loadComponentFromURL(docFile, "nom_fic", 0, new PropertyValue[0]);

XSpreadsheetDocument document = (XSpreadsheetDocument)component;
XSpreadsheets feuilles = document.getSheets();

XStorable doc = (XStorable)document;
doc.storeAsURL(docFile, new unoidl.com.sun.star.beans.PropertyValue[0]);
XModel controller = (XModel)component;
XFrame frame = controller.getCurrentController().getFrame();

XDispatchHelper dispatch_helper = (XDispatchHelper)factory.createInstance("com.sun.star.frame.DispatchHelper");
dispatch_helper.executeDispatch((XDispatchProvider)frame, ".uno:PrintPreview", "", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);

引用返信 編集キー/
■99630 / inTopicNo.6)  Re[5]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ 伝説のカレー (8回)-(2022/05/07(Sat) 18:11:50)
No99623 (河童 さん) に返信

// OpenOffice.org Calcの起動(ファイルを指定して起動) 
XComponent doc = loader.loadComponentFromURL(docFile, "nom_fic", 0, new PropertyValue[0]);
XFrame frame = ((XModel)doc).getCurrentController().getFrame();

// 印刷プレビューを開く
XDispatchHelper dispatch_helper = (XDispatchHelper)factory.createInstance("com.sun.star.frame.DispatchHelper");
dispatch_helper.executeDispatch((XDispatchProvider)frame, ".uno:PrintPreview", "", 0, new PropertyValue[0]);


これで良さそうな気がします

引用返信 編集キー/
■99659 / inTopicNo.7)  Re[6]: C#でOpenOfficeの印刷プレビューを開く方法
□投稿者/ 河童 (4回)-(2022/05/09(Mon) 14:00:48)
No99630 (伝説のカレー さん) に返信

ご回答ありがとうございました。
印刷プレビューの画面を開くことができました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -