2017-10-17 101 views
2

我们正在建设中的角1.5.x版本的应用程序,我们正在努力实现一个功能,将允许用户粘贴一个理念来自Excel表格或任何其他电子表格(单列,任意深度的行)的单元格列输入。伍 - 粘贴 - 访问粘贴的数据作为数组或列表

我们已经有了一个包含如内嵌输入数据表如下: data table

的想法是,当他们粘贴电子表格中的一列复制到一个输入数据,该数据将被解析的单元格,并按降序分配给每个输入。 I.E.如果我将包含[4.52,6.235,9.2301]的一列单元格粘贴到包含15.23的顶部输入中,则15.23将变为4.52,3.1234将变为6.235,并且3.1322将变为9.2301。我们知道如何将变量分配给输入,但我们需要数组格式的剪贴板数据,而不是一个大字符串。

的问题

我们看着这样使用NG粘贴指令和$ event.clipboardData属性,但我们只可以访问数据作为一个字符串,而我们拥有的一种方式解析字符串时,如果我们可以访问以数组或列表形式进入的元素,以防止我们结束时出现任何错误,那么如果我们最终使用分隔符来分解该字符串,那么错误就会少得多。

Here是我们已经尝试过的工作中的重击器。

这里是一个样本数据集复制并粘贴到输入:

出于某种原因,复制从Excel电子表格的列时,它有值之间没有delims。当我们从单个行的多个列复制而不是单个列的多个行时,我可以在'\ n'字符上使用.split()并且它工作正常。但是,最好允许用户从单行和单列中复制。问题是,当你从excel中复制一列时,没有定界符。

0.89663.91783.91773.91773.9178

也就是说从Excel /谷歌片^什么粘贴,但随时把这些值在电子表格中的一列,并从那里复制。我们可以确定粘贴的数据将来自电子表格。

解决方案

关于如何将剪贴板数据作为数组获取的任何想法?

+0

你的意思是,你需要把字符串到数字到数组?这应该足够了'ev.clipboardData.getData('text')。split(“”).map(Number)'。 –

+0

@AlekseySolovey问题是.getData('text')没有返回一个空格作为分隔符的字符串,它返回一个没有实际分隔符值的字符串 –

回答

1

这应该做的伎俩:

HTML:

<input ng-paste="pasteFunction($event)"><br /> 
<p>Input as array:</p> 
<p ng-repeat="item in pasted track by $index">{{item}}</p> 

的JavaScript:

$scope.pasteFunction = function(ev) { 
    $scope.pasted = ev.clipboardData.getData('text').split(" ").map(Number); 
    console.log($scope.pasted); 
    } 

工作代码:Plunker

+1

他要求“自动填充”paste上的现有输入事件,如果我正确理解他的话 –

+1

@AlekseySolovey虽然这似乎是最终目标,但他的问题(引自'The Problem')是:“尽管我们有一种解析字符串的方法,我们可以访问作为数组或列表进入的元素,以防止在我们结束时发生任何错误,如果我们最终使用分隔符来分割该字符串。“#: –

+0

请参阅我对上述答案^同样的问题的回应。我可以处理自动填充输入,我只需要知道如何分解我们从.getData('text')函数获得的内容。当我从Excel中粘贴时,它粘贴一个没有空格或任何分隔符的字符串。 –

1

我可以看到一个合理的破解加itional input,而不是使用现有的。身体就变成了:

<body ng-controller="MainCtrl"> 
    <input ng-paste="pasteFunction($event)"> 
    <input ng-repeat="t in test" ng-model="t"/> 
</body> 

而且控制器更改为:

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.obj = {}; 
    $scope.test = [111, 222, 333]; 
    $scope.pasteFunction = function(ev) { 
    $scope.test = ev.clipboardData.getData('text').split(" ").map(Number); 
    } 
    // paste this: 999 888 777 
    }); 
+1

这是假设几件事情可能不是真的:1)他只是在最后一列第一行粘贴... 2)该行被表示为数组3)用户不想粘贴表中的其他地方 –

+0

我很感谢你的时间!这个假设用户已经复制了一组中间有空格的值,但是现在当我复制出一个excel电子表格时根本没有分隔符,并且当我复制并粘贴出谷歌表格时,分隔符是一个返回字符。但是,用户将会使用excel,所以当你从excel复制一列时,挑战是(至少从Mac),在粘贴 –

+0

时我没有定界值^我有一个“隐形”回车符。我们检查了这个,代码运行得很顺畅。 –