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

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

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

Re[2]: C# ClosedXMLで値を代入した場合の表示の違い


(過去ログ 174 を表示中)

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

■99910 / inTopicNo.1)  C# ClosedXMLで値を代入した場合の表示の違い
  
□投稿者/ 河童 (21回)-(2022/06/17(Fri) 17:32:35)
河童 さんの Web サイト

分類:[C#] 

開発:VS2019 .NetFramework 4.0
Excel2019
ClosedXML:0.87.0.0
OpenOffice:4.1.3
資料アップロード:http://dtbn.jp/ygEMZhqR

C#で印刷処理のファームアプリを作成しています。
・Excel2019で記録表のテンプレートファイルを作成
・テンプレートにClosedXMLで記録表の値を代入
・OpenOfficeで印刷プレビューを表示

プレビューしたときにテンプレートの表示がおかしくなります。
テンプレートの記録表には、「項目1」「項目2」「項目3」や「備考」など項目名を代入しているセルがあります。

あるセルに値を代入して、印刷プレビューを表示させると、
項目名が二重になってしまいます。

「項目1」の行に値を代入したときは、正常に表示されます。
「項目2」の行に値を代入すると、表示がおかしくなります。

試しにテンプレートの項目名を削除して、
記録表の値を代入するときに、項目名も代入するようにしました。
しかし、結果は同じようにおかしくなります。

なぜ「項目2」の行に値を代入するとおかしくなるのでしょうか?
原因と対応策をお教えください。
よろしくお願いいたします。





        // 記録表作成
    public string KirokuSyuturyoku_EXCEL()
        {
            string ret = "";

            // ClosedXMLを使ってxlsxファイルを作成する
            // ファイル存在確認
            string xlPath = Application.StartupPath + "\\Excel\\Kiroku.xlsx";

            string saveName = "";

            // エクセルオープン
            ClosedXML.Excel.XLWorkbook workbook = null;
            try
            {
                workbook = new XLWorkbook(xlPath);
            }
            catch
            {
                return ret;
            }
            finally
            {
            }
      
            int Sheet = 1;
            IXLWorksheet WS1 = workbook.Worksheet("sheet1");
           
            // 問題なし
            WS1.Cell(7, 13).Value = "〇";
            WS1.Cell(11, 13).Value = "〇";
            WS1.Cell(15, 13).Value = "〇";
            WS1.Cell(19, 13).Value = "〇";
            WS1.Cell(23, 13).Value = "〇";

            // 問題あり(項目名がなぜか2重に表示されてる)
            WS1.Cell(8, 13).Value = "〇";
            WS1.Cell(12, 13).Value = "〇";
            WS1.Cell(16, 13).Value = "〇";
            WS1.Cell(20, 13).Value = "〇";
            WS1.Cell(24, 13).Value = "〇";
            
            // ファイルの保存
            // 保存先
            saveName = Application.StartupPath + "\\Kiroku.xlsx";
            // ファイル保存
            workbook.SaveAs(saveName);
            
            ret = saveName;
            return ret;
	}

        // 印刷プレビュー
    public void PrintDlg(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;

                try
                {

                    // 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]);


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



                }
                catch (unoidl.com.sun.star.uno.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }


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

        }

引用返信 編集キー/
■99911 / inTopicNo.2)  Re[1]: C# ClosedXMLで値を代入した場合の表示の違い
□投稿者/ kiku (268回)-(2022/06/17(Fri) 18:19:43)
No99910 (河童 さん) に返信
> 開発:VS2019 .NetFramework 4.0
> Excel2019
> ClosedXML:0.87.0.0
> OpenOffice:4.1.3
> 資料アップロード:http://dtbn.jp/ygEMZhqR
>
> C#で印刷処理のファームアプリを作成しています。
> ・Excel2019で記録表のテンプレートファイルを作成
> ・テンプレートにClosedXMLで記録表の値を代入
> ・OpenOfficeで印刷プレビューを表示

OpenOfficeではなく、Excelで開いた場合には、
表示はどのようになるのでしょうか?
Excelで崩れていなければ、OpenOffice側の問題のように思います。
引用返信 編集キー/
■99912 / inTopicNo.3)  Re[1]: C# ClosedXMLで値を代入した場合の表示の違い
□投稿者/ 伝説のカレー (18回)-(2022/06/17(Fri) 18:21:33)
No99910 (河童 さん) に返信

OpenOfficeには文字が二重に表示されるバグがあるっぽいですよ

openofficeでxlsxファイルを開くと文字が連続して表示される... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10181623875

ExcelやGoogle Sheetsで出力したファイルを確認して問題なければOpenOfficeのバグだと思います
引用返信 編集キー/
■99914 / inTopicNo.4)  Re[2]: C# ClosedXMLで値を代入した場合の表示の違い
□投稿者/ 河童 (22回)-(2022/06/18(Sat) 16:14:18)
河童 さんの Web サイト
kiku さん、伝説のカレー さん、ご返信ありがとうございました。

Excelで開くと問題なかったです。
OpenOffice側の問題のようです。これは困った。

xlsで保存して開くと問題はなくなるのですが、
今度はClosedXmlが対応できない。

LibreOfficeだと開けるかもとあるので、
試したいと思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -