2013年11月24日日曜日

ShapeAccessor

using Microsoft.Office.Core;
using OfficeExcel = Microsoft.Office.Interop.Excel;

namespace Core.File.Excel
{
    /// <summary>
    /// ExcelのShapeアクセサー
    /// </summary>
    public class ShapeAccessor : BaseShapeAccessor
    {
        #region 構築・破棄

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="shape"></param>
        /// <param name="worksheet"></param>
        /// <param name="application">ExcelApplicationアクセサー</param>
        private ShapeAccessor(OfficeExcel.Shape shape, OfficeExcel.Worksheet worksheet, ExcelAccessor application)
            : base(shape, application)
        {
            Worksheet = worksheet;
        }

        /// <summary>
        /// 構成子
        /// </summary>
        /// <param name="shape"></param>
        /// <param name="worksheet"></param>
        /// <param name="application">ExcelApplicationアクセサー</param>
        /// <returns></returns>
        internal static ShapeAccessor GetAccessor(OfficeExcel.Shape shape, OfficeExcel.Worksheet worksheet, ExcelAccessor application)
        {
            return new ShapeAccessor(shape, worksheet, application);
        }

        #endregion

        #region プロパティ

        /// <summary>Worksheet</summary>
        private OfficeExcel.Worksheet Worksheet { get; set; }

        #endregion

        #region Fill

        /// <summary>Fill</summary>
        private FillAccessor fill;
        /// <summary>Fill</summary>
        public FillAccessor Fill
        {
            get
            {
                if (this.fill == null)
                {
                    OfficeExcel.FillFormat fill = Shape.Fill;
                    ReleaseComObjects.Add(fill);

                    this.fill = FillAccessor.GetAccessor(fill, Application);
                }
                return this.fill;
            }
        }

        #endregion

        #region TextFrame

        /// <summary>TextFrame</summary>
        private OfficeExcel.TextFrame textFrame;
        /// <summary>TextFrame</summary>
        private OfficeExcel.TextFrame TextFrame
        {
            get
            {
                if (this.textFrame == null)
                {
                    this.textFrame = Shape.TextFrame;
                    ReleaseComObjects.Add(this.textFrame);
                }
                return this.textFrame;
            }
        }

        /// <summary>Characters</summary>
        private OfficeExcel.Characters characters;
        /// <summary>Characters</summary>
        private OfficeExcel.Characters Characters
        {
            get
            {
                if (this.characters == null)
                {
                    this.characters = TextFrame.Characters(System.Type.Missing, System.Type.Missing);
                    ReleaseComObjects.Add(this.characters);
                }
                return this.characters;
            }
        }

        /// <summary>Text</summary>
        public string Text
        {
            get
            {
                return Characters.Text;
            }
            set
            {
                Characters.Text = value;
            }
        }

        /// <summary>Font</summary>
        private FontAccessor font;
        /// <summary>Font</summary>
        public FontAccessor Font
        {
            get
            {
                if (this.font == null)
                {
                    OfficeExcel.Font font = Characters.Font;
                    ReleaseComObjects.Add(font);

                    this.font = FontAccessor.GetAccessor(font);
                }
                return this.font;
            }
        }

        #endregion

        #region Hyperlink

        /// <summary>Hyperlinks</summary>
        private OfficeExcel.Hyperlinks hyperlinks;
        /// <summary>Hyperlinks</summary>
        private OfficeExcel.Hyperlinks Hyperlinks
        {
            get
            {
                if (this.hyperlinks == null)
                {
                    this.hyperlinks = Worksheet.Hyperlinks;
                    ReleaseComObjects.Add(this.hyperlinks);
                }
                return this.hyperlinks;
            }
        }

        /// <summary>
        /// Hyperlin設定
        /// </summary>
        /// <param name="address"></param>
        public void setHyperlink(string address)
        {
            Hyperlinks.Add(Shape, address);
        }

        #endregion
    }

    #region 列挙型

    /// <summary>オブジェクトの図形の種類</summary>
    public enum ExcelShapeType
    {
        /// <summary>星 16</summary>
        Star16point = MsoAutoShapeType.msoShape16pointStar,
        /// <summary>星 24</summary>
        Star24point = MsoAutoShapeType.msoShape24pointStar,
        /// <summary>星 32</summary>
        Star32point = MsoAutoShapeType.msoShape32pointStar,
        /// <summary>星 4</summary>
        Star4point = MsoAutoShapeType.msoShape4pointStar,
        /// <summary>星 5</summary>
        Star5point = MsoAutoShapeType.msoShape5pointStar,
        /// <summary>星 8</summary>
        Star8point = MsoAutoShapeType.msoShape8pointStar,
        /// <summary>[戻る] ボタンまたは [前へ] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonBackorPrevious = MsoAutoShapeType.msoShapeActionButtonBackorPrevious,
        /// <summary>[先頭] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonBeginning = MsoAutoShapeType.msoShapeActionButtonBeginning,
        /// <summary>既定の画像やテキストのないボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonCustom = MsoAutoShapeType.msoShapeActionButtonCustom,
        /// <summary>[ドキュメント] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonDocument = MsoAutoShapeType.msoShapeActionButtonDocument,
        /// <summary>[行末] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonEnd = MsoAutoShapeType.msoShapeActionButtonEnd,
        /// <summary>[進む] ボタンまたは [次へ] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonForwardorNext = MsoAutoShapeType.msoShapeActionButtonForwardorNext,
        /// <summary>[ヘルプ] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonHelp = MsoAutoShapeType.msoShapeActionButtonHelp,
        /// <summary>[ホーム] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonHome = MsoAutoShapeType.msoShapeActionButtonHome,
        /// <summary>[情報] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonInformation = MsoAutoShapeType.msoShapeActionButtonInformation,
        /// <summary>[ビデオ] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonMovie = MsoAutoShapeType.msoShapeActionButtonMovie,
        /// <summary>[戻る] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonReturn = MsoAutoShapeType.msoShapeActionButtonReturn,
        /// <summary>[サウンド] ボタン。マウスクリックとマウスオーバーの操作をサポートします。</summary>
        ActionButtonSound = MsoAutoShapeType.msoShapeActionButtonSound,
        /// <summary>円弧</summary>
        Arc = MsoAutoShapeType.msoShapeArc,
        /// <summary>バルーン</summary>
        Balloon = MsoAutoShapeType.msoShapeBalloon,
        /// <summary>曲折矢印</summary>
        BentArrow = MsoAutoShapeType.msoShapeBentArrow,
        /// <summary>屈折矢印 (既定では上矢印)</summary>
        BentUpArrow = MsoAutoShapeType.msoShapeBentUpArrow,
        /// <summary>額縁</summary>
        Bevel = MsoAutoShapeType.msoShapeBevel,
        /// <summary>アーチ</summary>
        BlockArc = MsoAutoShapeType.msoShapeBlockArc,
        /// <summary>円柱</summary>
        Can = MsoAutoShapeType.msoShapeCan,
        /// <summary>山形</summary>
        Chevron = MsoAutoShapeType.msoShapeChevron,
        /// <summary>環状矢印</summary>
        CircularArrow = MsoAutoShapeType.msoShapeCircularArrow,
        /// <summary>雲形吹き出し</summary>
        CloudCallout = MsoAutoShapeType.msoShapeCloudCallout,
        /// <summary>十字形</summary>
        Cross = MsoAutoShapeType.msoShapeCross,
        /// <summary>直方体</summary>
        Cube = MsoAutoShapeType.msoShapeCube,
        /// <summary>下カーブ矢印</summary>
        CurvedDownArrow = MsoAutoShapeType.msoShapeCurvedDownArrow,
        /// <summary>下カーブ リボン</summary>
        CurvedDownRibbon = MsoAutoShapeType.msoShapeCurvedDownRibbon,
        /// <summary>左カーブ矢印</summary>
        CurvedLeftArrow = MsoAutoShapeType.msoShapeCurvedLeftArrow,
        /// <summary>右カーブ矢印</summary>
        CurvedRightArrow = MsoAutoShapeType.msoShapeCurvedRightArrow,
        /// <summary>上カーブ矢印</summary>
        CurvedUpArrow = MsoAutoShapeType.msoShapeCurvedUpArrow,
        /// <summary>上カーブ リボン</summary>
        CurvedUpRibbon = MsoAutoShapeType.msoShapeCurvedUpRibbon,
        /// <summary>ひし形</summary>
        Diamond = MsoAutoShapeType.msoShapeDiamond,
        /// <summary>ドーナツ</summary>
        Donut = MsoAutoShapeType.msoShapeDonut,
        /// <summary>中かっこ</summary>
        DoubleBrace = MsoAutoShapeType.msoShapeDoubleBrace,
        /// <summary>大かっこ</summary>
        DoubleBracket = MsoAutoShapeType.msoShapeDoubleBracket,
        /// <summary>小波</summary>
        DoubleWave = MsoAutoShapeType.msoShapeDoubleWave,
        /// <summary>下矢印</summary>
        DownArrow = MsoAutoShapeType.msoShapeDownArrow,
        /// <summary>下矢印吹き出し</summary>
        DownArrowCallout = MsoAutoShapeType.msoShapeDownArrowCallout,
        /// <summary>下リボン</summary>
        DownRibbon = MsoAutoShapeType.msoShapeDownRibbon,
        /// <summary>爆発 1</summary>
        Explosion1 = MsoAutoShapeType.msoShapeExplosion1,
        /// <summary>爆発 2</summary>
        Explosion2 = MsoAutoShapeType.msoShapeExplosion2,
        /// <summary>フローチャート : 代替処理</summary>
        FlowchartAlternateProcess = MsoAutoShapeType.msoShapeFlowchartAlternateProcess,
        /// <summary>フローチャート : カード</summary>
        FlowchartCard = MsoAutoShapeType.msoShapeFlowchartCard,
        /// <summary>フローチャート : 照合</summary>
        FlowchartCollate = MsoAutoShapeType.msoShapeFlowchartCollate,
        /// <summary>フローチャート : 結合子</summary>
        FlowchartConnector = MsoAutoShapeType.msoShapeFlowchartConnector,
        /// <summary>フローチャート : データ</summary>
        FlowchartData = MsoAutoShapeType.msoShapeFlowchartData,
        /// <summary>フローチャート : 判断</summary>
        FlowchartDecision = MsoAutoShapeType.msoShapeFlowchartDecision,
        /// <summary>フローチャート : 論理積ゲート</summary>
        FlowchartDelay = MsoAutoShapeType.msoShapeFlowchartDelay,
        /// <summary>フローチャート : 直接アクセス記憶</summary>
        FlowchartDirectAccessStorage = MsoAutoShapeType.msoShapeFlowchartDirectAccessStorage,
        /// <summary>フローチャート : 表示</summary>
        FlowchartDisplay = MsoAutoShapeType.msoShapeFlowchartDisplay,
        /// <summary>フローチャート : 書類</summary>
        FlowchartDocument = MsoAutoShapeType.msoShapeFlowchartDocument,
        /// <summary>フローチャート : 抜出し</summary>
        FlowchartExtract = MsoAutoShapeType.msoShapeFlowchartExtract,
        /// <summary>フローチャート : 内部記憶</summary>
        FlowchartInternalStorage = MsoAutoShapeType.msoShapeFlowchartInternalStorage,
        /// <summary>フローチャート : 磁気ディスク</summary>
        FlowchartMagneticDisk = MsoAutoShapeType.msoShapeFlowchartMagneticDisk,
        /// <summary>フローチャート : 手操作入力</summary>
        FlowchartManualInput = MsoAutoShapeType.msoShapeFlowchartManualInput,
        /// <summary>フローチャート : 手作業</summary>
        FlowchartManualOperation = MsoAutoShapeType.msoShapeFlowchartManualOperation,
        /// <summary>フローチャート : 組合せ</summary>
        FlowchartMerge = MsoAutoShapeType.msoShapeFlowchartMerge,
        /// <summary>フローチャート : 複数書類</summary>
        FlowchartMultidocument = MsoAutoShapeType.msoShapeFlowchartMultidocument,
        /// <summary>フローチャート : 他ページ結合子</summary>
        FlowchartOffpageConnector = MsoAutoShapeType.msoShapeFlowchartOffpageConnector,
        /// <summary>フローチャート : 論理和</summary>
        FlowchartOr = MsoAutoShapeType.msoShapeFlowchartOr,
        /// <summary>フローチャート : 定義済み処理</summary>
        FlowchartPredefinedProcess = MsoAutoShapeType.msoShapeFlowchartPredefinedProcess,
        /// <summary>フローチャート : 準備</summary>
        FlowchartPreparation = MsoAutoShapeType.msoShapeFlowchartPreparation,
        /// <summary>フローチャート : 処理</summary>
        FlowchartProcess = MsoAutoShapeType.msoShapeFlowchartProcess,
        /// <summary>フローチャート : せん孔テープ</summary>
        FlowchartPunchedTape = MsoAutoShapeType.msoShapeFlowchartPunchedTape,
        /// <summary>フローチャート : 順次アクセス記憶</summary>
        FlowchartSequentialAccessStorage = MsoAutoShapeType.msoShapeFlowchartSequentialAccessStorage,
        /// <summary>フローチャート : 分類</summary>
        FlowchartSort = MsoAutoShapeType.msoShapeFlowchartSort,
        /// <summary>フローチャート : 記憶データ</summary>
        FlowchartStoredData = MsoAutoShapeType.msoShapeFlowchartStoredData,
        /// <summary>フローチャート : 和接合</summary>
        FlowchartSummingJunction = MsoAutoShapeType.msoShapeFlowchartSummingJunction,
        /// <summary>フローチャート : 端子</summary>
        FlowchartTerminator = MsoAutoShapeType.msoShapeFlowchartTerminator,
        /// <summary>メモ</summary>
        FoldedCorner = MsoAutoShapeType.msoShapeFoldedCorner,
        /// <summary>ハート</summary>
        Heart = MsoAutoShapeType.msoShapeHeart,
        /// <summary>六角形</summary>
        Hexagon = MsoAutoShapeType.msoShapeHexagon,
        /// <summary>横巻き</summary>
        HorizontalScroll = MsoAutoShapeType.msoShapeHorizontalScroll,
        /// <summary>二等辺三角形</summary>
        IsoscelesTriangle = MsoAutoShapeType.msoShapeIsoscelesTriangle,
        /// <summary>左矢印</summary>
        LeftArrow = MsoAutoShapeType.msoShapeLeftArrow,
        /// <summary>左矢印吹き出し</summary>
        LeftArrowCallout = MsoAutoShapeType.msoShapeLeftArrowCallout,
        /// <summary>左中かっこ</summary>
        LeftBrace = MsoAutoShapeType.msoShapeLeftBrace,
        /// <summary>左大かっこ</summary>
        LeftBracket = MsoAutoShapeType.msoShapeLeftBracket,
        /// <summary>左右矢印</summary>
        LeftRightArrow = MsoAutoShapeType.msoShapeLeftRightArrow,
        /// <summary>左右矢印吹き出し</summary>
        LeftRightArrowCallout = MsoAutoShapeType.msoShapeLeftRightArrowCallout,
        /// <summary>三方向矢印</summary>
        LeftRightUpArrow = MsoAutoShapeType.msoShapeLeftRightUpArrow,
        /// <summary>二方向矢印</summary>
        LeftUpArrow = MsoAutoShapeType.msoShapeLeftUpArrow,
        /// <summary>稲妻</summary>
        LightningBolt = MsoAutoShapeType.msoShapeLightningBolt,
        /// <summary>線吹き出し 1 (枠付き)</summary>
        LineCallout1 = MsoAutoShapeType.msoShapeLineCallout1,
        /// <summary>強調線吹き出し 1</summary>
        LineCallout1AccentBar = MsoAutoShapeType.msoShapeLineCallout1AccentBar,
        /// <summary>強調線吹き出し 1 (枠付き)</summary>
        LineCallout1BorderandAccentBar = MsoAutoShapeType.msoShapeLineCallout1BorderandAccentBar,
        /// <summary>線吹き出し 1</summary>
        LineCallout1NoBorder = MsoAutoShapeType.msoShapeLineCallout1NoBorder,
        /// <summary>線吹き出し 2 (枠付き)</summary>
        LineCallout2 = MsoAutoShapeType.msoShapeLineCallout2,
        /// <summary>強調線吹き出し 2</summary>
        LineCallout2AccentBar = MsoAutoShapeType.msoShapeLineCallout2AccentBar,
        /// <summary>強調線吹き出し 2 (枠付き)</summary>
        LineCallout2BorderandAccentBar = MsoAutoShapeType.msoShapeLineCallout2BorderandAccentBar,
        /// <summary>線吹き出し 2</summary>
        LineCallout2NoBorder = MsoAutoShapeType.msoShapeLineCallout2NoBorder,
        /// <summary>線吹き出し 3 (枠付き)</summary>
        LineCallout3 = MsoAutoShapeType.msoShapeLineCallout3,
        /// <summary>強調線吹き出し 3</summary>
        LineCallout3AccentBar = MsoAutoShapeType.msoShapeLineCallout3AccentBar,
        /// <summary>強調線吹き出し 3 (枠付き)</summary>
        LineCallout3BorderandAccentBar = MsoAutoShapeType.msoShapeLineCallout3BorderandAccentBar,
        /// <summary>線吹き出し 3</summary>
        LineCallout3NoBorder = MsoAutoShapeType.msoShapeLineCallout3NoBorder,
        /// <summary>線吹き出し 4 (枠付き)</summary>
        LineCallout4 = MsoAutoShapeType.msoShapeLineCallout4,
        /// <summary>強調線吹き出し 4</summary>
        LineCallout4AccentBar = MsoAutoShapeType.msoShapeLineCallout4AccentBar,
        /// <summary>強調線吹き出し 4 (枠付き)</summary>
        LineCallout4BorderandAccentBar = MsoAutoShapeType.msoShapeLineCallout4BorderandAccentBar,
        /// <summary>線吹き出し 4</summary>
        LineCallout4NoBorder = MsoAutoShapeType.msoShapeLineCallout4NoBorder,
        /// <summary>値の取得のみ可能です。他の状態の組み合わせを示します。</summary>
        Mixed = MsoAutoShapeType.msoShapeMixed,
        /// <summary>月</summary>
        Moon = MsoAutoShapeType.msoShapeMoon,
        /// <summary>禁止</summary>
        NoSymbol = MsoAutoShapeType.msoShapeNoSymbol,
        /// <summary>V 字形矢印</summary>
        NotchedRightArrow = MsoAutoShapeType.msoShapeNotchedRightArrow,
        /// <summary>サポートされていません。</summary>
        NotPrimitive = MsoAutoShapeType.msoShapeNotPrimitive,
        /// <summary>八角形</summary>
        Octagon = MsoAutoShapeType.msoShapeOctagon,
        /// <summary>楕円</summary>
        Oval = MsoAutoShapeType.msoShapeOval,
        /// <summary>円形吹き出し</summary>
        OvalCallout = MsoAutoShapeType.msoShapeOvalCallout,
        /// <summary>平行四角形</summary>
        Parallelogram = MsoAutoShapeType.msoShapeParallelogram,
        /// <summary>ホームベース</summary>
        Pentagon = MsoAutoShapeType.msoShapePentagon,
        /// <summary>ブローチ</summary>
        Plaque = MsoAutoShapeType.msoShapePlaque,
        /// <summary>四方向矢印</summary>
        QuadArrow = MsoAutoShapeType.msoShapeQuadArrow,
        /// <summary>四方向矢印吹き出し</summary>
        QuadArrowCallout = MsoAutoShapeType.msoShapeQuadArrowCallout,
        /// <summary>四角形</summary>
        Rectangle = MsoAutoShapeType.msoShapeRectangle,
        /// <summary>四角形吹き出し</summary>
        RectangularCallout = MsoAutoShapeType.msoShapeRectangularCallout,
        /// <summary>五角形</summary>
        RegularPentagon = MsoAutoShapeType.msoShapeRegularPentagon,
        /// <summary>右矢印</summary>
        RightArrow = MsoAutoShapeType.msoShapeRightArrow,
        /// <summary>右矢印吹き出し</summary>
        RightArrowCallout = MsoAutoShapeType.msoShapeRightArrowCallout,
        /// <summary>右中かっこ</summary>
        RightBrace = MsoAutoShapeType.msoShapeRightBrace,
        /// <summary>右大かっこ</summary>
        RightBracket = MsoAutoShapeType.msoShapeRightBracket,
        /// <summary>直角三角形</summary>
        RightTriangle = MsoAutoShapeType.msoShapeRightTriangle,
        /// <summary>角丸四角形</summary>
        RoundedRectangle = MsoAutoShapeType.msoShapeRoundedRectangle,
        /// <summary>角丸四角形吹き出し</summary>
        RoundedRectangularCallout = MsoAutoShapeType.msoShapeRoundedRectangularCallout,
        /// <summary>スマイル</summary>
        SmileyFace = MsoAutoShapeType.msoShapeSmileyFace,
        /// <summary>ストライプ矢印</summary>
        StripedRightArrow = MsoAutoShapeType.msoShapeStripedRightArrow,
        /// <summary>太陽</summary>
        Sun = MsoAutoShapeType.msoShapeSun,
        /// <summary>台形</summary>
        Trapezoid = MsoAutoShapeType.msoShapeTrapezoid,
        /// <summary>上矢印</summary>
        UpArrow = MsoAutoShapeType.msoShapeUpArrow,
        /// <summary>上矢印吹き出し</summary>
        UpArrowCallout = MsoAutoShapeType.msoShapeUpArrowCallout,
        /// <summary>上下矢印</summary>
        UpDownArrow = MsoAutoShapeType.msoShapeUpDownArrow,
        /// <summary>上下矢印吹き出し</summary>
        UpDownArrowCallout = MsoAutoShapeType.msoShapeUpDownArrowCallout,
        /// <summary>上リボン</summary>
        UpRibbon = MsoAutoShapeType.msoShapeUpRibbon,
        /// <summary>U ターン矢印</summary>
        UTurnArrow = MsoAutoShapeType.msoShapeUTurnArrow,
        /// <summary>縦巻き</summary>
        VerticalScroll = MsoAutoShapeType.msoShapeVerticalScroll,
        /// <summary>大波</summary>
        Wave = MsoAutoShapeType.msoShapeWave
    }

    #endregion
}

0 件のコメント:

コメントを投稿