xython 4.3.5__tar.gz → 4.3.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {xython-4.3.5/src/xython.egg-info → xython-4.3.6}/PKG-INFO +7 -1
  2. {xython-4.3.5 → xython-4.3.6}/README.md +6 -0
  3. {xython-4.3.5 → xython-4.3.6}/pyproject.toml +34 -34
  4. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_color.py +43 -1
  5. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_excel.py +50 -17
  6. {xython-4.3.5 → xython-4.3.6/src/xython.egg-info}/PKG-INFO +7 -1
  7. {xython-4.3.5 → xython-4.3.6}/MANIFEST.in +0 -0
  8. {xython-4.3.5 → xython-4.3.6}/requirements.txt +0 -0
  9. {xython-4.3.5 → xython-4.3.6}/setup.cfg +0 -0
  10. {xython-4.3.5 → xython-4.3.6}/src/xython/__init__.py +0 -0
  11. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_auto.py +0 -0
  12. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_chrome.py +0 -0
  13. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_common.py +0 -0
  14. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_db.py +0 -0
  15. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_edge.py +0 -0
  16. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_excel_event.py +0 -0
  17. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_hwp.py +0 -0
  18. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_list.py +0 -0
  19. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_map.py +0 -0
  20. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_outlook.py +0 -0
  21. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_re.py +0 -0
  22. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_time.py +0 -0
  23. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_util.py +0 -0
  24. {xython-4.3.5 → xython-4.3.6}/src/xython/xy_word.py +0 -0
  25. {xython-4.3.5 → xython-4.3.6}/src/xython.egg-info/SOURCES.txt +0 -0
  26. {xython-4.3.5 → xython-4.3.6}/src/xython.egg-info/dependency_links.txt +0 -0
  27. {xython-4.3.5 → xython-4.3.6}/src/xython.egg-info/requires.txt +0 -0
  28. {xython-4.3.5 → xython-4.3.6}/src/xython.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xython
3
- Version: 4.3.5
3
+ Version: 4.3.6
4
4
  Summary: xython package
5
5
  Author-email: "SJ.Park" <sjpkorea@naver.com>
6
6
  License: MIT
@@ -17,6 +17,10 @@ Requires-Dist: screeninfo
17
17
  Requires-Dist: pywinauto
18
18
  Requires-Dist: psutil
19
19
 
20
+ # 4.3.6을 기준으로 각 모듈이름을 변경함 (2026-05-10)
21
+ > - 각 모듈의 객체이름은 xy를 붙여서 사용 (예 : xyexcel)<br>
22
+ > - xy_edge를 추가함 : Drissionpage를 사용함<br>
23
+ > - 전체적으로 이름을 변경<br>
20
24
 
21
25
  # 4.0.0을 기준으로 각 모듈이름을 변경함 (2025-03-26)
22
26
  > - 쉽게 : **xy_** 접두어로 모든 모듈이름을 변경<br>
@@ -78,6 +82,8 @@ It can handle for Excel, Hwp, Word, Outlook, Color, Etc by xython**
78
82
  | 12 | xy_list | New List (start from 1) (**for common use**) |
79
83
  | 13 | xy_util | utilities (**for common use**) |
80
84
  | 14 | xy_auto | for Keyboard & Mouse control (**for common use**) |
85
+ | 15 | xy_edge | for web control |
86
+ | 16 | xy_chrome | for web control |
81
87
 
82
88
 
83
89
  ## xython 각 모듈의 간략한 설명
@@ -1,3 +1,7 @@
1
+ # 4.3.6을 기준으로 각 모듈이름을 변경함 (2026-05-10)
2
+ > - 각 모듈의 객체이름은 xy를 붙여서 사용 (예 : xyexcel)<br>
3
+ > - xy_edge를 추가함 : Drissionpage를 사용함<br>
4
+ > - 전체적으로 이름을 변경<br>
1
5
 
2
6
  # 4.0.0을 기준으로 각 모듈이름을 변경함 (2025-03-26)
3
7
  > - 쉽게 : **xy_** 접두어로 모든 모듈이름을 변경<br>
@@ -59,6 +63,8 @@ It can handle for Excel, Hwp, Word, Outlook, Color, Etc by xython**
59
63
  | 12 | xy_list | New List (start from 1) (**for common use**) |
60
64
  | 13 | xy_util | utilities (**for common use**) |
61
65
  | 14 | xy_auto | for Keyboard & Mouse control (**for common use**) |
66
+ | 15 | xy_edge | for web control |
67
+ | 16 | xy_chrome | for web control |
62
68
 
63
69
 
64
70
  ## xython 각 모듈의 간략한 설명
@@ -1,34 +1,34 @@
1
- [build-system]
2
- requires = ["setuptools>=61.0", "wheel"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "xython"
7
- version = "4.3.5"
8
- description = "xython package"
9
- readme = {file = "README.md", content-type = "text/markdown"}
10
- requires-python = ">=3.8"
11
- authors = [
12
- {name = "SJ.Park", email = "sjpkorea@naver.com"}
13
- ]
14
- license = {text = "MIT"}
15
- dependencies = [
16
- "korean_lunar_calendar",
17
- "arrow",
18
- "pywin32",
19
- "pyautogui",
20
- "folium",
21
- "DrissionPage",
22
- "screeninfo",
23
- "pywinauto",
24
- "psutil",
25
- ]
26
-
27
- [project.urls]
28
- Homepage = "https://github.com/yourname/xython"
29
-
30
- [tool.setuptools.packages.find]
31
- where = ["src"]
32
-
33
- [tool.setuptools.package-dir]
34
- "" = "src"
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "xython"
7
+ version = "4.3.6"
8
+ description = "xython package"
9
+ readme = {file = "README.md", content-type = "text/markdown"}
10
+ requires-python = ">=3.8"
11
+ authors = [
12
+ {name = "SJ.Park", email = "sjpkorea@naver.com"}
13
+ ]
14
+ license = {text = "MIT"}
15
+ dependencies = [
16
+ "korean_lunar_calendar",
17
+ "arrow",
18
+ "pywin32",
19
+ "pyautogui",
20
+ "folium",
21
+ "DrissionPage",
22
+ "screeninfo",
23
+ "pywinauto",
24
+ "psutil",
25
+ ]
26
+
27
+ [project.urls]
28
+ Homepage = "https://github.com/yourname/xython"
29
+
30
+ [tool.setuptools.packages.find]
31
+ where = ["src"]
32
+
33
+ [tool.setuptools.package-dir]
34
+ "" = "src"
@@ -931,6 +931,9 @@ class xy_color:
931
931
  return [result]
932
932
 
933
933
  def hsl_to_rgb(self, input_hsl):
934
+ return self.change_hsl_to_rgb(input_hsl)
935
+
936
+ def change_hsl_to_rgb(self, input_hsl):
934
937
  """
935
938
  input_hsl을 rgb로 변경
936
939
 
@@ -1103,6 +1106,9 @@ class xy_color:
1103
1106
  return result
1104
1107
 
1105
1108
  def hsl_to_rgbint(self, input_hsl):
1109
+ return self.change_hsl_to_rgbint(input_hsl)
1110
+
1111
+ def change_hsl_to_rgbint(self, input_hsl):
1106
1112
  """
1107
1113
  변경 : hsl -> rgbint
1108
1114
 
@@ -1204,6 +1210,9 @@ class xy_color:
1204
1210
  return result
1205
1211
 
1206
1212
  def rgb_to_hex(self, input_rgb, option="#"):
1213
+ return change_rgb_to_hex(input_rgb, option)
1214
+
1215
+ def change_rgb_to_hex(self, input_rgb, option="#"):
1207
1216
  """
1208
1217
  엑셀의 Cells(1, i).Interior.Color는 hex값을 사용한다
1209
1218
 
@@ -1228,6 +1237,9 @@ class xy_color:
1228
1237
  return (b << 16) | (g << 8) | r
1229
1238
 
1230
1239
  def rgb_to_hsl(self, input_rgb):
1240
+ return self.change_rgb_to_hsl(input_rgb)
1241
+
1242
+ def change_rgb_to_hsl(self, input_rgb):
1231
1243
  """
1232
1244
  input_rgb를 hsl로 바꾸는 것이다
1233
1245
 
@@ -1264,6 +1276,18 @@ class xy_color:
1264
1276
 
1265
1277
  return [int(h), int(s * 100), int(l * 100)]
1266
1278
 
1279
+ def change_rgb_to_rgbint(self, input_rgb):
1280
+ """
1281
+ input_rgb인 값을 color에서 인식이 가능한 정수값으로 변경하는 것
1282
+ 엑셀에서는 input_rgb형태의 리스트나 정수를 사용하여 색을 지정한다
1283
+
1284
+ :param input_rgb: [r,g,b]값
1285
+ :return:
1286
+ """
1287
+ result = int(input_rgb[0]) + (int(input_rgb[1])) * 256 + (int(input_rgb[2])) * (256 ** 2)
1288
+ return result
1289
+
1290
+
1267
1291
  def rgb_to_rgbint(self, input_rgb):
1268
1292
  """
1269
1293
  input_rgb인 값을 color에서 인식이 가능한 정수값으로 변경하는 것
@@ -1303,6 +1327,9 @@ class xy_color:
1303
1327
  return colorname
1304
1328
 
1305
1329
  def rgbint_to_hsl(self, input_rgbint):
1330
+ return self.change_rgbint_to_hsl(input_rgbint)
1331
+
1332
+ def change_rgbint_to_hsl(self, input_rgbint):
1306
1333
  """
1307
1334
  정수형태의 int값을 [h,s,l]의 리스트형태로 바꾸는 것
1308
1335
 
@@ -1313,7 +1340,7 @@ class xy_color:
1313
1340
  hsl = self.rgb_to_hsl(rgb)
1314
1341
  return hsl
1315
1342
 
1316
- def rgbint_to_rgb(self, input_rgbint):
1343
+ def change_rgbint_to_rgb(self, input_rgbint):
1317
1344
  """
1318
1345
  정수형태의 int값을 [r,g,b]의 리스트형태로 바꾸는 것
1319
1346
 
@@ -1325,6 +1352,9 @@ class xy_color:
1325
1352
  result = [namuji1, mok1, mok0]
1326
1353
  return result
1327
1354
 
1355
+ def rgbint_to_rgb(self, input_rgbint):
1356
+ return self.change_rgbint_to_rgb(input_rgbint)
1357
+
1328
1358
  def change_style(self, input_xcolor, style_name):
1329
1359
  """
1330
1360
  자주 사용하는 형태라서 입력되는 색을 pccs스타일중의 하나로 변경하는 것
@@ -1620,6 +1650,18 @@ class xy_color:
1620
1650
  result = self.rgb_to_rgbint(rgb_list)
1621
1651
  return result
1622
1652
 
1653
+ def change_any_color_to_rgbint(self, input_xcolor):
1654
+ """
1655
+ xcolor값을 rgbint로 변경
1656
+ xcolor형식 : 12, "red", "red45", "red++"
1657
+
1658
+ :param input_xcolor: solor형태의 색깔입력, (12, "red", "red45", "red++")
1659
+ """
1660
+ rgb_list = self.change_xcolor_to_rgb(input_xcolor)
1661
+ result = self.rgb_to_rgbint(rgb_list)
1662
+ return result
1663
+
1664
+
1623
1665
  def check_color_name(self, input_value):
1624
1666
  result = self.varx["check_color"][input_value]
1625
1667
  return result
@@ -162,7 +162,6 @@ class xy_excel:
162
162
  elif left_or_right == "left":
163
163
  self.add_text_at_left(self.sheet_name, self.xyxy, input_value)
164
164
 
165
-
166
165
  def add_text_at_left(self, sheet_name='', xyxy='', input_value=None):
167
166
  sheet, [x1, y1, x2, y2], rng = self.check_sheet_n_xyxy(sheet_name, xyxy)
168
167
  for x, y in itertools.product(range(x1, x2 + 1), range(y1, y2 + 1)):
@@ -1603,10 +1602,10 @@ class xy_excel:
1603
1602
  for y in range(y_len):
1604
1603
  temp = ""
1605
1604
  for x in range(x_len):
1606
- self.write_value_in_cell("", [x + xy[0], y + xy[1]], "")
1605
+ self.write_value_for_cell("", [x + xy[0], y + xy[1]], "")
1607
1606
  if input_list_2d[x][y]:
1608
1607
  temp = temp + " " + input_list_2d[x][y]
1609
- self.write_value_in_cell("", [xy[0], y + xy[1]], str(temp).strip())
1608
+ self.write_value_for_cell("", [xy[0], y + xy[1]], str(temp).strip())
1610
1609
 
1611
1610
  def conditional_format_by_cell_value(self, sheet_name, xyxy, input_color, start_xy, input_value, cf_no):
1612
1611
  """
@@ -2880,7 +2879,7 @@ class xy_excel:
2880
2879
 
2881
2880
  """
2882
2881
  sheet = self.check_sheet_name('')
2883
- xyxy = self.address_for_selection()
2882
+ xyxy = self.get_address_for_selection()
2884
2883
  for x in range(xyxy[0], xyxy[2] + 1):
2885
2884
  for y in range(xyxy[1], xyxy[3] + 1):
2886
2885
  one_value = sheet.Cells(x, y).Value
@@ -2893,7 +2892,7 @@ class xy_excel:
2893
2892
  """
2894
2893
 
2895
2894
  """
2896
- self.delete_same_value_over_n_times(2)
2895
+ self.delete_same_value_for_range_over_n_times(2)
2897
2896
 
2898
2897
  def delete_same_value_for_range(self, sheet_name='', xyxy=''):
2899
2898
  """
@@ -4353,7 +4352,7 @@ class xy_excel:
4353
4352
  result = []
4354
4353
  sheets_name = self.all_sheet_name()
4355
4354
  for sheet_name in sheets_name:
4356
- shapes_name = self.all_shape_name_for_sheet(sheet_name)
4355
+ shapes_name = self.get_all_shape_name_for_sheet(sheet_name)
4357
4356
  if shapes_name:
4358
4357
  for shape_name in shapes_name:
4359
4358
  result.append([sheet_name, shape_name])
@@ -4814,7 +4813,7 @@ class xy_excel:
4814
4813
 
4815
4814
  if rng.MergeCells:
4816
4815
  rng.Select()
4817
- ddd = self.read_address_for_selection()
4816
+ ddd = self.get_address_for_selection()
4818
4817
  if not ddd in result:
4819
4818
  result.append(ddd)
4820
4819
  return result
@@ -5325,12 +5324,17 @@ class xy_excel:
5325
5324
  # 3. 결과를 다시 리스트의 리스트 형태로 변환
5326
5325
  return [list(row) for row in unique_set]
5327
5326
 
5328
- def get_username(self):
5327
+ def get_username_for_workbook(self):
5329
5328
  """
5330
5329
  사용자 이름을 읽어온다
5330
+ """
5331
+ return self.xlapp.UserName
5331
5332
 
5333
+ def get_username(self):
5334
+ """
5335
+ 사용자 이름을 읽어온다
5332
5336
  """
5333
- return self.get_username_for_workbook()
5337
+ return self.xlapp.UserName
5334
5338
 
5335
5339
  def get_vba_module_names(self):
5336
5340
  """
@@ -6336,7 +6340,7 @@ class xy_excel:
6336
6340
  # 한번 붙여넣기를 하면 없어져서, 계속 해야한다
6337
6341
  no = no + 1
6338
6342
  xl2 = xy_excel("new")
6339
- xl2.paste_range_format_only("", [1, 1])
6343
+ xl2.paste_format_only_for_range("", [1, 1])
6340
6344
  xl2.write_l1d_from_cell("", [1, 1], l2d[0])
6341
6345
  xl2.write_l2d_from_cell("", [1, 1], l2d_group[index + 1])
6342
6346
  xl2.save(filename + str(no) + ".xlsx")
@@ -7321,7 +7325,7 @@ class xy_excel:
7321
7325
  세로의 값을 이동시킵니다
7322
7326
 
7323
7327
  """
7324
- self.move_yyline_to_another_sheet(sheet_name1, sheet_name2, yy_list0, yy_list1)
7328
+ self.move_yyline_to_another_sheet_for_range(sheet_name1, sheet_name2, yy_list0, yy_list1)
7325
7329
 
7326
7330
  def move_yyline_to_another_sheet_for_range(self, sheet_name1, sheet_name2, yy_list0, yy_list1):
7327
7331
  """
@@ -7754,6 +7758,12 @@ class xy_excel:
7754
7758
  new_shape_obj = sheet.Shapes.AddLine(cxyxy[0], cxyxy[1], cxyxy[2], cxyxy[3])
7755
7759
  return new_shape_obj
7756
7760
 
7761
+ def new_range_for_range(self, sheet_name, xyxy):
7762
+ sheet = self.check_sheet_name(sheet_name)
7763
+ [x1, y1, x2, y2] = self.change_address_to_xyxy(xyxy)
7764
+ range_obj = sheet.Range(sheet.Cells(x1, y1), sheet.Cells(x2, y2))
7765
+ return range_obj
7766
+
7757
7767
  def new_line_by_pxyxy(self, sheet_name, pxyxy):
7758
7768
  """
7759
7769
  4개영역의 픽셀값을 가지고 사각형을 그리는 것
@@ -8355,15 +8365,27 @@ class xy_excel:
8355
8365
  result = [lb, rb, rt]
8356
8366
  return result
8357
8367
 
8358
- def new_workbook_with_file_path(self, input_filename=None):
8368
+ def new_workbook_with_file_path(self, filename=None):
8359
8369
  """
8360
8370
  엑셀화일 열기
8361
-
8362
8371
  new_workbook_with_file_path(input_filename="D:\\my_file.xlsx")
8363
8372
  new_workbook_with_file_path("D:\\my_file.xlsx")
8364
8373
  new_workbook_with_file_path("D:\\my_file2.xlsx")
8365
8374
  """
8366
- self.new_workbook(input_filename)
8375
+ # 열려진 화일중에 같은 것이 없으면, 화일을 연다
8376
+ path = ""
8377
+ self.xlapp.WindowState = -4137
8378
+ self.xlapp.Visible = 1
8379
+ if not "\\" in filename:
8380
+ path = os.path.normpath(os.getcwd()) + '\\'
8381
+
8382
+ if path.endswith('\\'):
8383
+ self.xlbook = self.xlapp.Workbooks.Open(path + filename + ".xlsx")
8384
+ else:
8385
+ self.xlbook = self.xlapp.Workbooks.Open(path + '\\' + filename + ".xlsx")
8386
+
8387
+ def new_workbook(self, filename):
8388
+ self.new_workbook_with_file_path(filename)
8367
8389
 
8368
8390
  def new_xy_list_for_box_style(self, xyxy=''):
8369
8391
  """
@@ -10785,10 +10807,9 @@ class xy_excel:
10785
10807
  self.xlapp.Workbooks(input_filename).Activate()
10786
10808
  self.xlapp.WindowState = win32com.client.constants.xlMaximized
10787
10809
 
10788
- def select_xline(self, sheet_name, x_list):
10810
+ def select_xline_for_sheet(self, sheet_name, x_list):
10789
10811
  """
10790
10812
  하나의 가로줄을 선택하는 것
10791
-
10792
10813
  """
10793
10814
  sheet = self.check_sheet_name(sheet_name)
10794
10815
  if isinstance(x_list, int):
@@ -10798,6 +10819,12 @@ class xy_excel:
10798
10819
  changed_address = str(start) + ":" + str(start)
10799
10820
  sheet.Rows(changed_address).Select()
10800
10821
 
10822
+ def select_xline(self, sheet_name, x_list):
10823
+ """
10824
+ 하나의 가로줄을 선택하는 것
10825
+ """
10826
+ self.select_xline_for_sheet(sheet_name, x_list)
10827
+
10801
10828
  def select_xxline(self, sheet_name, xx_list):
10802
10829
  sheet = self.check_sheet_name(sheet_name)
10803
10830
  start = self.change_char_to_num(xx_list[0])
@@ -10810,7 +10837,7 @@ class xy_excel:
10810
10837
  rng.Select()
10811
10838
  return [x1, y1, x2, y2]
10812
10839
 
10813
- def select_yline(self, sheet_name, y_list):
10840
+ def select_yline_for_sheet(self, sheet_name, y_list):
10814
10841
  """
10815
10842
  하나의 세로열을 선택하는 것
10816
10843
  """
@@ -10822,6 +10849,12 @@ class xy_excel:
10822
10849
  changed_address = str(start) + ":" + str(start)
10823
10850
  sheet.Columns(changed_address).Select()
10824
10851
 
10852
+ def select_yline(self, sheet_name, y_list):
10853
+ """
10854
+ 하나의 세로열을 선택하는 것
10855
+ """
10856
+ self.select_yline_for_sheet(sheet_name, y_list)
10857
+
10825
10858
  def select_yyline(self, sheet_name, yy_list):
10826
10859
  sheet = self.check_sheet_name(sheet_name)
10827
10860
  start = self.change_num_to_char(yy_list[0])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xython
3
- Version: 4.3.5
3
+ Version: 4.3.6
4
4
  Summary: xython package
5
5
  Author-email: "SJ.Park" <sjpkorea@naver.com>
6
6
  License: MIT
@@ -17,6 +17,10 @@ Requires-Dist: screeninfo
17
17
  Requires-Dist: pywinauto
18
18
  Requires-Dist: psutil
19
19
 
20
+ # 4.3.6을 기준으로 각 모듈이름을 변경함 (2026-05-10)
21
+ > - 각 모듈의 객체이름은 xy를 붙여서 사용 (예 : xyexcel)<br>
22
+ > - xy_edge를 추가함 : Drissionpage를 사용함<br>
23
+ > - 전체적으로 이름을 변경<br>
20
24
 
21
25
  # 4.0.0을 기준으로 각 모듈이름을 변경함 (2025-03-26)
22
26
  > - 쉽게 : **xy_** 접두어로 모든 모듈이름을 변경<br>
@@ -78,6 +82,8 @@ It can handle for Excel, Hwp, Word, Outlook, Color, Etc by xython**
78
82
  | 12 | xy_list | New List (start from 1) (**for common use**) |
79
83
  | 13 | xy_util | utilities (**for common use**) |
80
84
  | 14 | xy_auto | for Keyboard & Mouse control (**for common use**) |
85
+ | 15 | xy_edge | for web control |
86
+ | 16 | xy_chrome | for web control |
81
87
 
82
88
 
83
89
  ## xython 각 모듈의 간략한 설명
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes