Chào bạn
hudu2404,
VSTO (Visual Studio Tools for Office) là bộ công cụ lập trình cho những người phát triển sử dụng ngôn ngữ C#, VB.NET mở rộng thêm các tính năng cho bộ Microsoft Office.
Vấn đề như
PhanTuHuong có đề cập nó liên quan đến việc tương thích và các phiên bản của VSTO như sau:
Đây cũng là vấn đề tôi quan tâm. Làm sao khắc phục được nhược điểm của VBA nhưng lại tận dụng thế mạnh của các ngôn ngữ .NET hoặc các ngôn ngữ khác?
Theo tôi thì có các giải pháp sau:
1. Sử dụng các công cụ/thành phần miễn phí tương ứng với các ngôn ngữ.
_ Chẳng hạn
AutoIt (như có lần tôi đã giới thiệu). Link:
http://www.autoitscript.com/site/. Nếu chịu khó "ngâm cứu" thì cũng làm được các công việc như VBA. Ngoài ra AutoIt còn có thể giúp ích trong công việc nhập liệu tự động của bạn. Ví dụ: có thể dùng AutoIt trợ giúp cho công việc chỉnh sửa (đơn giản như chỉnh sửa tên theo mã hàng...) có thể tự động. Chỉ cần 60' = 2 người trong 2 ngày làm việc.
_ Sử dụng Python: Link:
http://pythonhosted.org/openpyxl/
2. Sử dụng các công cụ/controls/components trên thị trường:
Để tìm kiếm các bạn có thể vào trang sau:
http://www.componentsource.com
Hầu hết tất cả các components cho .NET đều có component để làm việc với Excel.
Giá trung bình khoảng
1,400 USD
_
Spreadsheet của ComponentOne:
http://www.componentone.com/SuperProducts/SpreadStudio/
(Tôi đã có đưa lên diễn đàn công cụ trợ giúp tính giá thành dựa trên control này). Cách lập trình phải học lại, nó khác nhiều so với cách lập trình với VBA. Tốc độ load/Save tập tin chậm (đây là vấn đề tại sao tôi bỏ Spreadsheet cho tới bây giờ). Có nhiều chức năng/control hơn trong Excel, giúp cho làm việc với CSDL hoặc hạn chế việc nhập liệu sai của người dùng rất tốt.
(Một chú ý là component này được viết bởi các coder của Việt Nam ở Hà Nội)
_
Spreadsheetgear:
http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx
Cách lập trình sẽ rất gần gũi với những người dùng VBA.
Ví dụ:
về lấy một DataSet từ một vùng được đặt tên trong Excel
[GPECODE=csharp]
// Tạo một từ một tập tin Excel
IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook("myfile.xls");
// Lấy DataSet từ một vùng được đặt tên trong Excel
DataSet dataSet = workbook.GetDataSet("mydefinedname",
SpreadsheetGear.Data.GetDataFlags.FormattedText);
[/GPECODE]
Ví dụ:
thêm một worksheet vào workbook hiện tại, đặt lại tên và thêm vào công thức
[GPECODE=csharp]
// Tạo một workbook.
IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
// Tạo một worksheet mới, đặt tên và thêm công thức vào
IWorksheet worksheet = workbook.Worksheets[0];
worksheet.Name = "MyFirstSheet";
worksheet.Cells["A1"].Value = 123.456;
// Thêm một worksheet thứ hai, đặt lại tên và thêm công thức vào
worksheet = workbook.Worksheets.Add();
worksheet.Name = "MySecondSheet";
worksheet.Cells["A1"].Formula = "=MyFirstSheet!A1 * 2";
[/GPECODE]
Tốc độ của SpreadsheetGear khi Load/Save tốt hơn nhiều so với các component khác trên thị trường. Tôi đang sử dụng component này.
Với việc sử dụng component này việc học viết code sẽ được dễ dàng hơn nhiều (nếu đã biết VBA). Bảo mật code thì không lo như khi viết với VBA. Tận dụng được tất cả các component trên nền .NET.
Một điều quan trọng là thế mạnh của bạn là gì. Bạn đừng quan tâm VBA/VSTO/Component. Bạn hãy sử dụng những công cụ nào mà bạn có thể phát triển nhanh các ứng dụng/công cụ để sử dụng vào mục đích công việc của mình. Như vậy sẽ tốt hơn cho công việc hiện tại của mình.
Vài dòng chia sẻ cùng bạn.
Lê Văn Duyệt