Il est probablement meilleur et plus rapide d'utiliser les flux , mais puisque la version D8 est toujours en cours de développement; vous pouvez également utiliser Excel + VBA ( Visual Basic pour Applications , fourni avec Excel) + Internet Explorer 11.
Voici un exemple de la façon dont vous pouvez importer votre contenu CSV à l'aide de VBA.
Par exemple, supposons que vous souhaitiez l'importer et créer de nouveaux nœuds avec les informations de votre CSV:
Voici un exemple de code VBA:
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
Assurez-vous de changer le nom de domaine en myURL = "https://rgr79.ply.st/node/add/article"
ligne pour votre domaine. J'utilise un domaine Simplytest.me , si vous ne le savez pas déjà.
Comment ajouter le code VBA?
Cliquez sur l'onglet Développeur puis sur l'icône Visual Basic (ou ALT + F11)
et collez le code à l'intérieur de Sheet1 (Sheet1)
Maintenant, dans la barre d'outils, cliquez sur tool
puis surReferences
Vous devrez faire défiler, rechercher et cocher
- Bibliothèque d'objets Microsoft HTML
- Contrôles Internet de Microsoft
Remarque: je sais que cela fonctionne avec Internet Explorer 11, je ne sais pas s'il fonctionne avec le nouveau navigateur Microsoft Edge.
Vous êtes maintenant prêt à exécuter le script. Vous pouvez le faire en cliquant sur le bouton Lecture
Vous pouvez également l'exécuter en cliquant sur l'icône Macros (voir image2), mais je préfère le faire à partir de la fenêtre VBA.
Donc, vous appuyez sur le bouton de lecture et une fenêtre IE s'ouvre automatiquement et vous voyez ceci:
Oh oui, vous avez oublié de vous connecter, lol.
Vous vous connectez donc à Drupal, puis vous fermez l'explorateur (car l'historique des cookies enregistre votre connexion) et vous prévoyez d'appuyer à nouveau sur le bouton de lecture. Mais vous n'êtes pas en mesure de ... vous voyez le bouton de lecture grisé et vous ne pouvez pas apporter de modifications au code VBA ... Que se passe-t-il?
Eh bien, votre code est toujours en cours d'exécution, vous devez donc appuyer sur le bouton Arrêter (réinitialiser).
Vous pouvez maintenant cliquer à nouveau sur le bouton de lecture et profiter du monde de l'automatisation.
Important
Si vous prévoyez d'insérer des éléments dans le champ Body (comme nous le faisons dans cet exemple), puisque Drupal 8 utilise CKEditor pour ce champ et CKEditor est JS, nous ne pouvons pas cibler une classe div ou un ID; ainsi, nous ne pouvons pas ajouter de contenu à l'intérieur de CKEditor.
Heureusement, il existe un travail autour. Assurez-vous que vos paramètres de sécurité IE 11 sont définis sur Élevé, cela bloquera automatiquement tous les JS. Par conséquent, CKeditor ne se chargera pas et le champ body sera comme les autres champs.
Si vous devez modifier l'exemple de nœuds:
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