2013年11月26日火曜日

FillAccessor

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

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

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="fill"></param>
        private FillAccessor(OfficeExcel.FillFormat fill, ExcelAccessor application)
            :base(application)
        {
            Fill = fill;
        }

        /// <summary>
        /// 構成子
        /// </summary>
        /// <param name="fill"></param>
        /// <returns></returns>
        internal static FillAccessor GetAccessor(OfficeExcel.FillFormat fill, ExcelAccessor application)
        {
            return new FillAccessor(fill, application);
        }

        #endregion

        #region プロパティ

        /// <summary>border</summary>
        private OfficeExcel.FillFormat Fill { get; set; }

        /// <summary>ForeColor</summary>
        private OfficeExcel.ColorFormat foreColor;
        /// <summary>ForeColor</summary>
        private OfficeExcel.ColorFormat ForeColor
        {
            get
            {
                if (this.foreColor == null)
                {
                    this.foreColor = Fill.ForeColor;
                    ReleaseComObjects.Add(this.foreColor);
                }
                return this.foreColor;
            }
        }

        /// <summary>塗りつぶし色</summary>
        public int ForeColorRGB
        {
            get
            {
                return ForeColor.RGB;
            }
            set
            {
                ForeColor.RGB = value;
            }
        }

        /// <summary>透明度</summary>
        public float Transparency
        {
            get
            {
                return Fill.Transparency;
            }
            set
            {
                Fill.Transparency = value;
            }
        }

        /// <summary>Visible</summary>
        public bool Visible
        {
            set
            {
                if (value)
                {
                    Fill.Visible = MsoTriState.msoTrue;
                }
                else
                {
                    Fill.Visible = MsoTriState.msoFalse;
                }
            }
        }

        #endregion
    }
}

2013年11月24日日曜日

FontAccessor

using OfficeExcel = Microsoft.Office.Interop.Excel;

namespace Core.File.Excel
{
    /// <summary>
    /// ExcelFontアクセサー
    /// </summary>
    public class FontAccessor
    {
        #region 構築・破棄

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="font"></param>
        private FontAccessor(OfficeExcel.Font font)
        {
            Font = font;
        }

        /// <summary>
        /// 構成子
        /// </summary>
        /// <param name="font"></param>
        /// <returns></returns>
        internal static FontAccessor GetAccessor(OfficeExcel.Font font)
        {
            return new FontAccessor(font);
        }

        #endregion

        #region プロパティ

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

        /// <summary>サイズ</summary>
        public int Size
        {
            get
            {
                return Font.Size;
            }
            set
            {
                Font.Size = value;
            }
        }

        /// <summary>フォント名</summary>
        public string Name
        {
            get
            {
                return Font.Name;
            }
            set
            {
                Font.Name = value;
            }
        }

        /// <summary>スタイル-太字</summary>
        public bool Bold
        {
            get
            {
                return Font.Bold;
            }
            set
            {
                Font.Bold = value;
            }
        }

        /// <summary>スタイル-斜体</summary>
        public bool Italic
        {
            get
            {
                return Font.Italic;
            }
            set
            {
                Font.Italic = value;
            }
        }

        /// <summary>スタイル-下線</summary>
        public ExcelUnderlineStyle Underline
        {
            get
            {
                return Font.Underline;
            }
            set
            {
                Font.Underline = value;
            }
        }

        /// <summary>色</summary>
        public dynamic Color
        {
            get
            {
                return Font.Color;
            }
            set
            {
                Font.Color = value;
            }
        }

        /// <summary>色</summary>
        public int ColorIndex
        {
            get
            {
                return Font.ColorIndex;
            }
            set
            {
                Font.ColorIndex = value;
            }
        }

        /// <summary>文字飾り-取り消し線</summary>
        public bool Strikethrough
        {
            get
            {
                return Font.Strikethrough;
            }
            set
            {
                Font.Strikethrough = value;
            }
        }

        /// <summary>文字飾り-上付き</summary>
        public bool Superscript
        {
            get
            {
                return Font.Superscript;
            }
            set
            {
                Font.Superscript = value;
            }
        }

        /// <summary>文字飾り-下付き</summary>
        public bool Subscript
        {
            get
            {
                return Font.Subscript;
            }
            set
            {
                Font.Subscript = value;
            }
        }

        #endregion
    }

    #region 列挙型

    /// <summary>フォントに適用される下線の種類</summary>
    public enum ExcelUnderlineStyle
    {
        /// <summary>太い二重下線</summary>
        Double = OfficeExcel.XlUnderlineStyle.xlUnderlineStyleDouble,
        /// <summary>互いに近接する細い二重下線</summary>
        DoubleAccounting = OfficeExcel.XlUnderlineStyle.xlUnderlineStyleDoubleAccounting,
        /// <summary>下線なし</summary>
        None = OfficeExcel.XlUnderlineStyle.xlUnderlineStyleNone,
        /// <summary>一重下線</summary>
        Single = OfficeExcel.XlUnderlineStyle.xlUnderlineStyleSingle,
        /// <summary>サポートされていません。</summary>
        SingleAccounting = OfficeExcel.XlUnderlineStyle.xlUnderlineStyleSingleAccounting
    }

    #endregion
}

BaseShapeAccessor

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

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

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

        #endregion

        #region プロパティ

        /// <summary>cell</summary>
        protected OfficeExcel.Shape Shape { get; private set; }

        /// <summary>
        /// Top
        /// </summary>
        public float Top
        {
            get
            {
                return Shape.Top;
            }
            set
            {
                Shape.Top = value;
            }
        }

        /// <summary>
        /// Left
        /// </summary>
        public float Left
        {
            get
            {
                return Shape.Left;
            }
            set
            {
                Shape.Left = value;
            }
        }

        /// <summary>
        /// Width
        /// </summary>
        public float Width
        {
            get
            {
                return Shape.Width;
            }
            set
            {
                Shape.Width = value;
            }
        }

        /// <summary>
        /// Height
        /// </summary>
        public float Height
        {
            get
            {
                return Shape.Height;
            }
            set
            {
                Shape.Height = value;
            }
        }

        /// <summary>
        /// 名前
        /// </summary>
        public string Name
        {
            get
            {
                return Shape.Name;
            }
            set
            {
                Shape.Name = value;
            }
        }

        #endregion

        #region Shape

        /// <summary>
        /// Shape取得
        /// </summary>
        /// <param name="baseShapeAccessor"></param>
        /// <returns></returns>
        protected OfficeExcel.Shape GetShape(BaseShapeAccessor baseShapeAccessor)
        {
            return baseShapeAccessor.Shape;
        }

        #endregion

        #region Line

        /// <summary>Line</summary>
        protected OfficeExcel.LineFormat line;
        /// <summary>Line</summary>
        protected OfficeExcel.LineFormat Line
        {
            get
            {
                if (this.line == null)
                {
                    this.line = Shape.Line;
                    ReleaseComObjects.Add(this.line);
                }
                return this.line;
            }
        }

        /// <summary>LineForeColor</summary>
        protected OfficeExcel.ColorFormat lineForeColor;
        /// <summary>LineForeColor</summary>
        protected OfficeExcel.ColorFormat LineForeColor
        {
            get
            {
                if (this.lineForeColor == null)
                {
                    this.lineForeColor = Line.ForeColor;
                    ReleaseComObjects.Add(this.lineForeColor);
                }
                return this.lineForeColor;
            }
        }

        /// <summary>枠線の色</summary>
        public int LineForeColorRGB
        {
            get
            {
                return LineForeColor.RGB;
            }
            set
            {
                LineForeColor.RGB = value;
            }
        }

        /// <summary>枠線の太さ</summary>
        public float LineWeight
        {
            get
            {
                return Line.Weight;
            }
            set
            {
                Line.Weight = value;
            }
        }

        /// <summary>LineVisible</summary>
        public bool LineVisible
        {
            set
            {
                if (value)
                {
                    Line.Visible = MsoTriState.msoTrue;
                }
                else
                {
                    Line.Visible = MsoTriState.msoFalse;
                }
            }
        }

        /// <summary>線のスタイル</summary>
        public ExcelLineStyle LineStyle
        {
            get
            {
                return (ExcelLineStyle)Line.Style;
            }
            set
            {
                Line.Style = (MsoLineStyle)value;
            }
        }

        /// <summary>線の破線スタイル</summary>
        public ExcelLineDashStyle LineDashStyle
        {
            get
            {
                return (ExcelLineDashStyle)Line.DashStyle;
            }
            set
            {
                Line.DashStyle = (MsoLineDashStyle)value;
            }
        }

        #endregion
    }

    #region 列挙型

    /// <summary>ステートのブール型</summary>
    public enum ExcelTriState
    {
        /// <summary>サポートされていません。</summary>
        CTrue = MsoTriState.msoCTrue,
        /// <summary>偽 (False)</summary>
        False = MsoTriState.msoFalse,
        /// <summary>サポートされていません。</summary>
        TriStateMixed = MsoTriState.msoTriStateMixed,
        /// <summary>サポートされていません。</summary>
        TriStateToggle = MsoTriState.msoTriStateToggle,
        /// <summary>真 (True)</summary>
        True = MsoTriState.msoTrue
    }

    /// <summary>線のスタイル</summary>
    public enum ExcelLineStyle
    {
        /// <summary>単一の線</summary>
        LineSingle = MsoLineStyle.msoLineSingle,
        /// <summary>サポートされていません。</summary>
        LineStyleMixed = MsoLineStyle.msoLineStyleMixed,
        /// <summary>各辺に細い線が添えられた太い線</summary>
        LineThickBetweenThin = MsoLineStyle.msoLineThickBetweenThin,
        /// <summary>細い線の横に太い線が添えられます。水平線の場合、細い線の上に太い線が添えられます。垂直線の場合、細い線の左に太い線が添えられます。</summary>
        LineThickThin = MsoLineStyle.msoLineThickThin,
        /// <summary>細い線の横に太い線が添えられます。水平線の場合、細い線の下に太い線が添えられます。垂直線の場合、細い線の右に太い線が添えられます。</summary>
        LineThinThick = MsoLineStyle.msoLineThinThick,
        /// <summary>2 本の細い線</summary>
        LineThinThin = MsoLineStyle.msoLineThinThin
    }

    /// <summary>線の破線スタイル</summary>
    public enum ExcelLineDashStyle
    {
        /// <summary>破線</summary>
        LineDash = MsoLineDashStyle.msoLineDash,
        /// <summary>一点鎖線</summary>
        LineDashDot = MsoLineDashStyle.msoLineDashDot,
        /// <summary>二点鎖線</summary>
        LineDashDotDot = MsoLineDashStyle.msoLineDashDotDot,
        /// <summary>サポートされていません。</summary>
        LineDashStyleMixed = MsoLineDashStyle.msoLineDashStyleMixed,
        /// <summary>長破線</summary>
        LineLongDash = MsoLineDashStyle.msoLineLongDash,
        /// <summary>長鎖線</summary>
        LineLongDashDot = MsoLineDashStyle.msoLineLongDashDot,
        /// <summary>点線 (丸)</summary>
        LineRoundDot = MsoLineDashStyle.msoLineRoundDot,
        /// <summary>実線</summary>
        LineSolid = MsoLineDashStyle.msoLineSolid,
        /// <summary>点線 (角)</summary>
        LineSquareDot = MsoLineDashStyle.msoLineSquareDot
    }

    #endregion
}

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
}

ConnectorAccessor

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

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

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

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

        #endregion

        #region メソッド

        /// <summary>
        /// コネクタに接続されている図形間で、コネクタの距離が最も短くなるように、コネクタの経路を変更します。
        /// </summary>
        public void RerouteConnections()
        {
            Shape.RerouteConnections();
        }

        #endregion

        #region Line

        /// <summary>線の先の矢印の形</summary>
        public ExcelArrowheadStyle BeginArrowheadStyle
        {
            get
            {
                return (ExcelArrowheadStyle)Line.BeginArrowheadStyle;
            }
            set
            {
                Line.BeginArrowheadStyle = (MsoArrowheadStyle)value;
            }
        }

        /// <summary>線の先の矢印の形</summary>
        public ExcelArrowheadStyle EndArrowheadStyle
        {
            get
            {
                return (ExcelArrowheadStyle)Line.EndArrowheadStyle;
            }
            set
            {
                Line.EndArrowheadStyle = (MsoArrowheadStyle)value;
            }
        }

        /// <summary>線の矢印の終点部の幅</summary>
        public ExcelArrowheadWidth BeginArrowheadWidth
        {
            get
            {
                return (ExcelArrowheadWidth)Line.BeginArrowheadWidth;
            }
            set
            {
                Line.BeginArrowheadWidth = (MsoArrowheadWidth)value;
            }
        }

        /// <summary>線の矢印の終点部の幅</summary>
        public ExcelArrowheadWidth EndArrowheadWidth
        {
            get
            {
                return (ExcelArrowheadWidth)Line.EndArrowheadWidth;
            }
            set
            {
                Line.EndArrowheadWidth = (MsoArrowheadWidth)value;
            }
        }

        /// <summary>線の矢印の終点部の長さ</summary>
        public ExcelArrowheadLength BeginArrowheadLength
        {
            get
            {
                return (ExcelArrowheadLength)Line.BeginArrowheadLength;
            }
            set
            {
                Line.BeginArrowheadLength = (MsoArrowheadLength)value;
            }
        }

        /// <summary>線の矢印の終点部の長さ</summary>
        public ExcelArrowheadLength EndArrowheadLength
        {
            get
            {
                return (ExcelArrowheadLength)Line.EndArrowheadLength;
            }
            set
            {
                Line.EndArrowheadLength = (MsoArrowheadLength)value;
            }
        }

        #endregion

        #region ConnectorFormat

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

        /// <summary>
        /// 指定したコネクタの始点を、指定した図形に接続します。
        /// </summary>
        /// <param name="ConnectedShape">コネクタの始点を接続する図形</param>
        /// <param name="ConnectionSite">図形の結合点</param>
        public void BeginConnect(ShapeAccessor connectedShape, int connectionSite)
        {
            ConnectorFormat.BeginConnect(GetShape(connectedShape), connectionSite);
        }

        /// <summary>
        /// 指定したコネクタの終点を、指定した図形に接続します。
        /// </summary>
        /// <param name="ConnectedShape">コネクタの終点を接続する図形</param>
        /// <param name="ConnectionSite">図形の結合点</param>
        public void EndConnect(ShapeAccessor connectedShape, int connectionSite)
        {
            ConnectorFormat.EndConnect(GetShape(connectedShape), connectionSite);
        }

        #endregion
    }

    #region 列挙型

    /// <summary>コネクタの種類</summary>
    public enum ExcelConnectorType
    {
        /// <summary>曲線コネクタ</summary>
        msoConnectorCurve = MsoConnectorType.msoConnectorCurve,
        /// <summary>カギ線コネクタ</summary>
        msoConnectorElbow = MsoConnectorType.msoConnectorElbow,
        /// <summary>直線コネクタ</summary>
        msoConnectorStraight = MsoConnectorType.msoConnectorStraight,
        /// <summary>値の取得のみ可能です。他の状態の組み合わせを示します。</summary>
        msoConnectorTypeMixed = MsoConnectorType.msoConnectorTypeMixed
    }

    /// <summary>線の先の矢印の形</summary>
    public enum ExcelArrowheadStyle
    {
        /// <summary>ひし形矢印</summary>
        ArrowheadDiamond = MsoArrowheadStyle.msoArrowheadDiamond,
        /// <summary>矢印なし</summary>
        ArrowheadNone = MsoArrowheadStyle.msoArrowheadNone,
        /// <summary>開いた矢印</summary>
        ArrowheadOpen = MsoArrowheadStyle.msoArrowheadOpen,
        /// <summary>円形矢印</summary>
        ArrowheadOval = MsoArrowheadStyle.msoArrowheadOval,
        /// <summary>鋭い矢印</summary>
        ArrowheadStealth = MsoArrowheadStyle.msoArrowheadStealth,
        /// <summary>値の取得のみ可能です。他の状態の組み合わせを示します。</summary>
        ArrowheadStyleMixed = MsoArrowheadStyle.msoArrowheadStyleMixed,
        /// <summary>三角矢印</summary>
        ArrowheadTriangle = MsoArrowheadStyle.msoArrowheadTriangle
    }

    /// <summary>線の矢印の終点部の幅</summary>
    public enum ExcelArrowheadWidth
    {
        /// <summary>小</summary>
        ArrowheadNarrow = MsoArrowheadWidth.msoArrowheadNarrow,
        /// <summary>大</summary>
        ArrowheadWide = MsoArrowheadWidth.msoArrowheadWide,
        /// <summary>中</summary>
        ArrowheadWidthMedium = MsoArrowheadWidth.msoArrowheadWidthMedium,
        /// <summary>値の取得のみ可能です。他の状態の組み合わせを示します。</summary>
        ArrowheadWidthMixed = MsoArrowheadWidth.msoArrowheadWidthMixed
    }

    /// <summary>線の矢印の終点部の長さ</summary>
    public enum ExcelArrowheadLength
    {
        /// <summary>中</summary>
        ArrowheadLengthMedium = MsoArrowheadLength.msoArrowheadLengthMedium,
        /// <summary>値の取得のみ可能です。指定した図形範囲に他の状態の組み合わせを示します。</summary>
        ArrowheadLengthMixed = MsoArrowheadLength.msoArrowheadLengthMixed,
        /// <summary>長</summary>
        ArrowheadLong = MsoArrowheadLength.msoArrowheadLong,
        /// <summary>短</summary>
        ArrowheadShort = MsoArrowheadLength.msoArrowheadShort
    }

    #endregion
}

BorderAccessor

using OfficeExcel = Microsoft.Office.Interop.Excel;

namespace Core.File.Excel
{
    /// <summary>
    /// ExcelBorderアクセサー
    /// </summary>
    public class BorderAccessor
    {
        #region 構築・破棄

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="border"></param>
        private BorderAccessor(OfficeExcel.Border border)
        {
            Border = border;
        }

        /// <summary>
        /// 構成子
        /// </summary>
        /// <param name="border"></param>
        /// <returns></returns>
        internal static BorderAccessor GetAccessor(OfficeExcel.Border border)
        {
            return new BorderAccessor(border);
        }

        #endregion

        #region プロパティ

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

        /// <summary>罫線の線の種類</summary>
        public ExcelLineStyle LineStyle
        {
            get
            {
                return Border.LineStyle;
            }
            set
            {
                Border.LineStyle = value;
            }
        }

        /// <summary>罫線の太さ</summary>
        public ExcelBorderWeight Weight
        {
            get
            {
                return Border.Weight;
            }
            set
            {
                Border.Weight = value;
            }
        }

        /// <summary>罫線の色</summary>
        public dynamic Color
        {
            get
            {
                return Border.Color;
            }
            set
            {
                Border.Color = value;
            }
        }

        /// <summary>罫線の色</summary>
        public int ColorIndex
        {
            get
            {
                return Border.ColorIndex;
            }
            set
            {
                Border.ColorIndex = value;
            }
        }

        #endregion
    }

    #region 列挙型

    /// <summary>罫線</summary>
    public enum ExcelBordersIndex
    {
        /// <summary>上端横線</summary>
        EdgeTop = OfficeExcel.XlBordersIndex.xlEdgeTop,
        /// <summary>下端横線</summary>
        EdgeBottom = OfficeExcel.XlBordersIndex.xlEdgeBottom,
        /// <summary>左端縦線</summary>
        EdgeLeft = OfficeExcel.XlBordersIndex.xlEdgeLeft,
        /// <summary>右端縦線</summary>
        EdgeRight = OfficeExcel.XlBordersIndex.xlEdgeRight,
        /// <summary>上下端以外横線</summary>
        InsideHorizontal = OfficeExcel.XlBordersIndex.xlInsideHorizontal,
        /// <summary>左右端以外縦線</summary>
        InsideVertical = OfficeExcel.XlBordersIndex.xlInsideVertical,
        /// <summary>右下がり斜線</summary>
        DiagonalDown = OfficeExcel.XlBordersIndex.xlDiagonalDown,
        /// <summary>右上がり斜線</summary>
        DiagonalUp = OfficeExcel.XlBordersIndex.xlDiagonalUp
    }

    /// <summary>罫線の線の種類</summary>
    public enum ExcelLineStyle
    {
        /// <summary>実線</summary>
        Continuous = OfficeExcel.XlLineStyle.xlContinuous,
        /// <summary>破線</summary>
        Dash = OfficeExcel.XlLineStyle.xlDash,
        /// <summary>一点鎖線</summary>
        DashDot = OfficeExcel.XlLineStyle.xlDashDot,
        /// <summary>二点鎖線</summary>
        DashDotDot = OfficeExcel.XlLineStyle.xlDashDotDot,
        /// <summary>点線</summary>
        Dot = OfficeExcel.XlLineStyle.xlDot,
        /// <summary>二重線</summary>
        Double = OfficeExcel.XlLineStyle.xlDouble,
        /// <summary>線なし</summary>
        LineStyleNone = OfficeExcel.XlLineStyle.xlLineStyleNone,
        /// <summary>斜線</summary>
        SlantDashDot = OfficeExcel.XlLineStyle.xlSlantDashDot
    }

    /// <summary>セル範囲を囲む罫線の太さ</summary>
    public enum ExcelBorderWeight
    {
        /// <summary>極細(最も細い罫線)</summary>
        xlHairline = OfficeExcel.XlBorderWeight.xlHairline,
        /// <summary>中</summary>
        xlMedium = OfficeExcel.XlBorderWeight.xlMedium,
        /// <summary>太い (最も太い罫線)</summary>
        xlThick = OfficeExcel.XlBorderWeight.xlThick,
        /// <summary>細い</summary>
        xlThin = OfficeExcel.XlBorderWeight.xlThin
    }

    #endregion
}

CellAccessor

using OfficeExcel = Microsoft.Office.Interop.Excel;

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

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

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

        #endregion

        #region プロパティ

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

        #endregion

        #region Cell

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

        /// <summary>値</summary>
        public string Value
        {
            get
            {
                return Cell.Value2;
            }
            set
            {
                Cell.Value2 = value;
            }
        }

        /// <summary>表示形式</summary>
        public string NumberFormatLocal
        {
            get
            {
                return Cell.NumberFormatLocal;
            }
            set
            {
                Cell.NumberFormatLocal = value;
            }
        }

        /// <summary>列幅</summary>
        public dynamic ColumnWidth
        {
            get
            {
                return Cell.ColumnWidth;
            }
            set
            {
                Cell.ColumnWidth = value;
            }
        }

        /// <summary>行高さ</summary>
        public dynamic RowHeight
        {
            get
            {
                return Cell.RowHeight;
            }
            set
            {
                Cell.RowHeight = value;
            }
        }

        /// <summary>Merge</summary>
        public void Merge()
        {
            Cell.Merge();
        }

        /// <summary>Merge</summary>
        public void Merge(CellAccessor cell)
        {
            OfficeExcel.Range range = Worksheet.get_Range(Cell, cell.Cell);

            // 解放COMオブジェクト追加
            ReleaseComObjects.Add(range);

            range.Merge();
        }

        /// <summary>
        /// 選択
        /// </summary>
        public void Select()
        {
            Cell.Select();
        }

        /// <summary>
        /// ウィンドウ枠を固定
        /// <セルの左上を基準にして、ウィンドウ枠を固定します。>
        /// </summary>
        public void FreezePanes()
        {
            Application.FreezePanes = false;
            Cell.Select();
            Application.FreezePanes = true;
        }

        #endregion

        #region 配置

        /// <summary>文字の配置-横位置</summary>
        public ExcelHAlign HorizontalAlignment
        {
            get
            {
                return Cell.HorizontalAlignment;
            }
            set
            {
                Cell.HorizontalAlignment = value;
            }
        }

        /// <summary>文字の配置-縦配置</summary>
        public ExcelVAlign VerticalAlignment
        {
            get
            {
                return Cell.VerticalAlignment;
            }
            set
            {
                Cell.VerticalAlignment = value;
            }
        }

        /// <summary>文字の配置-インデント</summary>
        public int IndentLevel
        {
            get
            {
                return Cell.IndentLevel;
            }
            set
            {
                Cell.IndentLevel = value;
            }
        }

        /// <summary>文字の配置-方向</summary>
        public int Orientation
        {
            get
            {
                return Cell.Orientation;
            }
            set
            {
                Cell.Orientation = value;
            }
        }

        /// <summary>文字の配置-文字の制御-折り返して全体を表示する</summary>
        public bool WrapText
        {
            get
            {
                return Cell.WrapText;
            }
            set
            {
                Cell.WrapText = value;
            }
        }

        /// <summary>文字の配置-文字の制御-縮小して全体を表示する</summary>
        public bool ShrinkToFit
        {
            get
            {
                return Cell.ShrinkToFit;
            }
            set
            {
                Cell.ShrinkToFit = value;
            }
        }

        /// <summary>文字の配置-文字の制御-セルを結合する</summary>
        public bool MergeCells
        {
            get
            {
                return Cell.MergeCells;
            }
            set
            {
                Cell.MergeCells = value;
            }
        }

        #endregion

        #region Font

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

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

        #endregion

        #region Interior

        /// <summary>Interior</summary>
        private OfficeExcel.Interior interior;
        /// <summary>Interior</summary>
        private OfficeExcel.Interior Interior
        {
            get
            {
                if (this.interior == null)
                {
                    this.interior = Cell.Interior;
                    ReleaseComObjects.Add(this.interior);
                }
                return this.interior;
            }
        }

        /// <summary>背景色</summary>
        public dynamic Color
        {
            get
            {
                return Interior.Color;
            }
            set
            {
                Interior.Color = value;
            }
        }

        /// <summary>背景色</summary>
        public int ColorIndex
        {
            get
            {
                return Interior.ColorIndex;
            }
            set
            {
                Interior.ColorIndex = value;
            }
        }

        #endregion

        #region Borders

        /// <summary>Borders</summary>
        private OfficeExcel.Borders borders;
        /// <summary>Borders</summary>
        private OfficeExcel.Borders Borders
        {
            get
            {
                if (this.borders == null)
                {
                    this.borders = Cell.Borders;
                    ReleaseComObjects.Add(this.borders);
                }
                return this.borders;
            }
        }

        /// <summary>上端横線</summary>
        private BorderAccessor borderEdgeTop;
        /// <summary>上端横線</summary>
        public BorderAccessor BorderEdgeTop
        {
            get
            {
                if (this.borderEdgeTop == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlEdgeTop);
                    ReleaseComObjects.Add(border);

                    this.borderEdgeTop = BorderAccessor.GetAccessor(border);
                }
                return this.borderEdgeTop;
            }
        }

        /// <summary>下端横線</summary>
        private BorderAccessor borderEdgeBottom;
        /// <summary>下端横線</summary>
        public BorderAccessor BorderEdgeBottom
        {
            get
            {
                if (this.borderEdgeBottom == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlEdgeBottom);
                    ReleaseComObjects.Add(border);

                    this.borderEdgeBottom = BorderAccessor.GetAccessor(border);
                }
                return this.borderEdgeBottom;
            }
        }

        /// <summary>左端縦線</summary>
        private BorderAccessor borderEdgeLeft;
        /// <summary>左端縦線</summary>
        public BorderAccessor BorderEdgeLeft
        {
            get
            {
                if (this.borderEdgeLeft == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlEdgeLeft);
                    ReleaseComObjects.Add(border);

                    this.borderEdgeLeft = BorderAccessor.GetAccessor(border);
                }
                return this.borderEdgeLeft;
            }
        }

        /// <summary>右端縦線</summary>
        private BorderAccessor borderEdgeRight;
        /// <summary>右端縦線</summary>
        public BorderAccessor BorderEdgeRight
        {
            get
            {
                if (this.borderEdgeRight == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlEdgeRight);
                    ReleaseComObjects.Add(border);

                    this.borderEdgeRight = BorderAccessor.GetAccessor(border);
                }
                return this.borderEdgeRight;
            }
        }

        /// <summary>上下端以外横線</summary>
        private BorderAccessor borderInsideHorizontal;
        /// <summary>上下端以外横線</summary>
        public BorderAccessor BorderInsideHorizontal
        {
            get
            {
                if (this.borderInsideHorizontal == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlInsideHorizontal);
                    ReleaseComObjects.Add(border);

                    this.borderInsideHorizontal = BorderAccessor.GetAccessor(border);
                }
                return this.borderInsideHorizontal;
            }
        }

        /// <summary>左右端以外縦線</summary>
        private BorderAccessor borderInsideVertical;
        /// <summary>左右端以外縦線</summary>
        public BorderAccessor BorderInsideVertical
        {
            get
            {
                if (this.borderInsideVertical == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlInsideVertical);
                    ReleaseComObjects.Add(border);

                    this.borderInsideVertical = BorderAccessor.GetAccessor(border);
                }
                return this.borderInsideVertical;
            }
        }

        /// <summary>右下がり斜線</summary>
        private BorderAccessor borderDiagonalDown;
        /// <summary>右下がり斜線</summary>
        public BorderAccessor BorderDiagonalDown
        {
            get
            {
                if (this.borderDiagonalDown == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlDiagonalDown);
                    ReleaseComObjects.Add(border);

                    this.borderDiagonalDown = BorderAccessor.GetAccessor(border);
                }
                return this.borderDiagonalDown;
            }
        }

        /// <summary>右上がり斜線</summary>
        private BorderAccessor borderDiagonalUp;
        /// <summary>右上がり斜線</summary>
        public BorderAccessor BorderDiagonalUp
        {
            get
            {
                if (this.borderDiagonalUp == null)
                {
                    OfficeExcel.Border border = Borders.get_Item(OfficeExcel.XlBordersIndex.xlDiagonalUp);
                    ReleaseComObjects.Add(border);

                    this.borderDiagonalUp = BorderAccessor.GetAccessor(border);
                }
                return this.borderDiagonalUp;
            }
        }

        #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(Cell, address);
        }

        #endregion

        #region AutoFilter

        /// <summary>
        /// オートフィルター
        /// </summary>
        /// <param name="field">フィルタの対象となるフィールド番号を整数で指定します。フィールド番号は、リストの左側から始まります。つまり、最も左側にあるフィールドはフィールド番号 1 になります。</param>
        /// <param name="criteria1">抽出条件となる文字列 ("101" など) を指定します。"=" と指定すると、空白セルが抽出され、"<>"※半角文字 と指定すると空白以外のフィールドが抽出されます。この引数を省略すると、抽出条件は All になります。引数 Operator に xlTop10Items が指定されている場合は、引数 Criteria1 に項目数を指定します (たとえば "10")。</param>
        /// <param name="autoFilterOperator"></param>
        /// <param name="criteria2">2 番目の抽出条件となる文字列を指定します。引数 Criteria1 および引数 Operator と組み合わせて使用して、複合抽出条件を指定します。</param>
        /// <param name="visibleDropDown">True を指定すると、フィルタのフィールドでオートフィルタのドロップダウン矢印を表示します。False を指定すると、フィルタのフィールドでオートフィルタのドロップダウン矢印を非表示にします。既定値は True です。</param>
        public void AutoFilter(int field = 1, string criteria1 = "", ExcelAutoFilterOperator autoFilterOperator = ExcelAutoFilterOperator.And, string criteria2 = "", bool visibleDropDown = true)
        {
            object tmpCriteria1 = System.Type.Missing;
            if (string.IsNullOrEmpty(criteria1) == false)
            {
                tmpCriteria1 = criteria1;
            }
            object tmpCriteria2 = System.Type.Missing;
            if (string.IsNullOrEmpty(criteria2) == false)
            {
                tmpCriteria2 = criteria2;
            }
            Cell.AutoFilter(field, tmpCriteria1, (OfficeExcel.XlAutoFilterOperator)autoFilterOperator, tmpCriteria2, visibleDropDown);
        }

        #endregion
    }

    #region 列挙型

    /// <summary>オブジェクトの水平方向の配置</summary>
    public enum ExcelHAlign
    {
        /// <summary>中央</summary>
        HAlignCenter = OfficeExcel.XlHAlign.xlHAlignCenter,
        /// <summary>選択範囲内で中央</summary>
        HAlignCenterAcrossSelection = OfficeExcel.XlHAlign.xlHAlignCenterAcrossSelection,
        /// <summary>均等</summary>
        HAlignDistributed = OfficeExcel.XlHAlign.xlHAlignDistributed,
        /// <summary>繰り返し</summary>
        HAlignFill = OfficeExcel.XlHAlign.xlHAlignFill,
        /// <summary>データ型に応じて配置</summary>
        HAlignGeneral = OfficeExcel.XlHAlign.xlHAlignGeneral,
        /// <summary>両端揃え</summary>
        HAlignJustify = OfficeExcel.XlHAlign.xlHAlignJustify,
        /// <summary>左</summary>
        HAlignLeft = OfficeExcel.XlHAlign.xlHAlignLeft,
        /// <summary>右</summary>
        HAlignRight = OfficeExcel.XlHAlign.xlHAlignRight
    }

    /// <summary>オブジェクトの垂直方向の配置</summary>
    public enum ExcelVAlign
    {
        /// <summary>中央</summary>
        VAlignBottom = OfficeExcel.XlVAlign.xlVAlignBottom,
        /// <summary>選択範囲内で中央</summary>
        VAlignCenter = OfficeExcel.XlVAlign.xlVAlignCenter,
        /// <summary>均等</summary>
        VAlignDistributed = OfficeExcel.XlVAlign.xlVAlignDistributed,
        /// <summary>繰り返し</summary>
        VAlignJustify = OfficeExcel.XlVAlign.xlVAlignJustify,
        /// <summary>右</summary>
        VAlignTop = OfficeExcel.XlVAlign.xlVAlignTop
    }

    /// <summary>フィルタによって適用される 2 つの条件を関連付けるために使用する演算子</summary>
    public enum ExcelAutoFilterOperator
    {
        /// <summary>Criteria1 と Criteria2 の論理 AND</summary>
        And = OfficeExcel.XlAutoFilterOperator.xlAnd,
        /// <summary>表示されている最小値の項目 (Criteria1 で指定した項目数)</summary>
        Bottom10Items = OfficeExcel.XlAutoFilterOperator.xlBottom10Items,
        /// <summary>表示されている最小値の項目 (Criteria1 で指定したパーセンテージ)</summary>
        Bottom10Percent = OfficeExcel.XlAutoFilterOperator.xlBottom10Percent,
        /// <summary>Criteria1 と Criteria2 の論理 OR</summary>
        Or = OfficeExcel.XlAutoFilterOperator.xlOr,
        /// <summary>表示されている最大値の項目 (Criteria1 で指定した項目数)</summary>
        Top10Items = OfficeExcel.XlAutoFilterOperator.xlTop10Items,
        /// <summary>表示されている最大値の項目 (Criteria1 で指定したパーセンテージ)</summary>
        Top10Percent = OfficeExcel.XlAutoFilterOperator.xlTop10Percent,
    }

    #endregion
}