Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从excel复制粘贴,单元格中的换行符和行分隔符之间的差异_Javascript_Excel_Csv - Fatal编程技术网

Javascript 从excel复制粘贴,单元格中的换行符和行分隔符之间的差异

Javascript 从excel复制粘贴,单元格中的换行符和行分隔符之间的差异,javascript,excel,csv,Javascript,Excel,Csv,我们需要向客户提供一种将excel复制粘贴到web应用程序表中的方法。 我们用换行符拆分行,用表格拆分列 问题在于,在单个单元格中,您可以使用换行符,这样拆分(\n)就可以简单地理解有一个新行 const rows = event.target.value.split('\n'); for (let row of rows) { const values = row.split('\t'); } 有了上面的代码,当单元格中并没有换行符时,我们可以得到一个很好

我们需要向客户提供一种将excel复制粘贴到web应用程序表中的方法。 我们用换行符拆分行,用表格拆分列

问题在于,在单个单元格中,您可以使用换行符,这样
拆分(\n)
就可以简单地理解有一个新行

    const rows = event.target.value.split('\n');
    for (let row of rows) {
      const values = row.split('\t');
    }
有了上面的代码,当单元格中并没有换行符时,我们可以得到一个很好的复制粘贴表,但一旦单元格中有换行符,所有内容都将移动到一行并将所有内容打断


如何区分分隔行的换行符和单元格中的换行符?

考虑一个小例子,我将Excel数据复制粘贴到Notepad++中,我们可以看到引用了
cat\nfish

因此,您可以将粘贴到web应用程序的内容视为选项卡分隔值(tsv),并对其进行解析

在下面的代码段中,
tsvStringToArray
是从中改编而来的(请参见)。请注意,由于
dog
之后的最后一行
crlf
,将返回一个额外的行。在现实生活中,你可能应该找一个图书馆来为你做这件事。您可以将D3视为可以在浏览器中运行的东西

对于
arrToTable
,我想您一定在
arrToTable
方面做得更好。但是,您应该考虑是否需要在HTML ./p>中重新创建换行符。
const target=document.getElementById(“输入”);
const output=document.getElementById(“输出”);
常量tsvStringToArray=(数据)=>{
常量re=/(\t |\r?\n |\r | ^)(?:“([^”]*(?:“[^”]*)”)“([^\t\r\n]*)/gi
常量结果=[]]
让火柴
而((matches=re.exec(data))){
if(匹配[1]。长度和匹配[1]!==“\t”)结果。推送([]))
结果[result.length-1]。推送(
匹配项[2]!==未定义?匹配项[2]。替换(/“/g”,”):匹配项[3]
)
}
//控制台日志(结果);
返回结果
}
常数arrToTable=arr=>{
设tbl=document.createElement(“表”);
用于(arr行){
设tr=document.createElement(“tr”);
用于(行的单元格){
设td=document.createElement(“td”);
let test=/\n/.test(单元);
如果(测试){
让items=cell.split(/\n/);
对于项的([idx,项])。项(){
td.appendChild(document.createTextNode(item));
if(idx<项目长度){
td.appendChild(document.createElement(“br”));
}
}
}否则{
td.appendChild(document.createTextNode(cell));
}
tr.appendChild(td);
}
附肢儿童(tr);
}
返回tbl;
}
target.addEventListener(“粘贴”,e=>{
const text=event.clipboardData.getData(“文本”);
const arr=tsvStringToArray(text).slice(0,-1);
常数el=可到达性(arr);
输出。追加子项(el);
});
div#输入{
高度:90px;
宽度:320px;
背景色:粉蓝色;
}
表,tr,td{
边框:1px纯黑;
}
粘贴到蓝色框中: