Excel là một chương trình "Nhận biết web", nghĩa là nó biết cách xử lý các siêu liên kết. Bạn có thể thêm một siêu kết nối trong tài liệu, nhấp vào liên kết đó và Excel sẽ mở trình duyệt Web của bạn và hiển thị nội dung của liên kết đó trong trình duyệt. [Bạn cũng có thể tạo siêu kết nối đến các tài liệu Office khác, bao gồm sổ làm việc Excel. ] Bạn thậm chí có thể tạo siêu kết nối đến các đối tượng khác nhau trên trang tính của mình, chẳng hạn như nút lệnh trong biểu mẫu
Tuy nhiên, nếu bạn muốn khởi động trình duyệt và mở tệp HTML từ bên trong macro VBA thì sao? . Đầu tiên là chỉ cần mở một đối tượng Internet Explorer mới trong mã của bạn. Một macro để làm điều này sẽ xuất hiện như sau
Sub DoBrowse1[] Dim ie As Object Set ie = CreateObject["Internetexplorer.Application"] ie.Visible = True ie.Navigate "c:\temp\MyHTMLfile.htm" End Sub
Macro này sẽ mở tệp c. \temp\MyHTMLfile. htm trong cửa sổ Internet Explorer mới. Thay vào đó, nếu bạn muốn mở một trang Web từ Internet, bạn có thể thực hiện việc đó đơn giản bằng cách thay đổi nơi bạn muốn điều hướng. [Thay thế đường dẫn tệp bằng URL. ]
Một cách khác để hoàn thành nhiệm vụ tương tự là dựa vào Excel để tìm ra trình duyệt mặc định của bạn là gì và mở tài nguyên HTML. Macro sau thực hiện thủ thuật
Sub DoBrowse2[] ActiveWorkbook.FollowHyperlink _ Address:="c:\temp\MyHTMLfile.htm", _ NewWindow:=True End Sub
Một lần nữa, trình duyệt sẽ mở một cửa sổ mới và hiển thị tệp đã chỉ định. Bạn có thể thay đổi tham số Địa chỉ thành bất kỳ URL nào bạn muốn
Có thể chạy macro trên trình duyệt web không? . Ngoài ra, làm cách nào để tôi kích hoạt nó tự động trong trình duyệt?
Giải pháp tốt nhất
Nếu tôi đúng khi cho rằng bạn đang hỏi liệu macro vba có thể tự động chạy sau khi mở macro đó từ một liên kết trên trang web do trình duyệt hiển thị hay không, thì cách tốt nhất để làm điều đó là đặt mã chạy tự động bất cứ khi nào sổ làm việc được liên kết
Để chạy macro khi sổ làm việc được mở, hãy nhấp đúp vào đối tượng "ThisWorkbook" trong trình khám phá dự án vba của sổ làm việc có mã của bạn và thêm các dòng mã này
Private Sub Workbook_Open[]
Call Module1.hello 'Change this line to start your code
End Sub
Điều này sẽ tự động thực thi phần phụ "xin chào" trong Mô-đun 1 của sổ làm việc
Lưu ý rằng người dùng phải bật Macro trong Cài đặt Trung tâm tin cậy của họ để mọi thứ chạy
Cũng lưu ý rằng tùy thuộc vào trình duyệt của họ và vị trí liên kết thực tế trỏ đến tệp sổ làm việc có thể phải được tải xuống trước rồi mới mở từ vị trí tải xuống để chạy macro
Giải pháp liên quan
C# – Cách tạo một Excel [. XLS và. XLSX] trong C# mà không cần cài đặt Microsoft Office
Bạn có thể sử dụng thư viện có tên ExcelLibrary. Đó là một thư viện mã nguồn mở miễn phí được đăng trên Google Code
Thư viện Excel
Đây có vẻ là một cổng của PHP ExcelWriter mà bạn đã đề cập ở trên. Nó sẽ không ghi vào cái mới. xlsx, nhưng họ đang làm việc để thêm chức năng đó vào
Nó rất đơn giản, nhỏ và dễ sử dụng. Ngoài ra, nó còn có DataSetHelper cho phép bạn sử dụng DataSets và DataTables để dễ dàng làm việc với dữ liệu Excel
ExcelLibrary dường như vẫn chỉ hoạt động đối với định dạng Excel cũ hơn [. xls], nhưng có thể bổ sung hỗ trợ trong tương lai cho các định dạng 2007/2010 mới hơn
Bạn cũng có thể sử dụng EPPlus, chỉ hoạt động với các tệp định dạng Excel 2007/2010 [. tệp xlsx]. Ngoài ra còn có NPOI hoạt động với cả hai
Có một vài lỗi đã biết với mỗi thư viện như đã lưu ý trong các nhận xét. Nói chung, EPPlus dường như là lựa chọn tốt nhất theo thời gian. Nó dường như cũng được cập nhật và ghi lại tích cực hơn
Ngoài ra, như được lưu ý bởi @АртёмЦарионов bên dưới, EPPlus có hỗ trợ cho Pivot Tables và ExcelLibrary có thể có một số hỗ trợ [Sự cố bảng Pivot trong ExcelLibrary]
Dưới đây là một vài liên kết để tham khảo nhanh
Thư viện Excel - GNU GPL nhỏ hơn
EPPlus -
EPPlus 5 - Polyform Phi thương mại - Bắt đầu từ tháng 5 năm 2020
NPOI - Giấy phép Apache
Dưới đây là một số mã ví dụ cho ExcelLibrary
Dưới đây là một ví dụ lấy dữ liệu từ cơ sở dữ liệu và tạo sổ làm việc từ đó. Lưu ý rằng mã Thư viện Excel là một dòng ở dưới cùng
//Create the data set and table
DataSet ds = new DataSet["New_DataSet"];
DataTable dt = new DataTable["New_DataTable"];
//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
//Open a DB connection [in this example with OleDB]
OleDbConnection con = new OleDbConnection[dbConnectionString];
con.Open[];
//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand[sql, con];
OleDbDataAdapter adptr = new OleDbDataAdapter[];
adptr.SelectCommand = cmd;
adptr.Fill[dt];
con.Close[];
//Add the table to the data set
ds.Tables.Add[dt];
//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook["MyExcelFile.xls", ds];
Tạo tệp Excel dễ dàng như vậy. Bạn cũng có thể tạo các tệp Excel theo cách thủ công, nhưng chức năng trên mới là thứ thực sự gây ấn tượng với tôi
Excel – Ngăn Excel tự động chuyển đổi một số giá trị văn bản thành ngày tháng
Tôi nhận thấy rằng việc đặt dấu '=' trước dấu ngoặc kép sẽ thực hiện được những gì bạn muốn. Nó buộc dữ liệu phải là văn bản
ví dụ. ="2008-10-03",="thêm văn bản"
CHỈNH SỬA [theo bài viết khác]. do lỗi Excel 2007 do Jeffiekins lưu ý nên sử dụng giải pháp do Andrew đề xuất. "=""2008-10-03"""