我们正在Angular 1.5.x中构建应用程序,我们正在尝试实现一项功能,允许用户从Excel工作表或任何其他电子表格中粘贴单列单元格(单列,任意数量的行深入到输入中。
我们有一个包含内联输入的数据表,如下所示:
这个想法是,当他们将从电子表格的单个列复制的数据粘贴到其中一个输入中时,数据将被解析为单元格的单元格并按降序分配给每个输入。 I.E.如果我将包含[4.52,6.235,9.2301]的一列单元格粘贴到包含15.23的顶部输入中,则15.23将变为4.52,3.1234将变为6.235,3.1322将变为9.2301。我们知道如何将变量分配给输入,但我们需要数组格式的clipboardData,而不是一个大字符串。
我们已经研究过使用ng-paste指令和$ event.clipboardData属性,但我们只能以字符串形式访问数据,虽然我们有一种解析字符串的方法,但它会是如果我们可以访问以数组或列表形式出现的元素,以防止在我们最终使用delims来分解该字符串时出现任何错误,则更不容易出错。
Here是我们已经尝试过的工作人员。
以下是要复制并粘贴到输入中的示例数据集:
出于某种原因,从Excel电子表格复制列时,值之间没有任何区别。当我们从单行的多个列复制而不是单个列的多行时,我能够在'\ n'字符上使用.split()并且它可以正常工作。但是,最好允许用户从单行和单列复制。问题是从excel复制列时没有任何delim。
0.89663.91783.91773.91773.9178
这是从excel / google工作表中粘贴的内容^,但可以随意将这些值放在电子表格的单个列中并从那里复制。我们可以确定粘贴的数据将来自电子表格。
关于如何将剪贴板数据作为数组获取的任何想法?
答案 0 :(得分:2)
这应该可以解决问题:
HTML:
f =: 3 : 0
'x y z' =. y
(x-z)%(y-z)
)
f 1 2 3
2
f (1 2 3);(2 3 4);(0 1 2)
0.5 0.5 0.5
f (2 3 $ 5 4);(2 3$ 6 4 2);(2 3$ 7 5)
2 1 0.4
_1 0.666667 0.333333
f i.3 2 4 3 NB. Input shape (3 a b c...), output shape a b c...
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
JavaScript的:
<input ng-paste="pasteFunction($event)"><br />
<p>Input as array:</p>
<p ng-repeat="item in pasted track by $index">{{item}}</p>
工作代码:Plunker
答案 1 :(得分:1)
我可以通过附加输入看到合理的 hack ,而不是使用现有的 hack 。然后身体变成:
<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
});