2016-05-18 16 views
0

スマートアートをテキストビューに変換する必要があります。これは、最初の画像の下の「テキストに変換」リボンの作業ハイライトと同じです。今まで私はスマートアートからテキストを抽出し、それを図形に書くことができます。しかし私は問題の下で見つけた。スマートテキストから適切なテキストインデントを使ってテキストを抽出する方法は?

  1. それがスライドに空白の形状を追加し、スマート技術の形状を削除した後、テキスト
  2. のインデントを行うことができません。以下
    は私が(第二の画像に示されている)アウトプットを持っても、私は必要なものを示し、上記のコードから

    private void ChangeSmartartToText(ref PresentationEXT textDeck, string deckType) 
    { 
        PPT.Slide slide = textDeck.destinationPresentation.Slides[textDeck.currentSlideNumber+1]; 
        PPT.Shape tempSmartShape = null; 
    
        foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes) 
        { 
         if (shape.HasSmartArt == MsoTriState.msoTrue) 
         { 
          tempSmartShape = shape; 
          break; 
         } 
        } 
        PPT.Shape newTextShape = null; 
        if (tempSmartShape != null) 
        { 
         var smartartTop = tempSmartShape.Top; 
         var smartartLeft = tempSmartShape.Left; 
         var smartartHeight = tempSmartShape.Height; 
         var smartartWidth = tempSmartShape.Width; 
    
         newTextShape = slide.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, smartartLeft, smartartTop, smartartWidth, smartartHeight); 
    
         var val1 = tempSmartShape.SmartArt; 
         string name = val1.Layout.Name; 
         string category = val1.Layout.Category; 
         StringBuilder smartartText = new StringBuilder(); 
         foreach (SmartArtNode node in val1.AllNodes) 
         { 
          smartartText.AppendLine(node.TextFrame2.TextRange.Text); 
         } 
         Microsoft.Office.Interop.PowerPoint.TextRange objText; 
         objText = newTextShape.TextFrame.TextRange; 
         newTextShape.TextFrame.Orientation = MsoTextOrientation.msoTextOrientationHorizontal; 
         objText.Text = smartartText.ToString(); 
    
         tempSmartShape.Delete(); 
         tempSmartShape = null; 
        } 
    } 
    


    を持ってどのようなコードです。 enter image description here enter image description here

+0

この場合、スマートシェイプの形状は、スライド上に直接配置されるのではなく、コンテンツプレースホルダの内側にあります。コンテンツプレースホルダからコンテンツを削除すると、空のプレースホルダに戻ります。あなたもそれを削除したいです。図形の種類をテストすることでこれらを確認できます。それがプレースホルダの場合は、プレースホルダの型をテストします。コンテンツプレースホルダの場合、含まれているタイプを見ることができます。 –

+0

こんにちは@SteveRindsbergさん、ありがとうございました。良い感じ。スライドに別のプレースホルダが含まれている可能性があります。これを確認するためのデモコードがありません。私も試しましたが、方法を見つけることができませんでした。 – madan

答えて

1

ここであなたが始めることができVBAのビットです。

私は定数(VBAspeakでロングス、.NETでおそらく整数)の実際の値とのコメントを追加しましたアプリケーション定義された定数(msoThisまたはppThat)のいずれかを含ん次に、各IF /後
Sub Thing() 
    Dim oSl As Slide 
    Dim oSh As Shape 

    For Each oSl In ActivePresentation.Slides 
     For Each oSh In oSl.Shapes 
      If oSh.Type = msoSmartArt Then ' 24 
       MsgBox "SMARTART!" 
      End If 
      If oSh.Type = msoPlaceholder Then ' 14 
       If oSh.PlaceholderFormat.Type = ppPlaceholderObject Then ' 7 
        If oSh.PlaceholderFormat.ContainedType = msoSmartArt Then 
         MsgBox "SMARTART!" 
        End If 
       End If 
      End If 
     Next 
    Next 
End Sub 
+0

こんにちはsteveあなたのスクリプトは、形状がsmartartを含むかどうかを識別するためのものです。プレースホルダを削除する方法私のコードでは、単にスマートアートを変数にして、最後にはシェイプを削除するだけです。そこから私はplaceHolderを削除できますか? – madan

+0

コード例でシェイプ(oSh.Delete)を削除すると、SmartArtと元のプレースホルダが削除されますが、PPTでは(別の名前の)新しいプレースホルダが追加されます。スライドにこのようなプレースホルダが1つしかないことがわかっている場合は、同じコードのバリアントを使用してppPlaceholderObject型を探してシェイプを削除できます。または、スライド上のすべての図形の名前を最初に配列に追加し、SmartArtを削除して、配列に含まれていない新しい図形を削除します。これは、PPTが追加した新しいプレースホルダーの形になります。またはoSl.Shapes(oSl.Shapes.Count).Delete(トップシャッフルを削除) –

+0

いいアイデアと完璧に動作します。それに応じてあなたの答えを変えることができますか? – madan

0

ここですオブジェクトモデルを介してインデントレベルを設定する方法を示す別のVBAスニペット。 1から9まで動作します(しかし、古いバージョンのPPTでは、5つのレベルしかサポートされていません)。

Dim oSh As Shape 
Dim x As Long 
Dim lIndent As Long 

Set oSh = ActiveWindow.Selection.ShapeRange(1) 

With oSh.TextFrame2.TextRange 
    For x = 1 To .Paragraphs.Count 
     .Paragraphs(x).ParagraphFormat.IndentLevel = x 
    Next 
End With 
関連する問題