[ Python và ứng dụng ] Lập trình thư viện cho VBA bằng Python

Liên hệ QC

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
14,383
Được thích
19,367
Mình đọc tiêu đề là đã thấy hấp dẫn rồi á. :)

Mình có tìm hiểu qua vụ này thì thấy có vẻ rất ít thông tin, có thể Python vốn là mã nguồn mở, hoặc có thể đã dùng Python rồi thì không mấy ai để ý tới VBA nữa.
Đã có một số chương trình tích hợp Python với Excel, VBA nhưng đều cần cài đặt Python mới chạy được.

Mình vọc một hồi (hồi khá lâu...) ra cách tạo thư viện cho VBA bằng Python mà không khi phân phối không cần cài đặt Python trên máy tính sử dụng thư viện.
Đại khái một số thông tin như thế này:
* Đầu tiên, được gọi là "thư viện" vì không cần cài đặt Python trên máy tính sử dụng chúng.
* Bảo mật: tương đương Windows DLL.
Tìm hiểu qua thông tin thấy nó cũng là mã máy gì gì đó.
* Tốc độ: tùy vào khả năng viết code. Về cơ bản nó là Python mà.

Mình vọc hồi khá lâu vì vụ bảo mật kia. Hình như chưa có ai làm, hoặc không có gì đáng quan tâm, hoặc ai đó làm rồi mà họ không đăng lên internet nên mình chưa tìm thấy.

Mình làm một ví dụ, coi như động lực để bạn nào có hứng thú thì tự tìm hiểu nha. Tự khám phá ra mới hay mà.

Bài ví dụ: Lấy dữ liệu tỷ giá ngoại tệ từ trang web Vietcombank theo khoảng thời gian.
(Tiếp ví dụ ở bài https://www.giaiphapexcel.com/diendan/threads/lập-trình-trong-power-query-và-các-ví-dụ.157214/)

Chạy thử lấy dữ liệu 01 tháng trên máy tính của mình hết cỡ 1.8 giây.
Ai biết code Delphi thử làm bài ví dụ này xem ra sao nhỉ.

Các bạn tải file về nhớ đọc và làm theo hướng dẫn nhé. >> Tải File.

1633165995368.png
 
Lần chỉnh sửa cuối:
* Bảo mật: tương đương Windows DLL.
Tìm hiểu qua thông tin thấy nó cũng là mã máy gì gì đó.
Mình thì không biết gì về py nhưng dạo 1 dòng thấy người ta ghi như vậy không biết phải không @befaint
"
Biến code Python thành file exe: Đây là cách rất hữu hiệu nếu bạn muốn chạy chương trình của bạn ở khắp các máy tính mà không cần phải cài Python vào máy rồi thông dịch (biên dịch thành bytecode) nó, chỉ cần chạy cái file exe là xong, chẳng cần cái gì. Ngoài ra, đây cũng là cách để chống dịch ngược code Python......
Cho dù dùng cách gì đi chăng nữa thì Python vẫn là một ngôn ngữ dễ bị dịch ngược hơn C, C++ (Bản thân Python được xây dựng dựa trên C, C++). Những cách trên cũng chỉ có hiệu quả với mấy gã tay mơ thôi, ........
"
Code msgbox của bạn chạy bình thường trên máy mình
 
Upvote 0
Tóm lại diễn đàn mình vẫn hiểu khái niệm bảo mật đơn giản, không đúng nghĩa bảo mật

bảo mật đâu phải bảo vệ mấy cái code ta viết ra? đó là che giấu code mà thôi.
Còn đúng nghĩa bảo mật là khác, giờ người ta còn opensource luôn - mà đọc được code hết và làm sai copyright (bản quyền) thì thiếu gì cách đâu phải xem code.
 
Upvote 0
Mình thì không biết gì về py nhưng dạo 1 dòng thấy người ta ghi như vậy không biết phải không @befaint
"
Biến code Python thành file exe: Đây là cách rất hữu hiệu nếu bạn muốn chạy chương trình của bạn ở khắp các máy tính mà không cần phải cài Python vào máy rồi thông dịch (biên dịch thành bytecode) nó, chỉ cần chạy cái file exe là xong, chẳng cần cái gì. Ngoài ra, đây cũng là cách để chống dịch ngược code Python......
Cho dù dùng cách gì đi chăng nữa thì Python vẫn là một ngôn ngữ dễ bị dịch ngược hơn C, C++ (Bản thân Python được xây dựng dựa trên C, C++). Những cách trên cũng chỉ có hiệu quả với mấy gã tay mơ thôi, ........
"
Code msgbox của bạn chạy bình thường trên máy mình
Cái *.exe thông thường thì đúng là vậy. Nhưng *.pyd lại khác hoàn toàn. Không dịch ngược lại thành Python code được, chỉ có thể dùng RE mà thôi.
Bài #1 khúc bảo mật mình có để link rồi đó, hoặc có thể tìm thêm thông tin trên stackoverflow... cũng có nói nhiều về cái này. Nó cũng như dll dịch ra mã máy, có thể có khả năng RE được nhưng chi phí, và thời gian thường là quá lớn so với tự viết code từ đầu; và những người có khả năng RE được thì họ sẽ viết mới luôn.
 
Upvote 0
Tóm lại diễn đàn mình vẫn hiểu khái niệm bảo mật đơn giản, không đúng nghĩa bảo mật

bảo mật đâu phải bảo vệ mấy cái code ta viết ra? đó là che giấu code mà thôi.
Còn đúng nghĩa bảo mật là khác, giờ người ta còn opensource luôn - mà đọc được code hết và làm sai copyright (bản quyền) thì thiếu gì cách đâu phải xem code.
.
Ở bài #1, em nêu về bảo mật cũng chỉ là phần nhỏ thôi. Chắc mọi người quan tâm quá nội dung đó nên cảm giác đó là ý chính. :)
Còn em thì tập trung vào những ưu điểm đã nêu ở bài #13.
.
Nếu nói thêm về phần bảo mật thì em thấy đó (những quan tâm ở diễn đàn về che giấu code) là hoàn toàn hợp lý (cả về thực trạng, và mục đích).
Bảo mật có thể hiểu rất đơn giản và cơ bản là bảo vệ, làm bí mật đi, che giấu cái gì đó.
Mất gà rồi mới lo làm chuồng thì không kịp nữa rồi. Ở môi trường mà việc thực hiện pháp luật chưa nghiêm, hiểu biết pháp luật chưa đầy đủ, và/ hoặc có thể mức độ răn đe của luật chưa cao thì tự bản thân cần có, cần trang bị những biện pháp tự bảo vệ lấy sản phẩm của mình.

Em ví dụ mới đây, ở chủ đề về việc in ấn, có nảy sinh vấn đề loại bỏ thông tin được tác giả chèn ở đầu/ cuối mỗi trang của tập tin PDF, đó là việc vi phạm bản quyền...
Rồi có việc khác là thành viên phát hiện việc vi phạm bản quyền (tự ý chèn link quảng cáo vào tập tin PDF của người khác), em kêu tố giác tội phạm mà họ còn không hiểu thế nào là tố giác tội phạm (Thời điểm hiện tại, Nhà nước ta đã tiếp nhận những thông tin tố giác, thông tin phản ánh trên nền tảng mạng xã hội làm căn cứ điều tra, xử lý tội phạm rồi, chưa cần đến mức phải viết đơn tố giác + kèm bằng chứng đâu).

Việc mọi người tìm cách che giấu code cũng như mỗi nhà làm khóa cổng, khóa cửa đó anh. Tự bảo vệ trước khi cần tới pháp luật (bản quyền), tự tạo ra rào chắn ngăn cản xâm phạm trái phép.
 
Upvote 0
Thông dịch mà đâu phải mã máy
.
Không phải vậy anh.
Python là ngôn ngữ lập trình, như anh viết Pascal trên Delphi đó.
Anh viết xong chương trình trên Delphi rồi mới biên dịch thành phần mềm, thành tập tin *.dll thì mới có đoạn gọi là mã máy gì hay không, còn trước khúc biên dịch thì nó là một ngôn ngữ lập trình thôi.
Cái *.pyd cũng như vậy.
Ban đầu nó là Python code, kế đó được chuyển (convert) thành C code, tiếp đó được biên dịch thành 'Dynamic link librarie' ở dạng *.pyd, vì vậy nó mới tương đương cái *.dll của anh. Chứ không phải Python code bình thường đâu.
 
Upvote 0
chạy đó ... kéo UAC xuống mới Ok ... còn tại sao thì ko biết

1633402620090.png
 
Upvote 0
.
Không phải vậy anh.
Python là ngôn ngữ lập trình, như anh viết Pascal trên Delphi đó.
Anh viết xong chương trình trên Delphi rồi mới biên dịch thành phần mềm, thành tập tin *.dll thì mới có đoạn gọi là mã máy gì hay không, còn trước khúc biên dịch thì nó là một ngôn ngữ lập trình thôi.
Cái *.pyd cũng như vậy.
Ban đầu nó là Python code, kế đó được chuyển (convert) thành C code, tiếp đó được biên dịch thành 'Dynamic link librarie' ở dạng *.pyd, vì vậy nó mới tương đương cái *.dll của anh. Chứ không phải Python code bình thường đâu.
thấy vậy nè còn sao thì ko có biết
1/ Khi Python Build EXE thì nó gom hết tất cả các File vào trong đó ... đoán thôi khi chạy nó giải nén ra đâu đó hay chạy ảo hóa gì đó

2/ Thực tế là họ giải nén ( Unpack ) nó ra rất nhiều file trong EXE do python viết

3/ còn sao thì chịu ... nhưng thế giới họ keo đó là Python thông dịch chứ ko phải biên dịch như wiki có mô ta chi tiết úp bài trước
 
Upvote 0
thấy vậy nè còn sao thì ko có biết
1/ Khi Python Build EXE thì nó gom hết tất cả các File vào trong đó ... đoán thôi khi chạy nó giải nén ra đâu đó hay chạy ảo hóa gì đó

2/ Thực tế là họ giải nén ( Unpack ) nó ra rất nhiều file trong EXE do python viết
Khi đóng gói *.py thành *.exe thì sẽ đóng gói toàn bộ thư viện cần thiết và kèm theo Bootloader để khởi chạy Python như khi cài Python hoàn chỉnh.
Như em nói ở bài #13 đó, thư viện nhưng nó lại là Python chạy độc lập, vì vậy nó rất là hay luôn.

3/ còn sao thì chịu ... nhưng thế giới họ keo đó là Python thông dịch chứ ko phải biên dịch như wiki có mô ta chi tiết úp bài trước
Với *.py thì chính là như vậy, nhưng *.pyd lại khác.
 
Upvote 0
Khi đóng gói *.py thành *.exe thì sẽ đóng gói toàn bộ thư viện cần thiết và kèm theo Bootloader để khởi chạy Python như khi cài Python hoàn chỉnh.
Như em nói ở bài #13 đó, thư viện nhưng nó lại là Python chạy độc lập, vì vậy nó rất là hay luôn.


Với *.py thì chính là như vậy, nhưng *.pyd lại khác.
chính xác là nó đấy kiểu như C# có một mớ File đi theo ... còn Python nó khôn hơn gom 1 mớ Files nén vào EXE ... mấy tay Unpack nó giải nén ra hết

tróng đó có 1 số file là mã nhị phân ko dịch được xong từ thư viện của nó laod cái đó

Minh họa hình sau có 1 File EXE Build = Python giải nén ( Tạm keo thế ) ra quá nhiều File = 42 file trong 1 file EXE đấy

1633403743397.png
 
Upvote 0
chính xác là nó đấy kiểu như C# có một mớ File đi theo ... còn Python nó khôn hơn gom 1 mớ Files nén vào EXE ... mấy tay Unpack nó giải nén ra hết

Ruột *.pyd là C code đấy anh.

1633403855489.png

Cái *.exe chỉ đó vai trò đóng gói và chạy ứng dụng thôi, giải nén ra bình thường mà anh, nhưng rồi chỉ ngắm thôi.
 
Upvote 0
Ruột *.pyd là C code đấy anh.

View attachment 267194

Cái *.exe chỉ đó vai trò đóng gói và chạy ứng dụng thôi, giải nén ra bình thường mà anh, nhưng rồi chỉ ngắm thôi.
biết mà nhưng nói gì thì nói nó là thông dịch tốc độ sẻ thua biên dịch cùng 1 vấn đề và thuật toán như nhau
Bài đã được tự động gộp:

tối qua đọc nguyên đêm Ptython rồi ... và kỷ nguyên 4.0 dân lập trình nên biết vài ngôn ngữ khác nhau
Cái nào tốt mặt nào thì sử dụng mặt đó ... còn dở thì né nó ra

Py hay là cộng đồng mở nhiều thư viện họ viết cho hết còn ta chỉ việc ... nên học nó nhanh là thế
 
Lần chỉnh sửa cuối:
Upvote 0
Mới thử lại file bài số 1 chạy tốt đấy ... cứ thế phát triển là ok

Nhưng UAC kéo xuống mới chạy ok ... còn tại sao thì chịu

1633405861996.png
 
Upvote 0
Ruột *.pyd là C code đấy anh.

View attachment 267194

Cái *.exe chỉ đó vai trò đóng gói và chạy ứng dụng thôi, giải nén ra bình thường mà anh, nhưng rồi chỉ ngắm thôi.
Cái này mình nghĩ là hên sui, nhưng mà vậy là cũng được rồi, nếu được thì bạn nên làm clip hướng dẫn để những người muốn tìm hiểu có được chúc thông tin để tìm hiểu
 
Upvote 0
Code két cái sự khởi đầu và khai phá viết ra nó rất vả vất .... Python kiểu này là hàng độc lần đầu xuất hiện tại GPE này đấy -0-0-0- ===\.

Cố giắng bảo mật tốt chút viết các Thư viện hàm mà sử dụng cho Excel và trưng bày sản phẩm là OK rồi

Xin chúc mừng hàng độc lần đầu ra công chúng ... GPE
 
Upvote 0
Code két cái sự khởi đầu và khai phá viết ra nó rất vả vất .... Python kiểu này là hàng độc lần đầu xuất hiện tại GPE này đấy -0-0-0- ===\.

Cố giắng bảo mật tốt chút viết các Thư viện hàm mà sử dụng cho Excel và trưng bày sản phẩm là OK rồi

Xin chúc mừng hàng độc lần đầu ra công chúng ... GPE
Em thấy anh @excel_lv1.5 có viết Python, 1 bài giống giống bài này, lấy dữ liệu cảng vụ hàng hải (bài #15)


Em có định làm bằng Power Query, nhưng không biết tham số ngày họ dấu ở đâu, nên chưa có giải pháp.
 
Upvote 0
.........................
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom