2017-02-02 6 views
4

Ich bin derzeit mit einem Problem des Kopierens mehrerer Zeilen einer Spalte von Excel (auf MacOS) an den Browser beschäftigt. Ich bin ein event empfangen und Zugriff auf den kopierten Inhalt wie folgt aus: event.clipboardData.getData('text/plain');Inhalt von Excel in Chrome einfügen

Nachdem ich den Inhalt erhalten, möchte ich sie mit verschiedenen Matcher wie folgt aufgeteilt:

const separators = [',', ';', '\\(', '\\)', '\\*', '/', ':', '\\?', '\n', '\t']; 
return data.split(new RegExp(separators.join('|'), 'g')).map(d => d.trim()); 

Das funktioniert perfekt in Firefox, aber es tut nicht im neuesten Chrome und Safari. Ich dachte, Sie würden neue Zeilen mit \n oder \t übereinstimmen. Mein Ziel ist es, ein Array von Werten pro Zeile zu erhalten. Ich stelle mir vor, dass dies etwas mit speziellen Zeilenenden von Excel zu tun hat, denn bei der Verwendung von Numbers von Apple funktioniert alles perfekt.

Jede Hilfe wirklich geschätzt. Danke im Voraus!

Antwort

5

Alles, was Sie brauchen, ist eine CR hinzufügen, Wagenrücklauf, Symbol (es ist der Standard-Zeilenumbruch Stil in MS-Office-Dokumenten). Außerdem erfordert die Methode String#split nicht die Verwendung des globalen Modifikators g, wobei die Regex als Argument übergeben wird, da dieses Methodenverhalten standardmäßig so ist.

Verwenden

const separators = [',', ';', '\\(', '\\)', '\\*', '/', ':', '\\?', '\n', '\r']; 
return data.split(new RegExp(separators.join('|'))).map(d => d.trim()); 
2

Okay, ich habe das funktioniert.

/* 
    * Chrome and Safari seem to treat new lines pasted from Excel like an Enter press. 
    * Enter has a CharCode of 13, so checking if this string contains CharCode 13 is sufficient. 
    * If the string contains a CharCode 13, we split the string after every CharCode 13. 
    * And kids, that's how I made pasting from Excel possible (HIMYM voice) 
    */ 

    const enterCharCode = String.fromCharCode(13); 

    if (data.includes(enterCharCode)) { 
     return data.split(enterCharCode); 
    } 

    const separators = [',', ';', '\\(', '\\)', '\\*', '/', ':', '\\?', '\n']; 
    return data.split(new RegExp(separators.join('|'), 'g')).map(d => d.trim()); 
+1

Alles was Sie brauchen, dann ist '\ r' hinzuzufügen:' const Separatoren = [ '', '', '\\ (', '\\)', ‚\ \ * ','/',': ',' \\? ',' \ n ',' \ t ',' \ r ']; '. Außerdem brauchen Sie nicht den '' g''-Modifizierer, es ist das Standardverhalten für 'split'. –

+0

@ WiktorStribiżew Oh, das ist noch besser! Vielen Dank – jonicious