Microsoft.Office.Interop.Excel에서 여러 Excel 파일의 대량 편집

우선 실행 결과를 확인하고 싶다 → 실행 결과



개발 환경


  • Microsoft Visual Studio Community 2019
  • Microsoft .NET Framework 4.8.04084
  • Microsoft Excel 2016

  • 개발 언어


  • C#

  • 1. 새로운 프로젝트 만들기



    C# 콘솔 애플리케이션 프로젝트를 만듭니다.
    작성 방법은 아래를 참조하십시오.
    Visual Studio에서 새 프로젝트 만들기

    2. 참조 추가



    Microsoft Excel 16.0 Object Library COM 참조를 추가합니다.
    추가 방법은 아래를 참조하십시오.
    .NET 5 프로젝트에서 COM 참조 추가

    3. 소스 코드



    Program.cs
    using System.IO;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
    namespace ExcelEdit
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 色んなオブジェクトの定義
                Excel.Application excel = null;
                Excel.Workbooks books = null;
                Excel.Workbook book = null;
                Excel.Sheets sheets = null;
                Excel.Worksheet sheet = null;
                Excel.Range cells = null;
                Excel.Range range = null;
                // フォルダの取得
                string folderPath = @"C:\Users\xyy\Desktop\Folder";
                // フォルダの中の拡張子が.xlsxのファイルの取得
                string[] files = Directory.GetFiles(Path.GetFullPath(folderPath), "*.xlsx");
                try
                {
                    // Excelを起動する
                    excel = new Excel.Application();
                    // ブック一覧の定義
                    books = excel.Workbooks;
                    // 各ファイルに対して下記処理を繰り返し行う
                    foreach (string file in files)
                    {
                        try
                        {
                            // ブックを開く
                            book = books.Open(file);
                            // シート一覧の定義
                            sheets = book.Worksheets;
                            // 最初のシートの選択
                            sheet = sheets[1];
                            // セル一覧の定義
                            cells = sheet.Cells; 
                            // セル[2,1]の選択
                            // range = sheet.Cells[2, 1] という書き方だと、sheet.Cellsとsheet.Cells[2, 1]という二つのExcel.Rangeオブジェクトが隠れて、
                            // オブジェクトの解放漏れが発生するので、注意してください。    
                            range = cells[2, 1];
                            // セル[2,1]の値をtestに設定する
                            range.Value = "test";
                            // ブックを保存して閉じる
                            book.Close(true);
                            // Excelを終了する
                            excel.Quit();
                        }
                        finally
                        {
                            // 定義されたオブジェクトの解放、ループのたびに毎回解放しないとExcelのプロセスが残り続ける
                            Marshal.FinalReleaseComObject(range);
                            Marshal.FinalReleaseComObject(cells);
                            Marshal.FinalReleaseComObject(sheet);
                            Marshal.FinalReleaseComObject(sheets);
                            Marshal.FinalReleaseComObject(book);
                        }
                    }
                }
                finally
                {
                    // ブック一覧とExcelオブジェクトの解放は最後に一回行っていい
                    Marshal.FinalReleaseComObject(books);
                    Marshal.FinalReleaseComObject(excel);
                }
            }
        }
    }
    
    

    4. 편집 대상으로 하는 파일의 작성





    5. 실행 결과



    실행 전           
    Book1 & Book2         Book1 & Book2
         

    6. 이상시 대응



    실행중인 프로그램을 강제 종료하면 개체를 해제 할 수 없으며 Excel 프로세스가 계속 남아 있습니다.
    프로그램을 다시 실행하면 오류가 발생할 가능성이 높습니다.
    해결 방법에 대해 작업 관리자에서 남아 있는 Excel 프로세스를 종료한 다음 프로그램을 다시 실행하십시오.


    7. 값 편집 이외의 기능



    7.1. 열 삽입



    Program.cs
    // 列一覧の定義
    cells = sheet.Columns;
    // 2列目の選択
    range = cells[2];
    // 3列を挿入する
    for (int i = 0; i < 3; i++)
    {
        range.Insert();
    }                                               
    

    실행 전               

    실행 후  


    7.2. 셀 결합



    Program.cs
    // セル一覧の定義
    cells = sheet.Cells;
    // セル[2, 2]の選択
    range1 = cells[2, 2];
    // セル[2, 4]の選択
    range2 = cells[2, 4];
    // セル[2, 2]から[2, 4]までの範囲の選択
    range3 = sheet.Range[range1,range2];
    // セルの結合
    range3.Merge();                                           
    

    또는

    Program.cs
    // セル[B2]から[D2]までの範囲の選択
    range = sheet.Range["B2:D2"];
    // セルの結合
    range.Merge();                                                                  
    

    실행 전               

    실행 후


    7.3. 문자색 변경



    Program.cs
    // フォントオブジェクトの定義
    Excel.Font font = null;    
    // ... 略
    // セル一覧の定義
    cells = sheet.Cells;
    // セル[2,1]の選択
    range = cells[2, 1];
    // セル[2,1]のフォントの選択
    font = range.Font;
    // 文字色を赤にする
    font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);                                                            
    

    실행 전         실행 후
         

    7.4. 테두리 설정



    Program.cs
    // 罫線オブジェクトの定義
    Excel.Borders border = null;  
    // ... 略
    // セル一覧の定義
    cells = sheet.Cells;
    // セル[2,2]の選択
    range = cells[2, 2];
    // セル[2,2]の罫線選択
    border = range.Borders;
    // 罫線を実線に設定する
    border.LineStyle = Excel.XlLineStyle.xlContinuous;
    // 罫線の太さの設定
    border.Weight = 2d;                                                          
    

    실행 전             
         

    참고문헌



    이 기사는 다음 정보를 참고로 작성했습니다.
  • C#: Excel 파일 읽기/쓰기(COM)
  • c#에서 Excel을 열면 프로세스가 남아 있습니다 (Microsoft.Office.Interop.Excel 사용)
  • Microsoft.Office.Interop.Excel: How to Apply a border to ONE CELL

  • 마지막으로



    재일 중국인 엔지니어입니다. 기술적인 지적 혹은 일본어의 지적이 있으면, 가르쳐 주세요.

    좋은 웹페이지 즐겨찾기