C#を備えたOpenOffice UNOCLIを使用して、スプレッドシートを作成します

StackOverflow https://stackoverflow.com/questions/4743738

  •  13-10-2019
  •  | 
  •  

質問

これまで、ODSファイルの作成について議論するいくつかのソースを見つけました。 .NETでODSドキュメントを作成する方法c#.netで.odtファイルを作成する方法は?

そして最も興味深いことに 計算ファイルを開くための説明. 。ただし、これによりフルスクリーンでOpenOfficeが開きます。私が探しているのは、実際にOpenOfficeを開くことなく、Calcファイル(.ods)に書き込む方法です。 SaveFileDialogを開き、ファイル名を取得してから.odsファイルを作成および保存する関数を作成できるようにします。

そのようなことをするために利用できるC#コードの例はありますか?

役に立ちましたか?

解決

だから私はついにこの問題を解決し、他の人を再び経験するヘーゼルを救いたいと思っています。の基本ポイント ヘッドフェース 私にとっては:

  1. 使用する フォワードスラッシュ 後方スラッシュの代わりに(例: C:/ いいえ C:\ )
  2. Filtername 使用することは、ドキュメントを保存するために使用されるエンジンに設定する必要があります。考えられる値は含まれます writer8, calc8, MS Excel 97, 、したがって、スプレッドシートの場合、明らかに使用する必要があります Calc8
  3. そのオープンオフィスがforgroundにポップアップして、それがあなたのデータで満たされるのを待つことを望まない場合は、 PropertyValue とセット Hiddentrue.

Happy CodingとOpenOffice SDKをインストールすることを忘れないでください。UNOIDL参照を追加できます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.sheet;
using unoidl.com.sun.star.container;
using unoidl.com.sun.star.table;
using unoidl.com.sun.star.text;

namespace TimeScanner {
    class ReportGenerator {
        private const string fileName = 
            @"file:///C:/Documents and Settings/My Documents/Hours Report.ods";

        //Concrete Methods
        internal XComponent openCalcSheet() {
            XComponentContext oStrap = uno.util.Bootstrap.bootstrap();
            XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();
            XComponentLoader desktop = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");
            string url = @"private:factory/scalc";
            PropertyValue[] loadProps = new PropertyValue[1];
            loadProps[0] = new PropertyValue();
            loadProps[0].Name = "Hidden";
            loadProps[0].Value = new uno.Any(true);
            //PropertyValue[] loadProps = new PropertyValue[0];
            XComponent document = desktop.loadComponentFromURL(url, "_blank", 0, loadProps);
            return document;
        }

        public void writeToSheet(XComponent document) {
            XSpreadsheets oSheets = ((XSpreadsheetDocument)document).getSheets();
            XIndexAccess oSheetsIA = (XIndexAccess) oSheets;
            XSpreadsheet sheet = (XSpreadsheet) oSheetsIA.getByIndex(0).Value;
            XCell cell = sheet.getCellByPosition( 0, 0 ); //A1
            ((XText)cell).setString("Cost");
            cell = sheet.getCellByPosition( 1, 0 ); //B1
            cell.setValue(200);
            cell = sheet.getCellByPosition( 1, 2 ); //B3
           cell.setFormula("=B1 * 1.175");
        }

        public void saveCalcSheet(XComponent oDoc) {        
            PropertyValue[] propVals = new PropertyValue[1];
            propVals[0] = new PropertyValue();
            propVals[0].Name = "FilterName";
            propVals[0].Value = new uno.Any("calc8");
            ((XStorable)oDoc).storeToURL(fileName, propVals);
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top