3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net,OpenOffice).NetからCalcの行の挿入、削除を行う

(.NetからOpenOfficeを操作する方法は(.Net,OpenOffice).Net から OpenOffice ドキュメントを操作するを参照。OpenOfficeは3.2です。)

Calc操作時に、行を挿入、削除する方法です。

OpenOffice SDKのサンプルにやりたいことが書いていました。

サンプルは、OpenOffice.org_3.2_SDK\sdk\examples\CLI\CSharp\Spreadsheet\GeneralTableSample.cs の doFormattingSamples メソッドに書いてあります。

ほぼサンプルそのままですが、一応ソース載せておきます。(C#)

//下記の型インポート必要

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.container;

 

string filename = @"d:\a.ods";

 

//ファイルパスを変換

Uri uriCalcFile;

Uri.TryCreate(filename, UriKind.Absolute, out uriCalcFile);

filename = uriCalcFile.ToString();

//コンポーネントコンテキストオブジェクト取得

XComponentContext context = Bootstrap.bootstrap();

//サービスマネージャ取得

XMultiServiceFactory factory = (XMultiServiceFactory)context.getServiceManager();

//コンポーネントローダオブジェクト取得

XComponentLoader loader = (XComponentLoader)factory.createInstance("com.sun.star.frame.Desktop");

//ドキュメントオブジェクト取得

XSpreadsheetDocument doc = (XSpreadsheetDocument)loader.loadComponentFromURL(filename, "_blank", 0, null);

//シート取得

XSpreadsheets sheets = doc.getSheets();

XSpreadsheet xSheet = (XSpreadsheet)sheets.getByName("Sheet1").Value;

 

//行オブジェクト取得

XColumnRowRange xCRRange = (XColumnRowRange)sheet;

XTableRows xRows = xCRRange.getRows();

 

//行挿入(5行目から3行挿入する)

xRows.insertByIndex(5, 3);

 

 

//行削除(10行目から2行削除する)

xRows.removeByIndex(10, 2);

insertByIndex,removeByIndex の行インデックスは0から始まっていることに注意です。