C#でPowerPoint(其の伍)フォントの置換

今回は、PowerPointファイル内のフォントを違うフォントで置換します。

”MS Pゴシック”に変更してみます。

/// <summary>
/// ファイルのフォントを置換する。
/// </summary>
/// <param name="file"></param>
/// <param name="file2"></param>
public void replaceSlideFont( string file, string file2 )
{

    Microsoft.Office.Interop.PowerPoint.Application app = null;
    Microsoft.Office.Interop.PowerPoint.Presentation ppt = null;
    try {
        // PPTのインスタンス作成
        app = new Microsoft.Office.Interop.PowerPoint.Application();

        ppt = app.Presentations.Open(file,
            Microsoft.Office.Core.MsoTriState.msoTrue,
            Microsoft.Office.Core.MsoTriState.msoTrue,
            Microsoft.Office.Core.MsoTriState.msoFalse);

        // 全体での指定したフォントの置換
        try {
            // "MS ゴシック" →  "MS Pゴシック"に
            ppt.Fonts.Replace("MS ゴシック", "MS Pゴシック");
        }
        catch ( Exception ex ) {
            Debug.WriteLine(ex.Message);
        }

        // オブジェクトごとのフォントの置換
        if ( ppt.Slides.Count > 0 ) {
            for ( int i = 1; i <= ppt.Slides.Count; i++ ) {
                Debug.WriteLine("Slide:" + i.ToString() + "ページ");

                foreach ( Shape shape in ppt.Slides[i].Shapes ) {
                    replaceShapeFont(shape);
                }
            }
        }

        // ファイルに保存
        ppt.SaveAs(file2,
            PpSaveAsFileType.ppSaveAsDefault,
            Microsoft.Office.Core.MsoTriState.msoFalse);
    }
    finally {
        if ( ppt != null ) {
            ppt.Close();
        }

        if ( app != null ) {
            app.Quit();
        }
    }

    return ;

}

/// <summary>
/// オブジェクトのフォント置換
/// </summary>
/// <param name="shape"></param>
private void replaceShapeFont( Shape shape )
{

    if ( shape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue
        && shape.TextFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue ) {

        if ( shape.TextFrame.TextRange.Text != "" ) {
            // フォント置換。
            Microsoft.Office.Interop.PowerPoint.Font font;
            font = shape.TextFrame.TextRange.Font;

            font.Name = "MS Pゴシック";
            font.NameFarEast = "MS Pゴシック";
            font.NameOther = "+mn-ea";
            font.NameComplexScript = "+mn-cs";
        }
    }

    // 再帰
    if ( shape.Type == Microsoft.Office.Core.MsoShapeType.msoGroup ) {
        foreach ( Shape childShape in shape.GroupItems ) {
            replaceShapeFont(childShape);
        }
    }

    return;
}
The following two tabs change content below.

taira

Sofrware Engineer.

Comments are closed.