본문 바로가기
개발언어/C#

[C#] 폴더 내에 있는 모든 파워포인트 문서에서 문자열 찾기

by 창용이랑 2022. 9. 16.
728x90

특정 폴더 또는 특정 폴더를 포함한 서브 폴더에 있는 모든 파워포인트 파일에서 찾는 문자가 들어 있는 파일만 찾아주는 C# 프로그램 소스 입니다.

- ppt, pptx 모두 검색 가능

 

 

<프로그램 화면>

 

 

<C# 프로그램 소스>

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
 
string findStr = "검색어";  //찾고자 하는 검색어
 
string sDirPath = System.IO.Directory.GetCurrentDirectory();  //찾을 파일이 있는 폴더 지정
DirectoryInfo info = new DirectoryInfo(sDirPath);
 
if (info.Exists)
{
    //Current디렉토리에서 찾기
    GetFiles(info);
 
    //서브디렉토리까지 확장해서 검색할 경우
    GetDirectories(info.GetDirectories());
}
 
private void GetFiles(DirectoryInfo sDirPath)
{
    FileInfo[] MyFilesList = sDirPath.GetFiles();
 
    foreach (FileInfo file in MyFilesList)
    {
         string filename = file.FullName;
 
         try
         {
              //Open the presentation
              Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application();
              Microsoft.Office.Interop.PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;
              PowerPoint.Presentation pres = multi_presentations.Open(filename, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
 
              //Loop through slides
              foreach (PowerPoint.Slide sld in pres.Slides)
              {
                   bool bBreak = false;
 
                   //Loop through all shapes in slide
                   foreach (PowerPoint.Shape shp in sld.Shapes)
                   {
                       //Access text in the shape
                       string str = shp.TextFrame.TextRange.Text;
                       //Find text to replace
                       if (str.ToLower().Contains(findStr.ToLower()))
                       {
                          //찾았을때 적당한 로직 구현 list에 Add 작업 등
 
                          //찾고자하는 문자가 존재하는 Slide가 있으니 다른 슬라이더에서 더 이상 찾지 않고 끝냄.
                           bBreak = true;
                           break;
                       }
                   }
                   if (bBreak)
                       break;
              }
              pres.Close();
         }
         catch{ }
    }
}
 
private void GetDirectories(DirectoryInfo[] subDirs)
{
    DirectoryInfo[] subSubDirs;
    foreach (DirectoryInfo subDir in subDirs)
    {
        //현재의 디렉토리의 파일에서 찾기
        GetFiles(subDir);
 
        // 해당 폴더의 Sub폴더들을 찾아서 재호출
        subSubDirs = subDir.GetDirectories();
        if (subSubDirs.Length != 0)
        {
            GetDirectories(subSubDirs);
        }
    }
}

 

출처 : https://jujun.tistory.com/223