人気ブログランキング | 話題のタグを見る
(.Net,OpenOffice).NetからCalc操作時にセルのプロパティを変更する
.NetからOpenOfficeのCalcを操作する基本の方法は、(.Net,OpenOffice).NetからCalc操作時に罫線(枠線)を引くが参考になります。

今回は、セルの文字色、背景色、文字の大きさ、セル枠までのスペース(パディング)を変更する方法です。

サンプルは、OpenOffice.org_3.2_SDK\sdk\examples\CLI\CSharp\Spreadsheet\SpreadsheetDocHelper.cs の prepareRange メソッドに書いてあります。
サンプルでは下記のようになっています。

// --- Change cell properties. ---
xPropSet = (unoidl.com.sun.star.beans.XPropertySet) xCell;
// from styles.CharacterProperties
xPropSet.setPropertyValue(
"CharColor", new uno.Any( (Int32) 0x003399 ) );
xPropSet.setPropertyValue(
"CharHeight", new uno.Any( (Single) 20.0 ) );
// from styles.ParagraphProperties
xPropSet.setPropertyValue(
"ParaLeftMargin", new uno.Any( (Int32) 500 ) );
// from table.CellProperties
xPropSet.setPropertyValue(
"IsCellBackgroundTransparent", new uno.Any( false ) );
xPropSet.setPropertyValue(
"CellBackColor", new uno.Any( (Int32) 0x99CCFF ) );


ハマったのは色の設定です。
.Net の Color構造体をそのまま使おうとしたのですが、アルファ値を含むので使えません。
ColorTranslator.ToWin32 メソッドを使ってアルファ値を含まないInt32型の値を使おうとしましたが、どうも違う色になってしまいます。
ColorTranslator.ToWin32 メソッドの返り値で表すカラー情報はCOLORREF型という4バイトの符合なし整数のようで、内部的には 0x00BBGGRR で色を表しているようです。
OpenOfficeのプロパティに設定すべきなのは 0xRRGGBB になるので、違う色になってしまうのですね。

結局色に関して、Color構造体を 0xRRGGBB に変換するときは Rに2^16したもの + Gに2^8したもの + B としました。
逆に 0xRRGGBB から Color構造体を作るときは、Rは16ビット右シフト,Gは8ビット右シフト,Bはそのまま の値で Color.FromArgb メソッドから生成することにしました。

さて、OpenOfficeCalcへの操作をいちいちソース内に書くのは面倒です。
ということで、OpenOfficeCalcへの操作を汎用化したDLLを作成してます。まだ未完成なので問題があるかと思いますが、今回のセルプロパティの部分も含めて載せてみたいと思います。


以前に書いた罫線へのアクセスやセルへのアクセス、デリゲートを使った部分も入っています。(C# .NetFramework2.0)
文字数制限のため、ハイライト無し&&分割して掲載します。
NetからOpenOfficeCalcへの操作を汎用化したDLL(Part1)
NetからOpenOfficeCalcへの操作を汎用化したDLL(Part2)
NetからOpenOfficeCalcへの操作を汎用化したDLL(Part3)


参考:
●Win32API(C言語)編 第13章 色の指定
Service CellProperties
by Jehoshaphat | 2011-10-20 02:02 | .Net開発


<< NetからOpenOffice... (.Net)C#でのべき乗の計算 >>