Bạn có thể viết công thức Excel bằng Python không?

Để ghi đè các đầu vào mặc định được xác định bởi tệp excel hoặc để áp đặt một số giá trị cho một ô cụ thể

>>> xl_model.calculate(
..     inputs={
..         "'[excel.xlsx]'!INPUT_A": 3,  # To overwrite the default value.
..         "'[excel.xlsx]DATA'!B3": 1  # To impose a value to B3 cell.
..     },
..     outputs=[
..        "'[excel.xlsx]DATA'!C2", "'[excel.xlsx]DATA'!C4"
..     ] # To define the outputs that you want to calculate.
.. )
Solution([("'[excel.xlsx]'!INPUT_A", ('[excel.xlsx]DATA'!A2)=[[3]]),
          ("'[excel.xlsx]DATA'!B3", ('[excel.xlsx]DATA'!B3)=[[1]]),
          ("'[excel.xlsx]DATA'!A2", ('[excel.xlsx]DATA'!A2)=[[3]]),
          ("'[excel.xlsx]DATA'!A3", ('[excel.xlsx]DATA'!A3)=[[6]]),
          ("'[excel.xlsx]DATA'!D2", ('[excel.xlsx]DATA'!D2)=[[1]]),
          ("'[excel.xlsx]'!INPUT_B", ('[excel.xlsx]DATA'!A3)=[[6]]),
          ("'[excel.xlsx]DATA'!B2", ('[excel.xlsx]DATA'!B2)=[[9.0]]),
          ("'[excel.xlsx]DATA'!D3", ('[excel.xlsx]DATA'!D3)=[[2.0]]),
          ("'[excel.xlsx]DATA'!C2", ('[excel.xlsx]DATA'!C2)=[[10.0]]),
          ("'[excel.xlsx]DATA'!D4", ('[excel.xlsx]DATA'!D4)=[[3.0]]),
          ("'[excel.xlsx]DATA'!C4", ('[excel.xlsx]DATA'!C4)=[[4.0]])])

Để xây dựng một hàm duy nhất từ ​​mô hình excel với đầu vào và đầu ra cố định, bạn có thể sử dụng phương thức biên dịch của ExcelModel trả về một DispatchPipe. Đây là chức năng trong đó đầu vào và đầu ra được xác định bởi id nút dữ liệu (i. e. , tham chiếu ô)

>>> func = xl_model.compile(
..     inputs=[
..         "'[excel.xlsx]'!INPUT_A",  # First argument of the function.
..         "'[excel.xlsx]DATA'!B3"   # Second argument of the function.
..     ], # To define function inputs.
..     outputs=[
..         "'[excel.xlsx]DATA'!C2", "'[excel.xlsx]DATA'!C4"
..     ] # To define function outputs.
.. )
>>> func

>>> [v.value[0, 0] for v in func(3, 1)]  # To retrieve the data.
[10.0, 4.0]
>>> func.plot(view=False)  # Set view=True to plot in the default browser.
SiteMap([(ExcelModel, SiteMap(...))])

[biểu đồ]

Ngoài ra, để tải một phần mô hình excel từ các ô đầu ra, bạn có thể sử dụng phương thức from_ranges của ExcelModel

>>> xl = formulas.ExcelModel().from_ranges(
..     "'[%s]DATA'!C2:D2" % fpath,  # Output range.
..     "'[%s]DATA'!B4" % fpath,  # Output cell.
.. )
>>> dsp = xl.dsp
>>> sorted(dsp.data_nodes)
["'[excel.xlsx]'!INPUT_A",
 "'[excel.xlsx]'!INPUT_B",
 "'[excel.xlsx]'!INPUT_C",
 "'[excel.xlsx]DATA'!A2",
 "'[excel.xlsx]DATA'!A3",
 "'[excel.xlsx]DATA'!A3:A4",
 "'[excel.xlsx]DATA'!A4",
 "'[excel.xlsx]DATA'!B2",
 "'[excel.xlsx]DATA'!B3",
 "'[excel.xlsx]DATA'!B4",
 "'[excel.xlsx]DATA'!C2",
 "'[excel.xlsx]DATA'!D2"]

[biểu đồ]

Xuất/nhập JSON

ExcelModel có thể được xuất/nhập sang/từ định dạng JSON có thể đọc được. Lý do của chức năng này là có định dạng có thể dễ dàng duy trì (e. g. sử dụng các chương trình kiểm soát phiên bản như git). Làm theo một ví dụ về cách xuất/nhập vào/từ JSON một ExcelModel

Chúng ta có thể viết cả dữ liệu thô và công thức vào tệp Excel bằng Python. Thư viện openpyxl cung cấp cho chúng tôi rất nhiều tính linh hoạt để tạo tệp Excel

Bạn có thể viết công thức Excel bằng Python không?
ghi-to-excel-python

Điều hướng tệp Excel bằng Python

Chúng tôi đã thảo luận về cách truy cập Trang tính và Ô trong hướng dẫn này

Trước tiên hãy tạo một sổ làm việc Excel bằng openpyxl. Lưu ý một Workbook luôn được tạo với ít nhất một Worksheet, wb. active trả về Worksheet đầu tiên bên trong Workbook

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

Trong Excel, hai cách phổ biến để tham chiếu vị trí ô là 1) ký hiệu hàng cột và 2) ký hiệu (hàng, col). Ví dụ: bên dưới đề cập đến cùng một ô tại B3

ws['C2']


ws.cell(2,3)

Mặc dù con người dễ dàng đọc ký hiệu hàng cột như “C2”, nhưng khi chúng ta tương tác với các ô theo chương trình, việc sử dụng ký hiệu (hàng, col) sẽ dễ dàng hơn vì chúng chỉ là chỉ số/số. Điều duy nhất cần chú ý là chỉ số hàng và cột bắt đầu từ 1 thay vì 0

Phương pháp tiện ích tọa độ di động

openpyxl cung cấp một số phương thức tiện ích tiện dụng để chuyển đổi tọa độ. Từ cột-hàng đến (hàng, col) và ngược lại

from openpyxl.utils.cell import (cols_from_range,
                                 rows_from_range,
                                 column_index_from_string,
                                 get_column_letter, 
                                 coordinate_to_tuple)

column_index_from_string("A")
1

get_column_letter(26)
'Z'

coordinate_to_tuple('B2')
(2, 2)

c = (2,3)
get_column_letter(c[1]) + str(c[0])
'C2'

Chúng tôi cũng có thể nhận được tất cả các địa chỉ ô riêng lẻ từ một phạm vi. Lưu ý sự khác biệt dưới đây

  • cols_from_range() tạo mỗi lần một cột
  • rows_from_range() tạo ra một hàng tại một thời điểm
for c in cols_from_range("A1:F6"):
    print(c)
('A1', 'A2', 'A3', 'A4', 'A5', 'A6')
('B1', 'B2', 'B3', 'B4', 'B5', 'B6')
('C1', 'C2', 'C3', 'C4', 'C5', 'C6')
('D1', 'D2', 'D3', 'D4', 'D5', 'D6')
('E1', 'E2', 'E3', 'E4', 'E5', 'E6')
('F1', 'F2', 'F3', 'F4', 'F5', 'F6')

for c in rows_from_range("A1:F6"):
    print(c)
('A1', 'B1', 'C1', 'D1', 'E1', 'F1')
('A2', 'B2', 'C2', 'D2', 'E2', 'F2')
('A3', 'B3', 'C3', 'D3', 'E3', 'F3')
('A4', 'B4', 'C4', 'D4', 'E4', 'F4')
('A5', 'B5', 'C5', 'D5', 'E5', 'F5')
('A6', 'B6', 'C6', 'D6', 'E6', 'F6')

Viết giá trị vào Excel bằng Python

Có hai cách để ghi giá trị vào một ô. Một là bằng cách đặt ô. thuộc tính giá trị, cách khác là bằng cách gọi phương thức ô (hàng, col, giá trị). Lưu ý bên dưới sự khác biệt tinh tế giữa các dòng #2 và #3

ws['C2'].value = 'Pi' 
ws.cell(2,4,value = 'Radius') #cell D2
ws.cell(2,5).value = 'Area'   #cell E2

Ký hiệu (row, col) giúp việc lặp qua các ô trở nên dễ dàng

________số 8

Chúng ta cũng có thể sử dụng ô. phương thức offset(row, col) để trả về vị trí ô tương ứng với ô đang hoạt động

curr_cell = ws['D8']
for i in range(0,5):
    curr_cell.offset(row=i, column = 0).value = i+6

Viết công thức cho Excel bằng Python

Viết công thức dễ như viết giá trị vào Excel. Tất cả những gì chúng ta cần là coi các công thức Excel là các giá trị Chuỗi và gán chúng cho. thuộc tính giá trị. Bên trong giá trị Chuỗi Python, chúng tôi muốn bắt đầu bằng dấu bằng = vì đó là cách chúng tôi bắt đầu một công thức Excel

>>> func = xl_model.compile(
..     inputs=[
..         "'[excel.xlsx]'!INPUT_A",  # First argument of the function.
..         "'[excel.xlsx]DATA'!B3"   # Second argument of the function.
..     ], # To define function inputs.
..     outputs=[
..         "'[excel.xlsx]DATA'!C2", "'[excel.xlsx]DATA'!C4"
..     ] # To define function outputs.
.. )
>>> func

>>> [v.value[0, 0] for v in func(3, 1)]  # To retrieve the data.
[10.0, 4.0]
>>> func.plot(view=False)  # Set view=True to plot in the default browser.
SiteMap([(ExcelModel, SiteMap(...))])
0

Bạn muốn sử dụng tham chiếu tuyệt đối bằng cách “sửa chữa” tọa độ ô trong công thức của mình? . Chúng ta có thể lấy tọa độ từ một đối tượng Ô từ. thuộc tính tọa độ trả về giá trị Chuỗi biểu thị địa chỉ ô. Tất nhiên, trong ví dụ này, chúng tôi đã biết đó là “C3” vì đó là những gì chúng tôi đã nhập vào mã. Điều này là để chỉ ra cách lấy tọa độ của một ô theo chương trình

>>> func = xl_model.compile(
..     inputs=[
..         "'[excel.xlsx]'!INPUT_A",  # First argument of the function.
..         "'[excel.xlsx]DATA'!B3"   # Second argument of the function.
..     ], # To define function inputs.
..     outputs=[
..         "'[excel.xlsx]DATA'!C2", "'[excel.xlsx]DATA'!C4"
..     ] # To define function outputs.
.. )
>>> func

>>> [v.value[0, 0] for v in func(3, 1)]  # To retrieve the data.
[10.0, 4.0]
>>> func.plot(view=False)  # Set view=True to plot in the default browser.
SiteMap([(ExcelModel, SiteMap(...))])
1

Để tạo một tham chiếu tuyệt đối, chúng ta có thể sử dụng phương thức absolute_coordinate() trong mô-đun tiện ích. Về cơ bản, nó chỉ thêm các dấu $ để sửa một ô

>>> func = xl_model.compile(
..     inputs=[
..         "'[excel.xlsx]'!INPUT_A",  # First argument of the function.
..         "'[excel.xlsx]DATA'!B3"   # Second argument of the function.
..     ], # To define function inputs.
..     outputs=[
..         "'[excel.xlsx]DATA'!C2", "'[excel.xlsx]DATA'!C4"
..     ] # To define function outputs.
.. )
>>> func

>>> [v.value[0, 0] for v in func(3, 1)]  # To retrieve the data.
[10.0, 4.0]
>>> func.plot(view=False)  # Set view=True to plot in the default browser.
SiteMap([(ExcelModel, SiteMap(...))])
2

Hãy tính cột Diện tích bằng cách viết công thức Excel vào các ô, sau đó lưu file Excel vào đĩa

Tôi có thể sử dụng công thức Excel trong Python không?

formulas triển khai trình thông dịch cho các công thức Excel, giúp phân tích cú pháp và biên dịch các biểu thức công thức Excel . Hơn nữa, nó biên dịch sổ làm việc Excel thành python và thực thi mà không cần sử dụng máy chủ Excel COM. Do đó, Excel là không cần thiết.

Bạn có thể thao tác Excel với Python không?

Openpyxl là thư viện Python cung cấp nhiều phương thức khác nhau để tương tác với Tệp Excel bằng Python . Nó cho phép các hoạt động như đọc, viết, phép tính số học, vẽ đồ thị, v.v.

Python có tốt cho tự động hóa Excel không?

Nhìn chung, Tự động hóa Python Excel là một quy trình sáng tạo mà bạn có thể sử dụng để tạo báo cáo trực quan trên Python giống như cách bạn làm trên Excel một cách liền mạch. Organizations can leverage Python Excel Automation to leverage their business tasks according to their needs.