Excel Script 이벤트는 함수기반으로 엑셀을 컨트롤 할 수 있습니다.



1. Excel Script 이벤트의 Main Context에서 CellExControlClass 클래스 목록을 보면 함수 종류와 사용법에 대하여 알 수 있습니다.






2. Event Properties


  • Event Name : 이벤트 이름
  • Stop If Error : 에러 발생 시 중지 여부
  • Use Screenshot Log : 스크린샷 로그 저장 여부


  • Excel ID : 엑셀 ID 값




3. CellExControlClass 함수 사용법 https://docs.devexpress.com/OfficeFileAPI/DevExpress.Spreadsheet.Workbook._methods 참조


-CellExControlClass_Example.cs

  

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;
using System.Text.RegularExpressions;

public partial class CustomScript
{
    public void CeLLEx_Script(CeLLExControlClass xl)
    {
        //파일 실행
        xl.LoadDocument(@"C:\CheckMATE\RPA\test.xlsx");
        
        //시트추가
        xl.Worksheets.Add("신규시트1");
        xl.Worksheets.Add("신규시트2");
        xl.Worksheets.Add("신규시트3");
        
        //시트삭제
        xl.Worksheets.Remove(xl.Worksheets[0]);

        //수정할 시트선언
        Worksheet worksheet2 = xl.Worksheets[0];
        
        //신규시트1 활성화
        xl.Worksheets.ActiveWorksheet = worksheet2;
        
        //활성화된 활성화시트정보
        var active_sheet = xl.Worksheets.ActiveWorksheet;
        PrintLog("* 활성화시트정보: " + active_sheet.ToString());
        PrintLog("* 문서시트 개수: " + xl.Sheets.Count);
        
        //값입력
        //active_sheet.Range["A:A"].Value = "AA";
        //active_sheet.Range["2:2"].Value = 22;
        active_sheet.Range["C4:F4"].Value = 40;
        active_sheet.Range["C5:F5"].Value = 50;
        active_sheet.Range["C6:F6"].Value = 60;
        active_sheet.Cells["H8"].Value = "셀";

        //글씨체 설정
        active_sheet.Cells ["H8"].FillColor = Color.Yellow;
        active_sheet.Cells ["H8"].Font.Color = Color.Blue;
        active_sheet.Cells ["H8"].Font.Bold = true;
        
        //특정셀 선택
        xl.Worksheets.ActiveWorksheet.Selection = active_sheet.Range["C6:F6"];
        xl.Worksheets.ActiveWorksheet.SelectedCell = active_sheet.Cells ["H8"];
                
        //현재 활성화된 셀정보 추출
        CellRange act_cell = active_sheet.Selection;
        PrintLog("\n* 활성화셀정보: " + act_cell.ToString());
        
        //특정값 붙여넣기
        active_sheet.Cells ["H9"].Value = active_sheet.Cells ["H8"].Value;
        
        //특정영역 붙여넣기
        active_sheet.Range ["K4:M6"].CopyFrom(active_sheet.Range ["C4:F6"]);
        active_sheet.Range ["K9"].CopyFrom(active_sheet.Range ["C4:F6"]);
        
        //현재 시트에서 사용하고 있는 문서 영역정보
        CellRange nowall = active_sheet.GetUsedRange();
        string used_range = nowall.GetReferenceA1();
        string lastcell = used_range.Substring(used_range.IndexOf(":") + 1, used_range.Length - used_range.IndexOf(":") -1);
        string lastcol = Regex.Replace(lastcell, @"\d""");
        string lastrow = Regex.Replace(lastcell, @"\D""");
        
        PrintLog("\n* 시트 사용영역: " + used_range);
        PrintLog("****** " + nowall.ColumnCount);
        PrintLog("* 마지막셀: " + lastcell);
        PrintLog("* lastcol: " + lastcol);
        PrintLog("* lastrow: " + lastrow + "\n");
        
        //현재 시트에서 데이터 찾기
        IEnumerable<Cell> find = active_sheet.Search("60");
        
        //특정 범위에서 데이터 찾기
        //IEnumerable<Cell> find = active_sheet.Range ["K4:M6"].Search("60");
        
        foreach (Cell cell in find)
        {
            PrintLog("* 찾은 셀: " + cell);
            cell.Value = "수정";
        }
        
        //셀병합
        active_sheet.MergeCells(active_sheet.Range ["A1:P1"]);
        active_sheet.MergeCells(active_sheet.Range ["A2:P2"]);
        
        //셀병합해제
        active_sheet.UnMergeCells(active_sheet.Range ["A2:P2"]);
        
        //값추출하여 데이터테이블 생성
        //열: A열=0, B열=1, C열=3 ...
        //행: 1행=0, 2행=1, 3행=2 ...
        int startcol = nowall.LeftColumnIndex; //C열
        int startrow = nowall.TopRowIndex; //4행
        int endcol = nowall.RightColumnIndex; //N열
        int endrow = nowall.BottomRowIndex; //11행
        
        //데이터 테이블 초기화
        GETDT = new DataTable();
        
        //컬럼생성
        for (int C = 0; C <= endcol-startcol; C++)
        {
            GETDT.Columns.Add("col" + C.ToString());
        }
        
        //데이터테이블값 입력
        for (int R = startrow; R <= endrow; R++)
        {
            //로우생성
            GETDT.Rows.Add();

            for (int C = startcol; C <= endcol; C++)
            {
                //각 값 지정
                GETDT.Rows [R - startrow] [C - startcol] = active_sheet.Cells[R, C].Value.ToString();
            }
        }
        
        //다른이름으로 저장
        xl.SaveDocument(@"C:\CheckMATE\RPA\test2.xlsx");
        
        //종료는 밖에서

        
    }
}

Created with the Personal Edition of HelpNDoc: Write eBooks for the Kindle