Mi objetivo es crear una función que, en una página específica, recopile datos y los copie en el portapapeles, luego los pegará en una hoja de cálculo de Google o de Excel.
Los datos aparecen en diferentes lugares en una página web y se presentan de la siguiente manera:
<!-- Somewhere throughout the web page --> <div data-cy="a"> <strong><a href="www.example.com">text</a></strong> </div> <!-- Another place throughout the web page --> <div data-cy="b"> <strong>another text</strong> </div> Además, necesito enviar algunas de mis cadenas simples, como var text = 'different text' .
En una hoja de cálculo de Excel, los tres valores deben pegarse en tres campos coincidentes en una fila:
| A | B | C | |
|---|---|---|---|
| 1 | texto | otro texto | texto diferente |
Aquí está mi código hasta ahora:
var a = $('*[data-cy="a"]').html().replaceAll('\n','').replaceAll('<strong>','').replaceAll('</strong>','') // extract 'a'. var b = $('*[data-cy="b"]').html().replaceAll('\n','').split(/[><]/)[2]; // extract 'b'. var c = 'different text'; var allCells = a + '\t' + b + '\t' + c; // using Tab character to divide between cells. function copyToClipboard(str) { function listener(e) { e.clipboardData.setData("text/html", str); e.clipboardData.setData("text/plain", str); e.preventDefault(); } document.addEventListener("copy", listener); document.execCommand("copy"); document.removeEventListener("copy", listener); }; copyToClipboard(allCells); Probé las versiones obsoletas y más recientes de navigator.clipboard.writeText() , pero ninguna de ellas parece darme la opción de pegar los valores en diferentes celdas en la misma fila.
Este comentario me ayudó a descubrir lo que realmente está sucediendo. Desafortunadamente, para solucionar esto , creé una nueva tabla en el DOM y copié los elementos desde allí. Pegar en la hoja de Excel funciona de maravilla.
// Extraction of variables var a = $('*[data-cy="a"]').html().replaceAll('\n','').replaceAll('<strong>','').replaceAll('</strong>','') // extract 'a'. var b = $('*[data-cy="b"]').html().replaceAll('\n','').split(/[><]/)[2]; // extract 'b'. var c = 'different text'; let allCells = [$(clientName), locationCompany, treatedBy]; // Table creation var table = $('<table>').addClass('table').attr('id', 'excel-data'); var row = $('<tr>'); for(i=0; i<allCells.length; i++) { row.append($('<td>').html(allCells[i])); } table.append(row); $('[data="element-data"]').append(table); // Select & copy table function function selectElementContents(el) { var body = document.body, range, sel; if (document.createRange && window.getSelection) { range = document.createRange(); sel = window.getSelection(); sel.removeAllRanges(); try { range.selectNodeContents(el); sel.addRange(range); } catch (e) { range.selectNode(el); sel.addRange(range); } document.execCommand("copy"); } else if (body.createTextRange) { range = body.createTextRange(); range.moveToElementText(el); range.select(); range.execCommand("Copy"); } }