web-dev-qa-db-fra.com

Comment utiliser JOIN dans Google Sheets pour créer un corps HTML?

J'utilise importxml pour extraire des données de sites Web. Jusqu'à présent, cette partie fonctionne très bien. Cependant, je dois réunir le texte de ces cellules dans une cellule HTML que je peux télécharger sur mon site Web. J'ai joint la capture d'écran, je sais que la formule/codage est absolument faux! Mais c'est idéalement ce que je vais faire. Comment pourrais-je créer une meilleure formule/code pour cela? Je suis toujours super nouveau à ça!

J'utilise importxml pour obtenir les données dont j'ai besoin: enter image description here

J'essaie de mettre toutes ces données dans une cellule qui doit être au format HTML: enter image description here

2
robbie777

Je vois où en est l'asker, et j'ai une réponse et quelques conseils:

Premièrement, je devrais vous avertir que sur cette voie est une folie.

Cela peut sembler une chose évidente à faire et cela n'a pas l'air si difficile, mais générer du HTML à l'aide d'un tableur (que ce soit Google Sheets, Excel ou tout autre progiciel de calcul) peut sembler simple, mais certaines choses peut et va devenir trop compliqué, ou vous allez très bientôt atteignez un point où vous devrez écrire une macro pour obtenir le résultat souhaité.

De plus, une fois que vous aurez plongé et commencé à écrire votre premier couple de macros, si votre feuille n’est pas déjà trop compliquée, , vous frapperez le Les limites du langage macro bientôt aussi .

Mais pourquoi? Je ne fais rien de trop complexe!

Si vous utilisez rapidement un tableur lorsque vous l'utilisez pour générer du HTML, vous générerez rapidement que les balises structurées ne sont pas bien adaptées à la conception globale du paradigme du calcul en grille. Quelle est la raison pour laquelle nous avons Word et Excel et que

"In the beginning there was Visicalc, and Wordstar, 
 and each did what they did 
 and they were not a single program" 

(From 'The book of Mozilla', I forget which verses).

Le traitement de texte est en soi un processus consistant à générer un document de balisage structuré. Il existe donc des packages logiciels plus adaptés à la tâche.

Alors, quelle serait sage de faire?

Mon conseil serait de garder la base de données dans la feuille de calcul ( une tâche pour laquelle elle convient bien ) et de vous épargner une profonde frustration et délais non respectés et investissez un peu de temps pour apprendre une langue correcte ; celui qui est est facile à apprendre et efficace pour modéliser HTML .

Python vient à l'esprit. L'alternative consiste à tirer parti des fonctionnalités des autres produits Google (puisque vous utilisez déjà Sheets), comme Google Sites que permet de créer facilement des sites Web et permet d’incorporer et de conduire certaines de ses pages à partir des données d’un tableur.

Mais je veux le faire en feuilles! En fait, c'est pourquoi je demande ici!

D'accord. Cependant, je suis dans cette voie et j'aurais apprécié que quelqu'un m'avertit que la folie attendait , j’ai donc pensé que cela aurait été irresponsable et injuste de demander au demandeur de ne pas l’avertir des périls à venir. (Je regarde ceux qui connaissent et n'ont pas élevé la voix.)

Cela étant dit, j'ai vu des gens abuser de feuilles de calcul d'une manière bien plus troublante . Alors:

Voici mon bon conseil sur la conception d’un tableur générant un balisage structuré


Vous pouvez voir tous ces conseils en action dans cette feuille de calcul Google , afin que vous puissiez examiner les formules à votre guise et voir comment ces points simples vous aideront à éviter de créer un impossible à maintenir. monstruosité et gardez votre santé mentale pendant un moment encore.

  1. Créez une table de balises principale qui calcule les attributs des balises de base à partir des valeurs d'au moins deux cellules indépendantes
  2. Tirez parti des fonctionnalités avancées de la feuille de calcul telles que des plages nommées pour simplifier toutes vos formules en référençant les valeurs dans le tableau de génération de balises principales.
  3. Pour les plages nommées, , choisissez des noms qui ressemblent au balisage référencé afin que vos formules soient lisibles et maintenable , comme par exemple

     =CONCATENATE(p_s1, A4, p_close) or
     =CONCATENATE(span_s2, B7, span_close)
    
  4. La complexité augmentera rapidement , gardez vos formules simples et construisez progressivement le balisage de l'intérieur , en utilisant des formules dans des cellules adjacentes . par exemple, dans la colonne C, entourez une valeur simple avec des balises <p> internes, dans la colonne D, entourez la valeur de C dans les balises <span> extérieures, dans la colonne E, entourez ce qui se trouve dans D avec des balises <div> extérieures, etc. sur. une étape à la fois , vous avez beaucoup de colonnes et quelques-unes

  5. Évitez à tout prix de faire deux étapes ou un balisage complexe dans une seule cellule . Fiez-vous toujours à votre table de balises maîtresses, car vous savez quand vous avez terminé, quelqu'un suggérera que la classe de tous les titres soit différente de ce que vous avez codé . Vous serez alors heureux de ne pas coder en dur ces attributs dans une formule qui tourne deux fois sur le f(x) bar, avez-vous?

S'il vous plaît visitez le exemple de feuille car ce sera beaucoup plus clair qu'un killillion de screenshots ou la prose dense que j'ai tendance à écrire quand je suis tout énervé. J'espère que cela aide vraiment!

2
hlecuanda

Donc, pour commencer, vous voulez doubler chacune des citations à l'intérieur de vos balises HTML pour qu'elles s'affichent correctement et ne pas annuler:

alors class="p1" serait class=""p1""

puis pour la liste des éléments p1, vous pouvez utiliser regexreplace pour entourer vos données avec les balises au lieu de la concaténation (c'est juste un peu plus propre à mon avis)

Ainsi, l'expression régulière pour tout ce qui se trouve dans une seule cellule serait (.*), ce qui crée un groupe de capture auquel nous pourrons faire référence ultérieurement avec $1.

Utiliser mes propres exemples de données pour démontrer: enter image description here pour une seule ligne, ceci voudrait:

=REGEXREPLACE(A1,"(^.*$)","<p class=""p1"">$1</p>"))

qui imprime joliment:

Si vous souhaitez utiliser éventuellement join afin de ne pas avoir à copier le tout, vous pouvez d'abord utiliser arrayformula pour empiler les éléments p1 avec cette formule:

=arrayformula(if(istext(A2:A),REGEXREPLACE(A2:A,"(^.*$)","<p class=""p1"">$1</p>"),))

enter image description here

puis de tout regrouper dans une seule cellule:

=join(char(10),filter(B:B,istext(B:B)))

Voici à quoi ressemblerait la finale: enter image description here

3

Dans les formules Google Sheets, le texte doit être placé entre guillemets. Si le texte comprend des guillemets, les guillemets intérieurs doivent être doublés. Exemples

Texte sans guillemets
Formule: ="<p>Hello world!</p>"
Résultat affiché: <p>Hello world!</p>

Texte avec guillemets intérieurs
Formule: ="<h1 class=""p1"">Hello world!</h1>"
Résultat affiché: <h1 class="p1">Hello world!</h1>

tilisation de références scalaires
Valeur A1: Hello world!

Tags simples
B1 formule: ="<p>"&A1&"</p>"
Valeur affichée B1: <p>Hello world!</p>

Tags avec attributs
Formule B2: ="<h1 class=""p1"">"&A1&"</h1>"
B2 résultat affiché: <h1 class="p1">Hello world!</h1>

tilisation des références de plage
Entrée

    |         A
----+--------------------- 
 2  | Hello Mexico
 3  | Hello USA
 4  | Hello Canada

Formule

Formule C1: =ArrayFormula("<p>"&A2:A4&"</p>")

Résultat

C1: C3 valeurs affichées:

    |         C
----+--------------------- 
 1  | <p>Hello Mexico</p>
 2  | <p>Hello USA</p>
 3  | <p>Hello Canada</p>
0
Rubén