Rolf b: Kopieren von Daten eines Arrays

Beitrag lesen

document.execCommand('copy') funktioniert angeblich nur wenn das HTML-Dokument im Design-Mode ist, aber damit habe ich es beim Experimentieren auch nicht zum Laufen gebracht.

Ich hätte aber einen Lösungsvorschlag, die vielleicht etwas gefummelt aussieht, dafür aber mit relativ wenig Benutzerinteraktion funktioniert.

Schritt 1: Du formatierst deine Daten als einen langen String. Den baust Du aus Zeilen auf, wobei die i-te Zeile die i-ten Werte deiner Spalten enthält. Innerhalb einer Zeile separierst Du die Werte durch einen Tabulator, also &#9;. Die Zeilen separierst Du durch ein Linefeed, also &#10;. Diesen String setzt Du in ein <pre> Element hinein. Es muss pre sein, weil sonst die Tabs zu Spaces werden. Dieses Formatieren kannst Du serverseitig machen, bevor Du die Seite sendest, oder per JavaScript im Browser.

Schritt 2: Du selektierst den Inhalt dieses Pre-Elementes per JavaScript. Dazu kannst Du folgende Funktion verwenden:

function SelectText(element) {
    var selection = window.getSelection(),
        range = document.createRange();
    range.selectNodeContents(element);
    selection.removeAllRanges();
    selection.addRange(range);
}

Diese Funktion rufst Du mit dem pre-Element als Parameter auf: SelectText(document.getElementById("myPre")); oder ähnlich. Die window.getSelection Methode funktioniert ab IE 9 auch im Internet Explorer, vorher musste man da eine Feature Detection machen. Aber das sollte heutzutage nicht nötig sein. Laut caniuse wird das Selection-API von allen gängigen Browsern außer Opera Mini unterstützt.

Ergebnis ist, dass deine Daten in einem pre Element stehen und selektiert sind. Der Anwender muss dann "nur noch" mit der rechten Maustaste draufklicken, "Kopieren" sagen, im Excel auf eine Zelle klicken und mit Einfügen -> Inhalte einfügen -> Text holen. Es wird dann dank der Tabs als Trennzeichen spaltengerecht aufbereitet.

Alternativ kannst Du das Ganze auch serverseitig als echte CSV-Datei aufbereiten und mit Content-Type Header "text/csv" ausliefern, so dass der Browser Dir einen Download anbietet. Diese CSV Datei kannst Du dann mit Excel öffnen.

Rolf