Hướng dẫn javascript run excel macro - javascript chạy macro excel
Có một lớp khác biệt thực sự thú vị do Google lưu trữ ở đây: http://code.google.com/p/google-diff-match-patch/ Tôi đã sử dụng nó trước đây trên một số trang web, nhưng bây giờ tôi cần sử dụng nó trong macro Excel để so sánh văn bản giữa hai ô. Tuy nhiên, nó chỉ có sẵn trong JavaScript, Python, Java và C ++ chứ không phải VBA. Người dùng của tôi bị giới hạn trong Excel 2003, vì vậy giải pháp .NET thuần túy sẽ không hoạt động. Việc dịch mã sang VBA theo cách thủ công sẽ mất quá nhiều thời gian và gây khó khăn cho việc nâng cấp. Một tùy chọn mà tôi đã xem xét là biên dịch mã nguồn JavaScript hoặc Java bằng trình biên dịch .NET (JScript.NET hoặc J #), sử dụng Reflector để xuất ra dưới dạng VB.NET, sau đó cuối cùng hạ cấp mã VB.NET theo cách thủ công xuống VBA, mang lại cho tôi sự thuần khiết Giải pháp VBA. Sau khi gặp sự cố khi biên dịch nó với bất kỳ trình biên dịch .NET nào, tôi đã bỏ qua đường dẫn này. Giả sử tôi có thể có một thư viện .NET đang hoạt động, tôi cũng có thể sử dụng ExcelDna ( http://www.codeplex.com/exceldna ), một bổ trợ Excel mã nguồn mở để làm cho việc tích hợp mã .NET dễ dàng hơn. Ý tưởng cuối cùng của tôi là lưu trữ một đối tượng Internet Explorer, gửi cho nó nguồn JavaScript và gọi nó. Ngay cả khi tôi làm việc này, tôi đoán là nó sẽ rất chậm chạp và lộn xộn. CẬP NHẬT: Đã tìm thấy giải pháp! Tôi đã sử dụng phương pháp WSC được mô tả bên dưới bởi câu trả lời được chấp nhận. Tôi đã phải thay đổi mã WSC một chút để xóa các khác biệt và trả lại cho tôi một dãy mảng tương thích với VBA:
Tôi đã đăng ký WSC và nó hoạt động tốt. Mã trong VBA để gọi nó như sau:
(Tôi đã cố gắng giữ một objWMIService và objDiff toàn cầu duy nhất xung quanh để tôi không phải tạo / hủy chúng cho mỗi ô, nhưng nó dường như không tạo ra sự khác biệt về hiệu suất.) Sau đó tôi đã viết macro chính của mình. Nó có ba tham số: một phạm vi (một cột) giá trị ban đầu, một phạm vi giá trị mới và một phạm vi mà sự khác biệt sẽ kết xuất kết quả. Tất cả đều được giả định là có cùng một số hàng, tôi không có bất kỳ quá trình kiểm tra lỗi nghiêm trọng nào đang diễn ra ở đây.
Ba dòng tiếp theo này giúp tăng tốc cập nhật mà không làm hỏng chế độ tính toán ưa thích của người dùng sau này:
Xóa các khác biệt trước đó, nếu có, là quan trọng:
Thử nghiệm này là một lối tắt trực quan cho người dùng của tôi nên rất rõ ràng khi không có thay đổi nào:
Kết hợp tất cả văn bản với nhau dưới dạng giá trị ô delta, cho dù văn bản giống hệt nhau, được chèn hay bị xóa:
Bạn phải đặt giá trị trước khi bắt đầu định dạng:
Đây là mã diễn giải sự khác biệt và định dạng ô delta:
Có một số cơ hội để tối ưu hóa, nhưng cho đến nay nó vẫn hoạt động tốt. Cảm ơn mọi người đã giúp đỡ! 21 hữu ích 2 bình luận 50k xem chia sẻ 2 bình luận 50k xem chia sẻ |