2017-10-17 10 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이됩니다. 변수에 입력을 할당하는 방법을 알고 있지만 큰 문자열이 아닌 배열 형식으로 clipboardData가 필요합니다.

문제점

우리는 NG 붙여 넣기 지시하고 $ event.clipboardData 속성을 사용하여이 일을 검토 한 결과,하지만 우리는 방법이 동안 우리는 단지 문자열로 데이터에 액세스 할 수 있고, 문자열을 파싱하는 경우, delim을 사용하여 문자열을 해체하면 배열이나 목록으로 들어오는 요소에 액세스하여 최종 오류를 방지 할 수 있다면 훨씬 오류가 발생하지 않을 것입니다.

Here은 우리가 이미 시도하고있는 작업과 관련 있습니다. 여기

입력에 복사하여 붙여 설정된 샘플 데이터이다 Excel 스프레드 시트에서 열을 복사 할 때 어떤 이유

, 그 값 사이 delims 없어있다. 단일 열의 여러 행 대신 단일 행의 여러 열에서 복사 할 때 '\ n'문자에 .split() 할 수 있으므로 제대로 작동합니다. 그러나 사용자가 단일 행에서 단일 열로 복사 할 수 있도록하는 것이 바람직합니다. 문제는 Excel에서 열을 복사 할 때 아무런 경계가 없다는 것입니다. 엑셀/구글 시트^붙여 넣을하지만, 스프레드 시트의 단일 컬럼에 해당 값을 넣어 주시기 거기에서 복사 한 것입니다

0.89663.91783.91773.91773.9178

. 붙여 넣은 데이터가 스프레드 시트에서 올 것이라고 확신 할 수 있습니다.

솔루션

배열로 그 클립 보드 데이터를 잡아하는 방법에 어떤 아이디어?

+0

? 이것은'ev.clipboardData.getData ('text'). split ("") .map (Number)'으로 충분해야합니다. –

+0

@AlekseySolovey .getData ('text')는 공백이있는 문자열을 delims로 반환하지 않으며, 값 사이에 실제 delims가없는 문자열을 반환합니다. –

답변

1

이 트릭을 수행해야합니다

HTML :

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

자바 스크립트 :

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

작업 코드 : Plunker

+1

그는 붙여 넣기의 기존 입력을 "자동 채우기" 사건, 만약 내가 그를 정확하게 이해한다면 –

+1

@AlekseySolovey 그것이 최종 목표 인 것처럼 보이지만 그의 질문 ('The Problem'에서 인용)은 :'우리가 문자열을 파싱하는 방법이 있지만, 오류가 발생하기 쉽습니다. 우리는 delim을 사용하여 그 문자열을 끝내면 끝 부분에 어떤 오류도 발생하지 않도록 배열이나리스트로 들어오는 요소에 접근 할 수 있습니다. ' –

+0

위의 답변^동일한 문제에 대한 내 응답을보십시오. 자동 채우기를 처리 할 수 ​​있습니다. .getData ('text') 함수에서 얻은 결과를 깨는 방법을 알아야합니다. 내가 붙여 넣을 때 공백없이 하나의 문자열을 붙여 넣거나 delim으로 붙여 넣습니다. –

1

내가 그럴듯한 으로를 해킹 볼 수 있습니다 더하다 기존 입력을 사용하는 대신을 입력하십시오.몸은된다 :

<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

시간 내 주셔서 감사합니다! 이것은 사용자가 사이에 공백이있는 값 집합을 복사했다고 가정하지만 지금은 엑셀 스프레드 시트에서 복사 할 때 delims가 전혀 없으며 복사하여 Google 시트에서 붙여 넣을 때 delim은 문자를 반환합니다. 사용자가 엑셀을 사용하게 될 것입니다. 그래서 어려운 점은 (맥에서부터) 엑셀의 칼럼을 복사 할 때 값 사이에 아무런 경계도 없으면 붙여 넣기 할 때 –

+0

^정답^"보이지 않는" 캐리지 리턴 문자. 우리는 그것을 검사했고 코드는 순조롭게 진행되었습니다. –