2017-10-24 22 views
0

デルファイシアトル、PPT 2013.DelphiとMicrosoft PowerPointの統合...設定太字属性

私はプログラムでPPTデッキを構築しています。私は使用しているPPTテンプレートを持っています。実行可能ファイルに埋め込まれたPPTファイルを抽出し、PPTを開始し、ファイルを開き、スライドに移動してコンテンツを取り込みます。現在私が戦っている問題はフォント属性と関係しています。私はテキストフレームを持っています。私はCR/LFで区切られたそのテキストフレームに様々な行を書きたいと思います。 PPTはこれらが私が望むものである別々の弾丸であることを示しています。各行の最初の単語はカテゴリなので、私はそれを太字で欲しい。

はコードでは、私がtextframeに最初の行を追加しproduct3、product4 - 製品1、product2

  • カテゴリ2 - それは

    • カテゴリ1 ...このように見える終わる必要があります次に、キャラクター1〜9から、それを太字にします。テキストフレームに2行目を追加し、20文字から次の9文字まで太字に設定します。これは4行の操作です。 1行目を追加し、太字に設定し、2行目を追加して、太字に設定します。 1行目と2行目は動作しますが、2行目のテキストを追加すると、すべてが太字になります。私のコードの順序を変更すると、行1を追加し、行2を追加し、最初の部分文字列を太字に設定し、2番目の部分文字列を太字に設定すると動作しますが、

      私は行1を追加しようとしましたが、文字1〜9を太字にし、文字セット10を太字にしないで、2行追加しましたが、違いはありません。

      ここにコードスニペットがあります。

      uses ... Office2000, msppt2000; 
      
          var 
          lFinalDeck: PowerPointPresentation; 
          lApplication: PowerPointApplication; 
          sl: _Slide; 
          sh1 : Shape; 
          FoundIt : Boolean; 
          i : Integer; 
          CRLF : String; 
          PPTFileName : String; 
      begin 
      
      lApplication := CoPowerPointApplication.Create; 
      ... 
      // Open File 
      lFinalDeck := lApplication.Presentations.Open(PPTFileName, msoFalse, msoFalse, msoFalse); 
      // The second parameter specifies whether the presentation should be opened in read-only mode. 
      // If the third parameter is True, an untitled copy of the file is made. 
      // The last parameter specifies whether the opened presentation should be visible. 
      
      // Get a handle to my slide and go to it. 
      sl := lFinalDeck.Slides.Item(2); 
      sl.Select; 
      
      FoundIt := False; 
      CRLF := #13#10; 
      
      // Now look for the textframe that has the TEXT 'TEXTBOX1' 
      for i := 1 to sl.Shapes.Count do 
          begin 
          sh1 := sl.Shapes.Item(i); 
          if sh1.HasTextFrame = msoTrue then 
           if sh1.TextFrame.TextRange.Text = 'TEXTBOX1' then 
           begin 
           FoundIt := True; 
           sh1.TextFrame.TextRange.Text := ''; 
           Break; 
           end; 
          end; 
      
          // Put data in the textframe, setting first 5 characters of each line bold 
          sh1.TextFrame.TextRange.Text := '1234567890' + CRLF; 
          sh1.TextFrame.TextRange.Characters(1,5).Font.Bold := msoTrue; 
      
      
          sh1.TextFrame.TextRange.Text := sh1.TextFrame.TextRange.Text + 'ABCDEFGHIJKLMNOP' + CRLF; 
          sh1.TextFrame.TextRange.Characters(13,5).Font.Bold := msoTrue; 
      end; 
      

      これを修正する方法はありますか?

  • +0

    それはどのように一般的な振る舞いでPowerPoint、およびOfficeプログラム、 私は信じている。新しい段落を追加すると、前の段落のフォントが仮定されます。これは、手動で行っているときでも、時には痛みです。私が提案することができる唯一の方法は、新しいパラを挿入し、フォントを明示的に太字に設定するか、選択を追加してボールドをオフにすることを計画する場所にテキスト選択を設定することです。あなたがそれを何度もやっているとき。 – Dsm

    +0

    「それでは大胆な言葉がほしい」 - あなたはMicrosoft Officeで仕事をしているので、ほぼすべての質問に対して普遍的な答えがある。 "Visual Basicマクロの記録"を開始します。次に、単語を選択して太字にして、それを選択解除します。その後、 "マクロの記録を停止する"。次に、マクロのマネージャを開き、新しいマクロを見つけてエディタに入力します。 Visual Basicコードが表示されます。それをBasicからPascalに変換します。 PS。 Office 2013でこれらのマクロ関連のコマンドがどこに隠れているのかわかりません。Office試用用のクラシックメニューを試してみてください –

    +0

    レコードマクロ機能は、ほとんどのOffice製品にありますが、Powerpointではありません。 Powerpoint 2007はそれを持っていた最後のバージョンでした... – user1009073

    答えて

    0

    これはVBAでのアプローチの1つで、Delphiなどに変換するには十分なものです。

    シェイプのTextFrame.TextRangeはシェイプ内のテキストの文字列全体を表します。 .Paragraphsコレクションを繰り返して、各段落(基本的にCRLFで終了するすべての文字列)にアクセスできます。 各段落には単語コレクションがあり、最初の単語を参照することで、その単語だけを太字にすることができます。 あなたが大胆な特定の文字数を作成する代わりに、必要がある場合は、

    Set oRng = .Paragraphs(x).Characters(1, 12) ' 12 chars 
    

    の代わりに、下記

    Set oRng = .Paragraphs(x).Words(1) 
    

    使用:

    Sub BoldFirstWord(oSh As Shape) 
    ' Bold the first word of each paragraph in the shape 
    
        Dim x As Long 
        Dim oRng as TextRange 
    
        With oSh.TextFrame.TextRange 
    
         For x = 1 To .Paragraphs.Count 
    
          Set oRng = .Paragraphs(x).Words(1) 
          oRng.Font.Bold = True 
    
         Next 
    
        End With 
    
    End Sub 
    
    ' To test the above, select the text shape 
    ' you want to work with and run this: 
    Sub TestBFW() 
        Dim oSh As Shape 
        Set oSh = ActiveWindow.Selection.ShapeRange(1) 
        Call BoldFirstWord(oSh) 
    End Sub 
    
    関連する問題