2012-12-10 3 views
0

나는 C#과 PowerPoint에 어려움을 겪어 왔습니다. 이전에 C#을 사용하여 ppt에서 링크를 업데이트하는 방법을 게시했습니다. 링크가 수동으로 설정되어 있으면 응답을 얻지 못했고 파일에서 자동으로 링크를 설정하여 문제를 회피 한 다음 C#을 열 때 파일을 업데이트하고 파일을 저장 한 다음 파일을 분리하고 다른 파일 이름으로 저장하지만 더 쉽게 증명할 수는 없습니다.중단 링크 PowerPoint 2010

내가 알아야 할 것은 링크를 끊는 방법입니다. 일부 VBA를 알고 코드를 작성하여 코드를 작성했지만 RunMacro 메서드로 C# 매크로를 호출하면 사용중인 메서드와 작동하지 않는 것 같습니다 (? - C#에 익숙하지 않기 때문에 이것이 왜 있는지 완전히 이해하지 못한다. 그러나 구글이 "매크로 파워 포인트 C#를 실행한다면"나는 당신이 내가 그것에 대해 시도해 보았던 방법을 발견 할 것이다.) 제발 도와 줘, 나는 완전히 손해보고있다.

내 스크립트 내가 파일을 열기 전에 수동으로 linkformat를 설정하는 노력이

Using PowerPoint = Microsoft.Office.Interop.PowerPoint; 

public void Main() 
    { 

     PowerPoint.Application ppt = new PowerPoint.Application(); 
     PowerPoint.Presentation PRS = ppt.Presentations.Open(@"Filename.pptm", 
     Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue); 


     PRS.UpdateLinks(); 
     PRS.Save 
     //here is where I need to break the links 
     PRS.SaveAs(@"filename with links broken.pptm", 
      Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsOpenXMLPresentationMacroEnabled, MsoTriState.msoTrue); 
     PRS.Close(); 
     ppt.Quit(); 
} 

같이 보입니다, 그러나 그것은 이미 생성 된 모든 모양, 나중에 프로그램 내에서 생성 만 새에 영향을 미치지 않습니다 .

답변

-1

파일을 열기 전에 변경 사항은 열려 있지 않은 파일에는 영향을주지 않습니다. 각 슬라이드의 모양 컬렉션을 각각의 형태에 대해 반복 :

If .Type = msoLinkedOLEObject Then 
    .LinkFormat.BreakLink 
End If 

msoLinkedOLEObject를 = 10

1

또한 깨는 링크를 포함 파워 포인트에서 비슷한 프로젝트를 수행했다. 내 프로그램에서는 Excel 파일을 읽고이 데이터를 가져와 Powerpoint 프레젠테이션에 넣습니다. 내 Powerpoint 템플릿 파일에는 Excel 파일에 대한 모든 링크가 배치되어 있으며 원하는 방식으로 서식이 지정되어 있습니다. 프로그램이 실행되기 시작하여 Excel 파일이 채워집니다. Excel에 대한 쓰기가 끝나면 내 프레젠테이션에 Powerpoint 및 UpdateLinks()를 엽니 다. 링크가 업데이트되면 Powerpoint의 Shapes에서 for 루프를 사용하여 링크를 끊습니다. 그 후에 문서를 저장하고 닫습니다. 아래는 내 ppt 파일 템플릿을 기반으로 Powerpoint 파일을 만드는 데 사용하는 기능입니다. (예를 들어 여러 ppt 파일을 반복 할 때마다 각 ppt 파일에는 하나의 슬라이드 만 포함되어 있기 때문에 나중에 모두 하나의 슬라이드 쇼에 결합됩니다. 방법).

public void CreatePowerpoint() 
    { 
     string[] fileArray = Directory.GetFiles(@"C:\Users\Me\Desktop\test"); 
     Microsoft.Office.Interop.PowerPoint.Application pptApp = new Microsoft.Office.Interop.PowerPoint.Application(); 
     for (int i = 0; i < fileArray.Length; i++) 
     { 
      string file = fileArray[i]; 

      Microsoft.Office.Interop.PowerPoint.Presentation powerpoint = pptApp.Presentations.Open(file); 
      powerpoint.UpdateLinks(); 

      Microsoft.Office.Interop.PowerPoint.Slides slides = powerpoint.Slides; 
      Microsoft.Office.Interop.PowerPoint.Slide slide = slides[1]; 
      Microsoft.Office.Interop.PowerPoint.Shapes pptShapes = (Microsoft.Office.Interop.PowerPoint.Shapes)slide.Shapes; 

      foreach (Microsoft.Office.Interop.PowerPoint.Shape y in pptShapes) 
      { 
       Microsoft.Office.Interop.PowerPoint.Shape j = (Microsoft.Office.Interop.PowerPoint.Shape)y; 
       try 
       { 
        //If auto link update is disabled for links 
        //j.LinkFormat.j.Update(); 
        if (j.LinkFormat != null) 
        { 
         j.LinkFormat.BreakLink(); 
        } 
       } 
       catch (Exception) 
       { 

       } 
      } 

      powerpoint.SaveAs(@"C:\Users\Me\Desktop\test" + i + ".pptx"); 
      powerpoint.Close(); 
      Thread.Sleep(3000); 
     } 
     pptApp.Quit(); 
    } 
관련 문제