2016-05-18 7 views
0

Ich muss Smart-Art in textuelle Ansicht konvertieren, genauso wie "Contribute To Text" Band Arbeit Highlight in unter 1. Bild. Bis jetzt bin ich in der Lage, Text von Smart-Art zu extrahieren und in eine Form zu schreiben. aber ich fand unten Probleme.Wie extrahiert man Text aus Smartart mit richtigem Texteinzug?

  1. nicht in der Lage Einzug von Texten Form
  2. Nach dem Löschen der Smart-Technik macht es eine leere Form zu der Folie hinzuzufügen.
    unten ist der Code, was ich

    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; 
        } 
    } 
    


    aus dem obigen Code habe ich den ausstieg setzen (in der 2. Bild gezeigt) und zeigen auch das, was ich brauche. enter image description here enter image description here

+0

In diesem Fall befindet sich die Smartart-Form in einem Inhaltsplatzhalter und nicht direkt auf der Folie. Wenn Sie den Inhalt eines Inhaltsplatzhalters löschen, wird er zu einem leeren Platzhalter. Sie werden es auch löschen wollen. Sie können dies überprüfen, indem Sie den Formtyp testen. Wenn es sich um einen Platzhalter handelt, testen Sie den Platzhaltertyp. Wenn es sich um einen Inhaltsplatzhalter handelt, können Sie den enthaltenen Typ anzeigen. –

+0

Hallo @SteveRindsberg danke für die Idee. Es sieht gut aus. aber es kann ein Problem geben, Folie kann einen anderen Platzhalter enthalten und es ist schwierig zu identifizieren, ob Sie einen Demo-Code dafür haben. Ich habe es auch versucht, aber ich konnte keinen Weg finden. – madan

Antwort

1

Hier ist ein bisschen VBA mit denen Sie beginnen können. Nach jedem If/Then, die eine der Anwendung definiert Konstanten (msoThis oder ppThat) enthält Ich habe einen Kommentar mit dem tatsächlichen Wert der Konstante (Longs in VBAspeak, wahrscheinlich Integers in .Net) hinzugefügt

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

Hi steve Ihr Skript ist zur Identifizierung, ob die Form Smartart enthalten oder nicht. Wie lösche ich den Platzhalter? In meinem Code nehme ich einfach den Smartart zu einer Variablen und am Ende lösche ich einfach die Form. von wo ich den Platzhalter löschen kann? – madan

+0

Wenn Sie die Form (oSh.Delete) im Codebeispiel löschen, löscht sie die SmartArt und den ursprünglichen Platzhalter, aber PPT fügt einen neuen Platzhalter (mit einem anderen Namen) hinzu. Wenn Sie wissen, dass auf einer Folie nur ein solcher Platzhalter vorhanden ist, können Sie eine Variante des gleichen Codes verwenden, um den ppPlaceholderObject-Typ zu ermitteln und die Form zu löschen. Oder fügen Sie zuerst die Namen aller Formen auf der Folie zu einem Array hinzu, löschen Sie die SmartArt und löschen Sie dann alle neuen Formen, die nicht im Array enthalten sind: das wäre die neue Platzhalterform, die PPT hinzugefügt hat. Oder möglicherweise oSl.Shapes (oSl.Shapes.Count). Löschen (löschen top shp) –

+0

ja schöne Idee und funktioniert perfekt. Kannst du deine Antwort entsprechend ändern? – madan

0

Hier ein weiteres VBA-Snippet, das zeigt, wie Einzugsebenen über das Objektmodell festgelegt werden; Es funktioniert von 1 bis 9 (aber in älteren Versionen von PPT werden nur 5 Stufen unterstützt).

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