xython 4.2.0
win32com + python + Office Automation = xython, (for easy automation for excel, word, outlook, regex, color, hwp, etc BY python & win32com)
Requires Python: >=3.8


# 4.0.0을 기준으로 각 모듈이름을 변경함 (2025-03-26)
> - 쉽게 : **xy_** 접두어로 모든 모듈이름을 변경<br>
> - 공통 변수모듈 : **xy_xommon**으로 변경<br>
> - 공통변수이름을 vars => **xvar**로 변경<br>

# About xython Package

>**Functional Programming for Excel, Hwp, Word, Outlook, Color, Etc by win32com<br>
It can handle for Excel, Hwp, Word, Outlook, Color, Etc by xython**


## xython 패키지는 함수형 프로그램 이다

보통의 프로그래밍으로 하는 방법과 새로운 방법으로의 변경은 분병 장단점이 있습니다. <br>
차후에는 객체형도 동시에 만들예정이지만, 오랫동안 사용자의 입장에서 해보니, <br>
함수형이 훨씬더 사용하기 편하며, 동시에 새로운 요구에대해서 아주 빠른시간에 만들어서 공유가 가능하기 때문에 <br>
불필요한 코딩에 시간을 하애하지 않아도 되는 방법으로 판단하였습니다. <br>

| 함수형 프로그램               | 객체형 프로그램                                    |
|------------------------|---------------------------------------------|
| Import 필요모듈            | Python 프로그램 사용                              |
| 함수결과_1  = 함수_1(입력값_1)  | 기본적인 함수사용가능                                 |
| 함수결과_2  = 함수_2(함수결과_1) | 다른 언어의 코드의 사용가능                             |
| 파이썬코드들                 | 자주사용하는기능을 함수로 만들어서 적용                       |
| 다양한 함수형태가 필요           | 워드, Color, 정규표현식, Database, E-mail등의 자료도 있음 |
| 없는 기능은 사용자가 직접 만들어야 함	 |                                             |
| * 쉬운 사용성               | * 낮은 사용성                                    |
| * 낮은 고급기능	             | * 높은 고급기능                                   |
| **80%의 함수 + 20%의 코드**  | **80%의 Python형태의 코드 + 20%의 함수**             |


* xython은 기본적으로 객체형 프로그램이 아니고, 함수형 프로그램입니다<br>
* 함수의 결과물들의 나열로 원하는것을 실행하는 프로그램형식입니다 <br>
* 전체적으로 **3,000개이상의 함수**로 원하는 것을 할수가 있읍니다<br>
* 쉽게 새로운 함수를 만들어 공유하며, 재사용할수가 있다

### official website
> oficial document : **https://sjpkorea.github.io/xython.github.io/**<br>
> oficial website : **www.xython.co.kr  (Korean base)**<br>


## components about xython package (패키지의 구성)
**easy wrapper** for belows;

| 번호 | xython package | 설명                                                |
|----|----------------|---------------------------------------------------|
| 1  | xy_excel       | for Excel                                         |
| 2  | xy_excel_event | for Excel VBA Event                               |
| 3  | xy_word        | for Word                                          |
| 4  | xy_hwp         | for hwp                                           |
| 5  | xy_outlook     | for outlook                                       |
| 6  | xy_web         | for selenium                                      |
| 7  | xy_map         | for folium                                        |
| 8  | xy_re          | for Regex (**for common use**)                    |
| 9  | xy_time        | for Date & Time (**for common use**)              |
| 10 | xy_color       | for Color (**for common use**)                    |
| 11 | xy_db          | for Database (**for common use**)                 |
| 12 | xy_list        | New List (start from 1)  (**for common use**)     |
| 13 | xy_util        | utilities (**for common use**)                    |
| 14 | xy_auto        | for Keyboard & Mouse control (**for common use**) |


## xython 각 모듈의 간략한 설명


| 번호         | xython package                                                           |
|------------|--------------------------------------------------------------------------|
| 소문자        | 모두 소문자로 나타낸다                                                             |
| _          | 언더바로 기본 3단어를 연결한다                                                        |
| all        | 모든을 뜻하는 것은 all을 사용한다                                                     |
| 리스트형       | 함수의 입력변수는 input_list => 리스트형                                             |
| 1개의 값일때    | input_data/text/value => 1개의 자료                                          |
| 사전형        | input_dic => 사전형                                                         |
| 1차, 2차 리스트 | 1차원리스트는 l1d, 2차원은 l2d                                                    |
| 동사로 시작     | 처음 시작 단어는 동사로 시작                                                         |
| 좌표 x, y    | 주소와 영역에 사용되는 것은 x,y로 만들었으며, 이때 x는 가로, y는 세로를 뜻한다                         |
| _check     | _check로 시작하는 경우는 내부적으로 확인하는 목적으로 사용한다                                    |
| 함수이름       | 이름은 가능하면 쉽게, 연상이 가능한 방법으로, 기본 3자리로 만들었으며, 어떤 이름은 약간 억지스러운 것도 있으니 이해 바랍니다 |
| 함수이름의 형태   | 가급적 **동사_어떻게_전치사_적용대상_추가설명** 의 형태로 사용                                    |
| 접두사나 접미사  | 인수에 input_나 i_이나 _i로 끝나는 형태의 메소드의 인수는 기본값을 갖지 않은것으로 값을 입력을 해야 한다         |


### xy_excel, xy_excel_event에 대하여
win32com을 이용해서 엑셀의 자동화를 좀더 편하고 쉽게 사용할수 있도록 만든 모듈 
셀로 이루어진 특성상 range의 형태를 많이 사용하며, 자료의 변경이 많이 필요합니다

1. 읽을때는 read, 쓸때는 write, 삭제는 delete, 추가는insert등을 사용하였습니다
2. 두번째의 이름의 규칙은
	관련된 부분에 따라 다른것을 사용하며 다음과 같은 것이 사용이 됩니다
	거진 영역을 나타내는 부분으로 사용하였습니다
	range, workbook, cell, line, column
3. 세번째 부분이 어떤 일을 할것인지를 알아보는 것입니다


### xy_word와 xy_hwp에 대하여
워드와 아래아 한글을 사용하기 쉽도록 만든 모듈로, 엑셀과 다르게 워드프로세스의 특성상 글자/단어/라인/문단의 형식으로
원하는 것을 실행시키면 됩니다

기본적으로 줄, 단어, 문단등의 조건으로 커서나 선택을 할수가 있읍니다

아래아 한글을 사용하기 편하도록 사용하기위해 만들었다.
만약 워드나 엑셀의 자료를 서로 옮기는것은 ganada, pcell을 이용하면 된다

줄이나 단어등을 기준으로 이동이 가능하도록 함   
테이블을 만들고, 좌표를 기준으로 Text를 넣을수 잇돌고 함   
원하는 위치에 text삽입가능   
글자색을 scolor로 이용하여 적용가능   


### xy_outlook에 대하여
메일을 쉽게 관리하는 도구입니다
- 메일을 쓰고, 읽는 기능
- 이것의 장점은 엑셀이나 Util과 연동하여 편의성을 더욱 증대하고있읍니다
- 기본적인 사용법이나 함수의 이름은 같은 형태를 따릅니다


### xy_web에 대하여
selenium을 기반으로 사용하기 쉽도록 만든 것 
여러가지 웹브라우져를 쉽게 사용하는 메소드와 속성을 갖고있읍니다
웹상태의 자동화를 쉽게 할수있도록 도와주는 것입니다

### xy_map에 대하여
지도를 다루는 folium을 베이스로 하여, 
웹브라우져를 기본으로 지도를 쉽게 만드는 여러 메소드들을 만들었읍니다


### xy_re에 대하여
어렵게 되어있는 정규표현식을 모르는 사람이 보더라도 알아볼수있도록 만든것입니다
기본적인 형태는 아래와 같읍니다


| 변경전                                                     | 변경후 |
|---------------------------------------------------------|-------------------|
| ([a-zA-Z0-9_.+-]+)@[a-zA-Z0-9_.+-]+\.[a-zA-Z0-9_.+-]+   | [영어&숫자.+-:1~]@[영어&숫자.+-:1~]\.[영어&숫자.+-:1~]|

이렇게 바꾸면 좀더 읽기가 쉬워진다
* 대괄호로 묶는다
* 특수문자(re모듈내에 의미가있는 문자)는 \를 붙여서 사용한다
* 어떤문자의 앞과뒤에있을때는 (앞에있음:abc)이라고 사용하면 abc가 앞에있는 문자열을 찾는것이다
* 건수는 ~를 사용하여 4~5라는 식으로 표현을 하였고
* 한글, 영어와 같은 것은 대괄호를 사용하여 적용하였다 [한글]
* 처음과 끝은 [처음], [끝]처럼 나타냈다
* 그리고 이것은 누가 보아도 아~~ 무엇을 찾을려고 했는지를 알수있도록 하기위한것이며
* 찾기기능중에 전부 찾아서 보기쉽도록 돌려주는 것과 같은 몇가지 메소드들을 만들어 넣었읍니다


### xy_time에 대하여
시간을 다루는 여러가지 메소드를 쉽게 사용가능하도록 만든것이며, 여러가지 시간의 형태로 변경이 가능합니다<br>
또한 양역과 음력을 구분하며, 공휴일을 갖고오는 기능도 있읍니다

- 2024년의 3번째 주의 리스트를 갖고오고 싶을 때
- 엑셀의 많은 자료중에서 날짜를 골라내고 싶을 때
- 오늘 날짜의 123일 전의 날짜
- 대부분의 함수는 자료를 변경하는 기능이 많읍니다

### xy_color에 대하여
색을 나타내는 방법을 좀더 편하고 쉽게 사용하고 싶어서 만든 모듈입니다

- 색을 변경하고 관리하는 모듈이며   
- 색의 변화를 잘 사용이 가능하도록 하기위한 것이다   
- 기본 입력 예 : "빨강", "빨강55", "red55", "0155"   
- 기본색 ==> 12색 + (하양, 검정, 회색),   
- 큰변화 ==> 1~9단계, 작은변화 ==> 1~9단계   
- 기본함수 : get_color_rgb("red55"), get_rgb_3input(색, 큰변화, 작은변화)   
- 언급이 없는 기본은 모든 색의 표현이나 결과는 rgb로 돌려준다   

### xy_db에 대하여
엑셀자료, 리스트, 사전, pandas, sqlite등의 자료를 쉽게 서로간에 변경이 가능하도록 만든 것 
보통 자료를 다룰때 조그마한 자료를 넘어 일정수준의 자료는 DB에 저장을 하거나 다른 곳에 저장을 해야 합니다
이럴때를 포함하여 여러자료들을 상호간에 변경을 해야하는 경우가 많은데
그때 사용가능하도록 만든 것입니다


### xy_list에 대하여
기본 리스트의 기능에 1부터 시작하는 기능을 추가하여 만든것이며,
일부 리스트의 변경에 사용되는 메소드를 추가하여 만든 새로운 사용자형 자료형입니다

* 기본적인 리스트의 기능은 같다
* 대괄호안에 문자로 물결표시를 사용하여 구간을 표시
* ~ 표시를 사용하면 무조건 리스트형으로 결과를 돌려준다
* ~와 :은 같은 기능이지만, “”안에 사용되는 기준입니다
* 추가적인 메소드로 도움되는 함수가 있다
* to_list함수는 일반함수로 만들어주는 기능입니다


### xy_util에 대하여
일반적인 자료들의 변경등의 전반적인 분류가 어려운 함수들을 담고있는 부분입니다  


### xy_auto에 대하여
>자동화업무를 하고싶을때가 많은대, 그때 추가적으로 요구되는 사항중에 하나가 마우스나 키보드의 기능을 원하는 곳으로 이동을 하는등의 일을 하는 것입니다<br>
생각보다 많은 부분에서 마우스나 키보드를 잘 제어를 한다면, 매번 똑같이 다루는 일들을 보다 편하게 사용하는 방법이 되기도 합니다.<br>
이 모듈은 전반적으로 마우스와 키보드에 대한 여러가지 메소드와 모니터등의 정보에 대한것들을 쉽게 다루도록 만든 것입니다. 이 모듈을 하기위해서는 각 프로그램의 핸들을 찾는 방법등의 관련 기능의 확인이 필요합니다


## 주요 메소드이름의 이해
### 공통 용어

| 모듈           | 설명                                              |
|--------------|-------------------------------------------------|
| 0,0          | 왼쪽아래                                            |
| cpx          | 셀의 좌표번호                                         |
| curr_x       | 키보드등으로 움직이는 현재의 셀                               |
| current      | 어떤 객체 든지 현재에 활성화된것을 뜻함                          |
| data         | 결과값으로 어떤 종류의 자료를 돌려줄 때                          |
| dtx          | 두 셀간의 차이                                        |
| dx           | 두지점간의 차이                                        |
| mx, mpx      | 마우스의 좌표                                         |
| pwh          | 넓이, 높이의 길이를 픽셀단위로 나타낸것                          |
| px           | 그림을 그리고 싶은 좌표, 커서의 픽셀 좌표                        |
| x, y         | cell의 기본좌표, X: 가로줄번호, Y: 세로줄 번호                 |
| xx           | 가로줄의 영역, [3,6]                                  |
| xy           | 하나의 셀에대한 좌표                                     |
| xyxy         | 셀의 영역에 대한 좌표                                    |
| yy           | 세로줄의 영역, [3,6]                                  |
| tbl_x        | 테이블의 x                                          |
| tx           | cell의 번호에 대한것, table에서 몇번째 셀이라는 쯧               |
| win_x        | 윈도우의 x                                          |
| sel_x        | 셀렉션된 영역                                         |
| dic         | 자료의 형태가 dic형태로 줄때는 맨뒤에 dic을 붙임                  |
| By_limit     | 번호가 들어가 그때까지 적용                                 |
| By_step      | 번호가 들어가 그 간격으로 실행될 때                            |


### 메소드의 이름규칙

| 모듈          | 설명                                              |
|-------------|-------------------------------------------------|
| add         | 기존에 있는것의 일반적인 끝에 넣는 것                           |
| append      | 맨끝에 추가할 때                                       |
| change      | 입력값을 바꾸는 목적                                     |
| check       | 확인                                              |
| control     | 어느 영역안에서 조정을 할 때                                |
| delete      | 삭제하기                                            |
| draw        | 선을 그을 때 사용                                      |
| fill        | 넣기                                              |
| find        | 찾기                                              |
| get         | 입력값이 없는 조건에서의 자료를 갖고올때 , read를 제외한 모든 자료를 갖고올 때 |
| index       | 몇번째의 순서대로 어떤 것을 하는 것                            |
| input       | 내부적으로 어떤 값을 넣을 때                                |
| input_dic   | 사전형식일 때                                         |
| input_l1d   | 1차원 리스트가 입력값일 때                                 |
| input_l2d   | 2차원 리스트가 입력값일 때                                 |
| input_value | 숫자형의 자료가 입력될때                                   |
| insert      | 내가 원하는위치에 넣는 것                                  |
| make        | 만들기                                             |
| move        | 이동하기                                            |
| new         | 새로운것을 만드는 개념                                    |
| obj         | 객체를 뜻함                                          |
| paint       | 영역에 색칠하는 것                                      |
| pick        | 여러개중에서 하나를 갖고올 때                                |
| read        | 입력값이 있으면서 어떤 자료를 갖고올 때 사용, 보여지는 자료의 값을 갖고올 때    |
| replace     | 바꾸기                                             |
| search      | 찾기                                              |
| select      | 어떤 영역을 선택할 때                                    |
| set         | 입력값이 특별한것없이 자료를 설정하는 것, 설정값을 변경할 때              |
| split       | 분리하기                                            |
| write       | 눈에 보이는 것                                        |