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

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

.NetからOpenOfficeCalcへの操作を汎用化したDLL(Part3)

.NetからOpenOfficeCalcへの操作を汎用化したDLL(Part2)の続きで、Part3です。(C#)

#region 各プロパティ設定デリゲートメソッド

///

文字色を設定する。(デリゲート経由で呼び出される)

///

private void SetCharColorDelegate(PropertiesDelegateParam prm)

prm.XPropertySet.setPropertyValue("CharColor", new uno.Any(ConvertOooColorFromDotNetColor(prm.ColorValue)));

}

///

セル背景色を設定する。(デリゲート経由で呼び出される)

///

private void SetCellBackColorDelegate(PropertiesDelegateParam prm) {

//下記の形式だとNGみたい

//prm.XPropertySet.setPropertyValue("CellBackColor", new uno.Any(ColorTranslator.ToWin32(prm.ColorValue)));

prm.XPropertySet.setPropertyValue("CellBackColor", new uno.Any(ConvertOooColorFromDotNetColor(prm.ColorValue)));

}

///

セル文字の大きさを設定する。(デリゲート経由で呼び出される)

///

private void SetCharHeightDelegate(PropertiesDelegateParam prm) {

prm.XPropertySet.setPropertyValue("CharHeight", new uno.Any(prm.FloatValue ));

}

///

セル枠までのスペースを設定する。(デリゲート経由で呼び出される)

///

private void SetParagraphDelegate(PropertiesDelegateParam prm) {

prm.XPropertySet.setPropertyValue(GetParagraphName(prm.SideValue), new uno.Any(prm.IntValue));

}

///

背景色を透過設定する。(デリゲート経由で呼び出される)

///

private void SetIsCellBackgroundTransparentDelegate(PropertiesDelegateParam prm) {

prm.XPropertySet.setPropertyValue("IsCellBackgroundTransparent", new uno.Any(prm.BoolValue));

}

///

文字色を取得する。(デリゲート経由で呼び出される)

///

private void GetCharColorDelegate(PropertiesDelegateParam prm) {

prm.ColorValue = Color.FromArgb((int)(prm.XPropertySet.getPropertyValue("CharColor").Value));

}

///

セル背景色を取得する。(デリゲート経由で呼び出される)

///

private void GetCellBackColorDelegate(PropertiesDelegateParam prm) {

//下記の形式だとNGみたい

//prm.ColorValue = ColorTranslator.FromWin32((int)(prm.XPropertySet.getPropertyValue("CellBackColor").Value));

//prm.ColorValue = Color.FromArgb((int)(prm.XPropertySet.getPropertyValue("CellBackColor").Value));

prm.ColorValue = ConvertDotNetColorFromOooColor((int)(prm.XPropertySet.getPropertyValue("CellBackColor").Value));

}

///

セル文字の大きさを取得する。(デリゲート経由で呼び出される)

///

private void GetCharHeightDelegate(PropertiesDelegateParam prm){

prm.FloatValue = (float)(prm.XPropertySet.getPropertyValue("CharHeight").Value);

}

///

セル枠までのスペースを取得する。(デリゲート経由で呼び出される)

///

private void GetParagraphDelegate(PropertiesDelegateParam prm){

prm.IntValue = (int)(prm.XPropertySet.getPropertyValue(GetParagraphName(prm.SideValue)).Value);

}

///

背景色を透過設定を取得する。(デリゲート経由で呼び出される)

///

private void GetIsCellBackgroundTransparentDelegate(PropertiesDelegateParam prm){

prm.BoolValue = (bool)(prm.XPropertySet.getPropertyValue("IsCellBackgroundTransparent").Value);

}

///

パディング名を取得

///

///

private string GetParagraphName(ParagraphSide side){

string strPropName = "";

switch (side) {

case ParagraphSide.Left:

strPropName = "ParaLeftMargin";

break;

case ParagraphSide.Right:

strPropName = "ParaRighttMargin";

break;

case ParagraphSide.Top:

strPropName = "ParaTopMargin";

break;

case ParagraphSide.Bottom:

strPropName = "ParaBottomMargin";

break;

default:

break;

}

return strPropName;

}

///

カラー情報をOpenOfficeで扱える形式に変換

private int ConvertOooColorFromDotNetColor(Color color) {

return (int)((int)color.R * Math.Pow(2, 16)

+ (int)color.G * Math.Pow(2, 8)

+ (int)color.B);

}

///

OpenOfficeのカラー情報を.Netの Color に変換

private Color ConvertDotNetColorFromOooColor(int iClr)

{

if (iClr < 0)

return Color.Transparent;//-1時は透明とみなす

return Color.FromArgb(iClr >> 16 , (iClr >> 8) & 0xFF, iClr & 0xFF );

}

#endregion

///

シートが選択されていないなら例外発生

private void IsSheetNullCheckException(){

if (!IsSheetNullCheck()){

throw new OpenOfficeException("OpenOffice操作クラス例外:sheetが選択されていません。");

}

}

///

セルが選択されていないなら例外発生

private void IsCellNullCheckException(){

if (!IsCellNullCheck()){

throw new OpenOfficeException("OpenOffice操作クラス例外:cellが選択されていません。");

}

}

#region IDisposable メンバ

///

クラス破棄時

public void Dispose(){

//OpenOffice閉じる

OpenOfficeClose();

//OpenOfficeのプロセス強制終了

OpenOfficeProcessKill();

}

#endregion

}

///

プロパティ設定・取得のための値を持つクラス。

/// Actionデリゲートでつかうるようにするため各型のを扱えるようにラップしたもの。

class PropertiesDelegateParam{

private XPropertySet xPropSet;

private Color clrValue;

private double dValue;

private float fValue;

private int iValue;

private long lValue;

private string strValue;

private bool blValue;

private OpenOffice.ParagraphSide sideValue;

///

コンストラクタ。

/// (XPropertySet)this.cell

protected internal PropertiesDelegateParam(XPropertySet xPropertySet){

xPropSet = xPropertySet;

}

///

プロパティでカラー情報を設定・取得

protected internal Color ColorValue{

get { return clrValue; }

set { clrValue = value; }

}

///

プロパティで倍精度小数点を設定・取得

protected internal double DoubleValue{

get { return dValue; }

set { dValue = value; }

}

///

プロパティで単精度小数点を設定・取得

protected internal float FloatValue{

get { return fValue; }

set { fValue = value; }

}

///

プロパティで整数を設定・取得

protected internal int IntValue{

get { return iValue; }

set { iValue = value; }

}

///

プロパティで長整数を設定・取得

protected internal long LongValue{

get { return lValue; }

set { lValue = value; }

}

///

プロパティで文字列を設定・取得

protected internal string StringValue{

get { return strValue; }

set { strValue = value; }

}

///

プロパティで真偽を設定・取得

protected internal bool BoolValue{

get { return blValue; }

set { blValue = value; }

}

///

プロパティで方向を設定・取得

protected internal OpenOffice.ParagraphSide SideValue{

get { return sideValue; }

set { sideValue = value; }

}

///

XPropertySetオブジェクトを取得

protected internal XPropertySet XPropertySet{

get { return xPropSet; }

}

}

///

このクラスの例外

class OpenOfficeException : System.Exception{

public OpenOfficeException(string message)

: base(message){

}

}

}