2014-09-23 41 views
0

我需要從.net(VB.NET或C#)中的PowerPoint OpenXml格式(pptx)中提取所有文本 像大家都知道的那樣,pptx是一個帶有一些文件夾的壓縮文件。 我正在使用OpenXmlPowerTools。 我設法從幻燈片文件夾(幻燈片部分)中提取文本,但我注意到我的PowerPoint文檔樣本中有更多文本未被提取。此文本包含在smartart中,不包含在slidespart xml文件中。我知道文本位於文件「data1.xml」的pptx文件夾「/ diagrams」中,但我不知道如何調用此部分。 示例: 要調用文檔位於幻燈片中的文件,我引用OpenXmldocument.PresentationPart.SlideParts,然後我自己解析XML。 但我不知道文件夾「圖」中部分的名稱。 你能幫我嗎? 預先感謝您。的的SmartArt 從演示文稿OpenXml中提取SmartArt中的文本

-<dgm:pt type="doc" modelId="{8B66E7B5-44C3-4667-8338-7D4A025BD5D4}"> 
 

 
<dgm:prSet phldr="1" csCatId="accent2" csTypeId="urn:microsoft.com/office/officeart/2005/8/colors/accent2_3" qsCatId="simple" qsTypeId="urn:microsoft.com/office/officeart/2005/8/quickstyle/simple5" loCatId="process" loTypeId="urn:microsoft.com/office/officeart/2005/8/layout/hProcess11"/> 
 

 
<dgm:spPr/> 
 

 

 
-<dgm:t> 
 

 
<a:bodyPr/> 
 

 
<a:lstStyle/> 
 

 

 
-<a:p> 
 

 
<a:endParaRPr lang="pt-PT"/> 
 

 
</a:p> 
 

 
</dgm:t> 
 

 
</dgm:pt> 
 

 

 
-<dgm:pt modelId="{2E9EC466-8028-4506-882E-42A5A1CC8163}"> 
 

 
<dgm:prSet custT="1" phldrT="[Texto]"/> 
 

 
<dgm:spPr/> 
 

 

 
-<dgm:t> 
 

 
<a:bodyPr anchor="t"/> 
 

 
<a:lstStyle/> 
 

 

 
-<a:p> 
 

 

 
-<a:r> 
 

 

 
-<a:rPr lang="pt-PT" smtClean="0" dirty="0" sz="1200"> 
 

 
<a:latin typeface="+mn-lt"/> 
 

 
<a:cs typeface="Arial" charset="0" pitchFamily="34"/> 
 

 
</a:rPr> 
 

 
<a:t>Apresentação Conceptual - Plano</a:t> 
 

 
</a:r> 
 

 

 
-<a:endParaRPr lang="pt-PT" dirty="0" sz="1200"> 
 

 
<a:latin typeface="+mn-lt"/> 
 

 
<a:cs typeface="Arial" charset="0" pitchFamily="34"/> 
 

 
</a:endParaRPr> 
 

 
</a:p> 
 

 
</dgm:t> 
 

 
</dgm:pt>

回答

1

XML樣本我有同樣的問題,發現你的問題,我算出來是:

static void Main(string[] args) 
{ 
    using (var p = PresentationDocument.Open(@"SmartArt.pptx", true)) 
    { 
     foreach (var slide in p.PresentationPart.GetPartsOfType<SlidePart>().Where(sp => IsVisible(sp))) 
     { 
      foreach(var diagramPart in slide.DiagramDataParts) 
      { 
       foreach(var text in diagramPart.RootElement.Descendants<Run>().Select(d => d.Text.Text)) 
       { 
        Console.WriteLine(text); 
       } 
      } 
     } 
    } 

    Console.ReadLine(); 
} 

private static bool IsVisible(SlidePart s) 
{ 
    return (s.Slide != null) && 
     ((s.Slide.Show == null) || (s.Slide.Show.HasValue && 
     s.Slide.Show.Value)); 
} 
相關問題