Tổng quan VSTO - Visual Studio Tools for Office

Liên hệ QC
Có một vài vấn đề khi sử dụng VSTO mong các bác giải thích dùm

- Khi sử dụng VSTO tạo Ribbon cho file Excel (Excel Workbook), trong quá trình sử dụng (ví dụ New file một vài lần) quay trở về cửa số file của mình, Ribbon mất tiêu không phục hồi lại được.

- Sau khi hoàn thành Project (ví dụ AddIn Excel), Public tạo bộ cài đặt, copy bộ cài đặt này sang máy khác (đã cài VSTO V3.0, .net famework 3.5), tiến hành cài đặt OK, xong khi khởi động Excel không thể load được file *.vsto (add-in Com) nhưng khi chuyển tất cả Form, Module của AddIn đó qua Excel Workbok, debug thành công, mở trực tiếp file Excel đó, save as thành *.xlam và copy toàn bộ thư mục Public (bao gồm cả Addin *.xlam vừa save as, chuyển sang máy khác sử dụng Addin đó một cách dễ dàng.

Bạn nên đưa tập tin đính kèm, như vậy các bạn khác mới có thể giúp bạn được.

Lê Văn Duyệt
 
Table 17: Reference differences between VBA and VSTO
VBA VSTO
ActiveSheet ThisWorkbook.Application.ActiveSheet
ActiveCell ThisWorkbook.Application.ActiveCell
Selection ThisWorkbook.Application.Selection

Trích Chương 3 sách :From VBA to VSTO Is Excel New Engine Right for You,trong chương này cũng có thêm nhiều bảng so sánh dạng như vậy
 

File đính kèm

  • 3 Structure of the Language VB_NET.rar
    216.2 KB · Đọc: 432
Em có cuốn From VBA to VSTO có bác nào cần em sẽ up lên(Sách tiếng Anh-Em kém tiếng anh nên không dịch nổi). Em thấy VSTO rất hay, nhưng em thử làm 1 file Add-in Excel 2003 (Dịch sang DLL) thì thấy nó chạy chậm hơn file xla-Không biết vì sao.

Mình đang tìm hiểu về VSTO nhưng khổ nỗi tìm tài liệu khó quá, bạn có thể gửi cho mình xin 1 bản được không. email của mình là tunghauhien@gmail.com. Thanks bạn nhé!
 
To : Bác Lê Văn Duyệt
Xin nhờ gợi ý đoạn code sau trong VSTO

Private Sub ThisWorkbook_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

Dim CDT1 As Microsoft.Office.Interop.Excel.Range
CDT1 = Sheets("data").range("CDT")
For Each cell In CDT1
If cell.Value <> "" Then
With Me.Sheets("DA").cmbListCDT.items
.Add(cell)
End With
End If
Next cell


End Sub

Trong đó "CDT" là vùng đặt tên ở Sheet "data"
Còn cmdListCDT nằm trong Sheet "DA"

Làm hoài không được, mong bác gợi ý vài dòng

Thank
 
Khi tạo một project mới cho Office trong VSTO 2005:

VSTO2005.png


Khi tạo một project mới cho Office trong VSTO 2008:

VSTO2008.png


Những cái mới so với phiên bản trước (từ version 1.0 lên 3.0)

VSTO4Office.png


Tôi mới test thử một vài chức năng, nhưng xem ra những cái hạn chế vẫn tồn tại trong phiên bản này.
Ví dụ như việc sử dụng hàm người dùng trong worksheet.

Lê Văn Duyệt
Xin cho hỏi là mình làm theo hướng dẫn nhưng khi chon New project thì cái cửa sổ nhận được như file ảnh chứ không như của bạn? Mình cài Visual 2008 bản Express. Phải chăng bản này không những cái đó. Vậy bạn nào có bản cài crack cho xin với???
 

File đính kèm

  • New project.jpg
    New project.jpg
    68.2 KB · Đọc: 154
Thầy có thể đăng thêm tài liệu về VSTO cho mọi người tham khảo được không ạh???
 
To: Lê Văn Duyệt.
Mình viết cái này chỉ để demo cho VSTO ạ.
To: PhanTuHuong
Tương lai theo mình nghĩ sẽ có 1 cái gọi là VSTA (đang phát triển), sẽ giống như VBA ạ.
VSTO cho phép kết nối với AutoCAD qua COM tương tự VBA anh Hướng ạ!

Sau hơn 10 năm thì với Autocad thì VSTA, với Office là VSTO.
Khi hệ điều hành phát triển thì framework không phải quá quan trọng nữa. Nhưng nói gì thì nói, VBA vẫn thuận lợi, dễ sử dụng hơn VB.NET.
Người dùng muốn sử dụng VSTO hay VSTA thì phải học VB.NET trước :)
 
Cài Framework 3.5 tốn chừng > 60 MB, trong khi đó các chương trình của mình chỉ khoảng 2 MB. Xem qua VSTO thích thật nhưng không hiểu khi nào mới hỗ trợ trong AutoCad như VBA?
Ngoài ra tạo liên kết giữa 2 môi trường Excel và AutoCad có thực hiện được bằng VSTO không?

Sau khi hăm hở với VSTO thì nhận ra 1 điều là AutoCAD.NET có nhiều đoạn code củ khoằm mà khó có thể kết nối từ Excel :(
 
Các a cho e hỏi đưa dữ liệu từ bảng Excel vào mảng C#, và đẩy dữ liệu từ mảng C# ra Sheet trong VSTO sao cho nhanh ạ
E cho 2 vòng lặp duyệt thì lâu ạ, nó khá chậm với dữ liệu lớn
 
Các a cho e hỏi đưa dữ liệu từ bảng Excel vào mảng C#, và đẩy dữ liệu từ mảng C# ra Sheet trong VSTO sao cho nhanh ạ
E cho 2 vòng lặp duyệt thì lâu ạ, nó khá chậm với dữ liệu lớn
phổ thông và cùng đường hết cách thì cả dùng Array duyệt 2 dòng For Hoặc bắt buộc phải cho vào 1 Array
còn không thì bỏ đi cho nhanh .... cứ cho 1 đống dữ liệu chạy For Xem ... ra pha cafe xong hóng code
 
phổ thông và cùng đường hết cách thì cả dùng Array duyệt 2 dòng For Hoặc bắt buộc phải cho vào 1 Array
còn không thì bỏ đi cho nhanh .... cứ cho 1 đống dữ liệu chạy For Xem ... ra pha cafe xong hóng code
Đưa dữ liệu từ Sheet vào Array và từ Array ra Sheet với Delphi thì sao a
nó có nhanh hơn VBA k ạ?
e test VSTO với VBA thì VBA nhanh hơn rồi
 
Đưa dữ liệu từ Sheet vào Array và từ Array ra Sheet với Delphi thì sao a
nó có nhanh hơn VBA k ạ?
e test VSTO với VBA thì VBA nhanh hơn rồi
cùng 1 cách viết như nhau chắc chắn Delphi chạy sẽ nhanh hơn nhiều

tôi đã từng thử trên VBA = ADODB CopyFromRecordset và trên Delphi y trang thế
thì kết quả thật kinh ngạc Delphi nhanh hơn rất nhiều

nếu thử thì hãy thử 1048570 x 300 cột là lòi ra hết ... còn tí ti không tính tiền
tại sao tôi nói vậy vì thấy đa số cho vài trăm dòng chạy xong so sánh thì thấy nó gần = nhau :D
 
Các a cho e hỏi đưa dữ liệu từ bảng Excel vào mảng C#, và đẩy dữ liệu từ mảng C# ra Sheet trong VSTO sao cho nhanh ạ
E cho 2 vòng lặp duyệt thì lâu ạ, nó khá chậm với dữ liệu lớn

Tôi cũng muốn tham khảo xem giải pháp nào tốt hơn cho việc đọc file Excel trong C#.
- Vấn đề cần hỏi thêm là bạn đang dùng thư viện nào để đọc file Excel? Bạn dùng COM interop (Microsoft.Office.Interop.Excel) để đọc, hay thư viện ExcelDataReader, ADO.Net...? Nếu dùng COM interop thì khỏi phải bàn về tốc độ rồi vì nó chậm nhất, dùng để xử lý các file chút chút thôi, rồi còn phải giải phóng nó chứ không nó treo Excel.
- Nếu dữ liệu lớn mà đọc hết vô Memory thì máy yếu yếu là mệt mỏi.
 
Tôi cũng muốn tham khảo xem giải pháp nào tốt hơn cho việc đọc file Excel trong C#.
- Vấn đề cần hỏi thêm là bạn đang dùng thư viện nào để đọc file Excel? Bạn dùng COM interop (Microsoft.Office.Interop.Excel) để đọc, hay thư viện ExcelDataReader, ADO.Net...? Nếu dùng COM interop thì khỏi phải bàn về tốc độ rồi vì nó chậm nhất, dùng để xử lý các file chút chút thôi, rồi còn phải giải phóng nó chứ không nó treo Excel.
- Nếu dữ liệu lớn mà đọc hết vô Memory thì máy yếu yếu là mệt mỏi.
a thường dùng cách nào để đưa data từ Sheet vào Array và trả ngược lại?
E dùng cách này và thấy nó chậm khi dữ liệu lớn - interop (Microsoft.Office.Interop.Excel)
hàm để nhận array:

public string[,] GetNewArrays(Excel.Worksheet ws, string Start_cell, string Right_Columns, int LastRow)
{
int row_top = ws.Range[Start_cell].Row;
int row_below = ws.Range[Right_Columns + LastRow].Row;

int col_left = ws.Range[Start_cell].Column;
int col_right = ws.Range[Right_Columns + LastRow].Column;

int row_arr = row_below - row_top + 1;
int col_arr = col_right - col_left + 1;

string[,] array_getvalue = new string[row_arr, col_arr];



for (long i = 0; i < row_arr; i++)
{
for (long j = 0; j < col_arr; j++)
{
//Dua sheet vao mang
if (ws.Cells[row_top + i, col_left + j].Value2 == null)
{
array_getvalue[i, j] = "";
continue;
}

array_getvalue[i, j] = ws.Cells[row_top + i, col_left + j].Value.ToString();
}
}

return array_getvalue;
}

Gọi hàm để sử dụng,
string[,] data_test1 = Globals.ThisAddIn.GetNewArrays(Sh1, "A1", "B",lastRow_B);
for (int i = 0; i < lastRow_B; i++)
{
for (int j = 0; j < 2; j++)
{
Sh1.Cells[i+1,j + 6].Value = data_test1[i,j];
}
}
//-------------------------------------------------------------------------------

E đang tìm cách khác hiệu quả và nhanh hơn, mn cho e tham khảo ý kiến
 
tôi đã từng thử trên VBA = ADODB CopyFromRecordset và trên Delphi y trang thế
thì kết quả thật kinh ngạc Delphi nhanh hơn rất nhiều
Làm sao so sánh kiểu này được bác??
Vậy phải đổi lại là dùng ngôn ngữ lập trình nào để đọc file Excel dữ liệu lớn nhanh như: Delphi, C++, C#, Python.... chứ sao đi so với VBA.
 
code C# tôi không biết nhưng đọc khá nhiều khi tìm tài liệu Delphi nó toàn cho C# :D
nhưng tôi thấy Sh1.Cells[i+1, ... là rất chậm đấy ... hên thì tôi đoán đúng ...
Bài đã được tự động gộp:

Làm sao so sánh kiểu này được bác??
Vậy phải đổi lại là dùng ngôn ngữ lập trình nào để đọc file Excel dữ liệu lớn nhanh như: Delphi, C++, C#, Python.... chứ sao đi so với VBA.
tại bài 31 hỏi thì tôi mới nói nếu cùng cách viết như nhau thì Delphi sẽ nhanh hơn
 
file sau cho tín đồ VBNet + C# nè ... nó cùng luồng với nhau xem qua là biết thôi

đọc File Excel To...

( File sau tôi Copy từ Internet ... )
 

File đính kèm

  • XLSViewer_0.2.zip
    3.5 MB · Đọc: 7
E cảm ơn a đã chia sẻ ạ
E cũng đang tìm hiểu về XLW C++, khả năng bảo mật tốt và tốc độ nhanh
thì bài trước nói rồi C# tôi ko biết gì cả nhưng khi tìm tài liệu Delphi nó toàn ra C# ... ghét quá tôi đọc luôn ... đọc diết thì hình dung ra nó nói gì
nhiều thứ tôi lấy ý tưởng từ đó cho vào Delphi thấy chạy ok đấy

chốt lại nguyên lý như nhau cả thôi chỉ khác Tools viết nó và cấu trúc code

VD: cái hình sau khoãng 3 năm trước tôi mò tài liệu viết trên VB6 mất khoãng 2 tuần chi đó
xong tôi mất vài tháng cho vào Delphi không xong ...

bỏ diết mấy na9m nay mò lại cho vào Delphi tạm Show ra cái đã .... còn sau đó như thế nào tính sau

1672381715712.png
 
thì bài trước nói rồi C# tôi ko biết gì cả nhưng khi tìm tài liệu Delphi nó toàn ra C# ... ghét quá tôi đọc luôn ... đọc diết thì hình dung ra nó nói gì
nhiều thứ tôi lấy ý tưởng từ đó cho vào Delphi thấy chạy ok đấy

chốt lại nguyên lý như nhau cả thôi chỉ khác Tools viết nó và cấu trúc code
E cảm ơn a, nghỉ tết e vọc nó mới được
 
Web KT
Back
Top Bottom