Có thể tốt hơn và nhanh hơn để sử dụng Nguồn cấp , nhưng vì phiên bản D8 vẫn đang được phát triển; cách khác, bạn có thể sử dụng Excel + VBA ( Visual Basic cho Ứng dụng , đi kèm với Excel) + Internet Explorer 11.
Dưới đây là một ví dụ về cách bạn có thể nhập nội dung CSV của mình bằng VBA.
Ví dụ: giả sử bạn muốn nhập cái này và tạo các nút mới với thông tin từ CSV của bạn:
Đây là một mã VBA mẫu:
Sub Drupal_Import()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
Dim x As Integer
For x = 2 To 4 'this controls which rows get added, so only 2 to 4
myURL = "https://rgr79.ply.st/node/add/article"
With IE
.Visible = True 'makes your Internet Explorer window visible.
.navigate myURL
End With
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("visually-hidden")(1).innerText
DoEvents
Loop While el = vbNullString
'the above loops until the visualy-hidden class is detected, which means the edit form has been loaded
Application.Wait (Now + TimeValue("00:00:03")) 'tells the program to wait 3 secs.
Set HTML = IE.document
HTML.getElementById("edit-title-0-value").Value = Cells(x, 1).Value 'here the 1 is the Y (so 1 is Column A)
HTML.getElementById("edit-body-0-value").Value = Cells(x, 2).Value 'here the 2 is the Y (so 2 is Column B)
Cells(x, 3).Value = "Done" 'here we use the 3rd column (Column C) and mark it as Done to keep track.
HTML.getElementsByClassName("button js-form-submit form-submit")(1).Click 'clicks the submit button
Application.Wait (Now + TimeValue("00:00:00")) 'here I have a wait for 0, increase it to 2 or 3 if you see your VBA get stuck after submitting a node.
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("messages messages--status")(0).innerText
DoEvents
Loop While el = vbNullString
'all the above does is loops the code until the drupal message is detected, which means the node was loaded, after the submit.
Next x
End Sub
Hãy chắc chắn rằng bạn thay đổi tên miền trong myURL = "https://rgr79.ply.st/node/add/article"
dòng thành tên miền của bạn. Tôi đang sử dụng tên miền Simplytest.me , nếu bạn chưa thể biết.
Làm thế nào để thêm mã VBA?
Nhấp vào tab Nhà phát triển và sau đó vào biểu tượng Visual Basic (hoặc ALT + F11)
và Dán mã bên trong Trang tính 1 (Trang tính 1)
Bây giờ trên thanh công cụ, bấm vào tool
và sau đóReferences
Bạn sẽ cần phải cuộn, tìm và đánh dấu
- Thư viện đối tượng Microsoft HTML
- Kiểm soát Internet của Microsoft
Lưu ý: Tôi biết nó hoạt động với Internet Explorer 11, không chắc nó có hoạt động với trình duyệt Microsoft Edge mới không.
Bây giờ bạn đã sẵn sàng để chạy tập lệnh. Bạn có thể làm như vậy bằng cách nhấp vào nút Phát
Bạn cũng có thể chạy nó bằng cách nhấp vào Biểu tượng Macros (xem image2), nhưng tôi thích làm điều đó từ cửa sổ VBA.
Vì vậy, bạn nhấn nút play và một cửa sổ IE sẽ tự động mở ra và bạn thấy điều này:
Ồ vâng, bạn quên đăng nhập, lol.
Vì vậy, bạn tiến hành đăng nhập vào Drupal và sau đó bạn đóng explorer (vì lịch sử cookie sẽ lưu thông tin đăng nhập của bạn) và lên kế hoạch nhấn lại nút phát. Nhưng bạn không thể ... bạn thấy nút phát bị mờ đi và không thể thực hiện bất kỳ thay đổi nào đối với mã VBA ... Chuyện gì đang xảy ra?
Vâng, mã của bạn vẫn đang chạy, vì vậy bạn cần nhấn nút Dừng (đặt lại).
Bây giờ bạn có thể nhấp vào nút phát một lần nữa và vui mừng với thế giới tự động hóa.
Quan trọng
Nếu bạn dự định chèn nội dung vào trường Body (như chúng tôi đang làm trong ví dụ này), vì Drupal 8 sử dụng CKEditor cho trường này và CKEditor là JS, chúng tôi không thể nhắm mục tiêu một lớp div hoặc ID; do đó, chúng tôi không thể thêm nội dung bên trong CKEditor.
May mắn thay, có một công việc xung quanh. Đảm bảo cài đặt Bảo mật IE 11 của bạn được đặt thành Cao, điều này sẽ tự động chặn tất cả JS. Do đó, CKeditor sẽ không tải và trường cơ thể sẽ giống như các trường khác.
Nếu bạn cần chỉnh sửa các nút ví dụ:
Sub Drupal_Edit()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
Dim x As Integer
For x = 2 To 4 'this controls which rows get added, so only 2 to 4
myURL = "https://rgr79.ply.st/node/" & Cells(x, 3) & "/edit"
With IE
.Visible = True 'makes your Internet Explorer window visible.
.navigate myURL
End With
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("visually-hidden")(1).innerText
DoEvents
Loop While el = vbNullString
'the above loops until the visualy-hidden class is detected, which means the edit form has been loaded
Application.Wait (Now + TimeValue("00:00:04")) 'tells the program to wait 3 secs.
Set HTML = IE.document
HTML.getElementById("edit-title-0-value").Value = Cells(x, 1).Value 'here the 1 is the Y (so 1 is Column A)
HTML.getElementById("edit-body-0-value").Value = Cells(x, 2).Value 'here the 2 is the Y (so 2 is Column B)
Cells(x, 4).Value = "Done" 'here we use the 4th column (Column D) and mark it as Done to keep track.
HTML.getElementsByClassName("button js-form-submit form-submit")(1).Click 'clicks the submit button
Application.Wait (Now + TimeValue("00:00:00")) 'here I have a wait for 0, increase it to 2 or 3 if you see your VBA get stuck after submitting a node.
Do
el = vbNullString
On Error Resume Next
Set HTML = IE.document
el = HTML.getElementsByClassName("messages messages--status")(0).innerText
DoEvents
Loop While el = vbNullString
'all the above does is loops the code until the drupal message is detected, which means the node was loaded, after the submit.
Next x
End Sub