2017-10-17 137 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

時我沒有定界值^我有一個「隱形」回車符。我們檢查了這個,代碼運行得很順暢。 –