Excel에서 웹 페이지로 복사 / 붙여 넣기


88

스프 레아 시트에서 웹 양식으로 복사하여 붙여 넣는 표준 방법이나 라이브러리가 있습니까? Excel에서 둘 이상의 셀을 선택하면 구분 기호가 없어지고 모두 웹 양식의 한 셀에 붙여 넣어집니다. VB에서해야합니까? 또는 웹 양식에서 붙여 넣기 작업이 시작되면 처리가 완료 될 수 있습니까?


무언가를 자동화하려고합니까? 더 나은 예를 들어
주시겠습니까

2
나는이 질문을하는 것이 두려웠다. 해주셔서 감사합니다. 간결하게 해주셔서 감사합니다. :)
Nostalg.io 2015

답변:


93

구분 기호를 잃지 않고 셀은 탭 ( \t)으로 구분되고 행 \n은 양식에 표시되지 않을 수있는 줄 바꿈 ( ) 으로 구분됩니다 . 직접 시도해보십시오. Excel에서 메모장으로 콘텐츠를 복사하면 셀이 잘 정렬 된 것을 볼 수 있습니다. 그러면 필드를 탭으로 분할하고 다른 것으로 대체하는 것이 쉽습니다. 이렇게하면 필드에서 테이블도 만들 수 있습니다. 다음은 jQuery를 사용하는 예입니다.

var data = $('input[name=excel_data]').val();
var rows = data.split("\n");

var table = $('<table />');

for(var y in rows) {
    var cells = rows[y].split("\t");
    var row = $('<tr />');
    for(var x in cells) {
        row.append('<td>'+cells[x]+'</td>');
    }
    table.append(row);
}

// Insert into DOM
$('#excel_table').html(table);

따라서 본질적으로이 스크립트는 붙여 넣은 Excel 데이터에서 HTML 테이블을 만듭니다.


9
나는 비슷한 문제를 가지고 놀았습니다. 주목할 가치가 있습니다. 텍스트 상자에 붙여 넣으면 줄 바꿈이 풀립니다. 텍스트 영역에 붙여 넣는 동안 유지합니다.
wobbily_col 2014 년

실용적인 이유로이 답변을 향후 사용을위한 스 니펫으로 만들 수 있습니다.
AdrianoRR

1
셀 안에 줄 바꿈이 있으면 중단됩니다.
th3byrdm4n

이것에 대한 간단한 메모는 훌륭하게 작동하지만 Excel은 데이터를 복사 할 때 후행 행을 추가하므로 빈 td. 그냥 참고
jg2703

이 내 세포 중 하나에 포함 된 \ n 거기에 경우 어떻게 빠른하지만 단기 솔루션입니다
MeVimalkumar

27

Tatu의 답변에 대한 응답으로 그의 솔루션을 보여주기 위해 빠른 jsFiddle을 만들었습니다.

http://jsfiddle.net/duwood/sTX7y/

HTML

<p>Paste excel data here:</p>  
<textarea name="excel_data" style="width:250px;height:150px;"></textarea><br>
<input type="button" onclick="javascript:generateTable()" value="Genereate Table"/>
<br><br>
    <p>Table data will appear below</p>
<hr>
<div id="excel_table"></div>

JS

function generateTable() {
    var data = $('textarea[name=excel_data]').val();
    console.log(data);
    var rows = data.split("\n");

    var table = $('<table />');

    for(var y in rows) {
    var cells = rows[y].split("\t");
    var row = $('<tr />');
    for(var x in cells) {
        row.append('<td>'+cells[x]+'</td>');
    }
    table.append(row);
}

// Insert into DOM
$('#excel_table').html(table);
}

3
그리고 여기 에이 답변에 대한 추가 사항이 있지만 붙여 넣기 이벤트에서 즉시 표시되는 자동 테이블이 있습니다. jsfiddle.net/sTX7y/690 기본적으로 'afterpaste'이벤트를 시뮬레이션합니다.
userfuser

12

OSX윈도우 , 다른 유형의 컨텐츠에 대한 클립 보드의 여러 종류가 있습니다. Excel에서 콘텐츠를 복사하면 데이터가 일반 텍스트와 html 클립 보드에 저장됩니다.

구분 기호 문제로 인해 문제가 발생하지 않는 올바른 방법은 HTML을 구문 분석하는 것입니다. http://jsbin.com/uwuvan/5 는 HTML 클립 보드를 얻는 방법을 보여주는 간단한 데모입니다. 핵심은 onpaste 이벤트에 바인딩하고

event.clipboardData.getData('text/html')

jsbin이 예상대로 작동하지 않았습니다 (Win 7, Excel 2013의 Firefox 42). 이 답변을 게시 한 후 중요한 변경 사항이있어이 접근 방식이 더 이상 작동하지 않습니까? 브라우저 콘솔에서 텍스트 / 일반 콘텐츠가 기록되었지만 텍스트 / html 콘텐츠가 비어 있습니다.
Christian Semrau 2015

이것은 Excel이 설치된 Windows 또는 libreOffice가있는 우분투에서 크롬과 함께 작동합니다. 원본 시트의 모든 서식을 유지하므로 최상의 솔루션 IMO입니다.
BiAiB

이 꽤 관련 대답하지만, 필요 더 자세히
MeVimalkumar

8

Tatu와 같은 아이디어 (우리 프로젝트에서 곧 필요합니다),하지만 정규 표현식을 사용합니다.
큰 데이터 세트의 경우 더 빠를 수 있습니다.

<html>
<head>
    <title>excelToTable</title>
    <script src="../libs/jquery.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
    <textarea>a1    a2  a3
b1  b2  b3</textarea>
    <div></div>
    <input type="button" onclick="convert()" value="convert"/>
    <script>
        function convert(){
            var xl = $('textarea').val();
            $('div').html( 
                '<table><tr><td>' + 
                xl.replace(/\n+$/i, '').replace(/\n/g, '</tr><tr><td>').replace(/\t/g, '</td><td>') + 
                '</tr></table>'
            )
        }
    </script>
</body>
</html>

안녕하세요 마이크, 이것은 훌륭한 코드입니다! 이 테이블 변환을 제출 가능한 양식으로 어떻게 가져올 수 있는지에 대한 통찰력이 있습니까?
BvilleBullet 2013 년

제출하려는 양식에 따라 다릅니다. 나는 그것에서 문자열 화 된 json을 만들고 서버에 단일 필드로 게시합니다.
Mic

그건 그렇고, 이것은 Word 테이블에서도 작동합니다 (변환하려는 사용자의 레거시 "양식"중 하나). 감사.
휴 Seagraves

5

나처럼 여기에 도착하는 미래의 Google 직원을 위해 @tatu Ulmanen의 개념을 사용하여 객체 배열로 바꿨습니다. 이 간단한 함수는 붙여 넣은 Excel (또는 Google 시트) 데이터 (가급적이면)의 문자열을 가져 와서 textarea객체 배열로 변환합니다. 열 / 속성 이름에 첫 번째 행을 사용합니다.

function excelToObjects(stringData){
    var objects = [];
    //split into rows
    var rows = stringData.split('\n');

    //Make columns
    columns = rows[0].split('\t');

    //Note how we start at rowNr = 1, because 0 is the column row
    for (var rowNr = 1; rowNr < rows.length; rowNr++) {
        var o = {};
        var data = rows[rowNr].split('\t');

        //Loop through all the data
        for (var cellNr = 0; cellNr < data.length; cellNr++) {
            o[columns[cellNr]] = data[cellNr];
        }

        objects.push(o);
    }

    return objects;
}

바라건대 그것은 미래의 누군가에게 도움이되기를 바랍니다.


1

업데이트 : MS Excel 대신 ONLYOFFICE를 사용하는 경우에만 해당됩니다.

실제로 여기에 제공된 모든 답변과 허용되는 답변에는 흐름이 있습니다. 흐름은 Excel에 빈 셀이 있고이를 복사 할 때마다 클립 보드에 서로 옆에 2 개의 탭 문자가 있으므로 분할 후 배열에 하나의 추가 항목이 표시되고 해당 행에 추가 셀로 나타납니다. 다른 모든 셀을 하나씩 이동합니다. 따라서 기본적으로 문자열의 모든 이중 탭 (서로 옆에있는 탭만) 문자를 하나의 탭 문자로 바꾼 다음 분할해야하는 것을 방지합니다.

@userfuser jsfiddle의 업데이트 된 버전은 removeExtraTabs로 붙여 넣은 데이터를 필터링하여이 문제를 해결하기 위해 여기에 있습니다.

http://jsfiddle.net/sTX7y/794/

function removeExtraTabs(string) {
  return string.replace(new RegExp("\t\t", 'g'), "\t");
}

function generateTable() {
  var data = removeExtraTabs($('#pastein').val());
  var rows = data.split("\n");
  var table = $('<table />');

  for (var y in rows) {
    var cells = rows[y].split("\t");
    var row = $('<tr />');
    for (var x in cells) {
      row.append('<td>' + cells[x] + '</td>');
    }
    table.append(row);
  }

  // Insert into DOM
  $('#excel_table').html(table);
}

$(document).ready(function() {
  $('#pastein').on('paste', function(event) {
    $('#pastein').on('input', function() {
      generateTable();
      $('#pastein').off('input');
    })
  })
})

실제로 ONLYOFFICE 소프트웨어의 스프레드 시트에서 복사 한 경우에만 이런 일이 발생한다는 것을 알게되었습니다. 흠 .. 누군가가 우연히 발견 할 경우를 대비하여 여기에 두십시오.
Aram

0

Excel 2007에는 매우 잘 작동하는 "데이터"탭 아래에이 작업을 수행하는 기능이 있습니다.


0

누군가가 미래에 그것을 보게 될 경우를 대비하여 이것을 파십시오. 위의 코드를 의도 한대로 사용했지만 데이터베이스에 제출 된 후 테이블을 표시하는 데 문제가 발생했습니다. 데이터를 저장 한 후에는 PHP를 사용하여 쿼리의 새 줄과 탭을 대체하는 것이 훨씬 쉽습니다. 제출시 교체를 수행 할 수 있습니다. $ _POST [request]는 텍스트 영역의 이름입니다.

$postrequest = trim($_POST[request]);
$dirty = array("\n", "\t");
$clean = array('</tr><tr><td>', '</td><td>');
$request = str_replace($dirty, $clean, $postrequest);

이제 데이터베이스에 $ request를 삽입하면 HTML 테이블로 저장됩니다.


-1

PHP에서 엑셀 파일을 읽은 다음 DB에 저장하거나 처리하는 것이 더 나을 것입니다.

여기 PHP로 Excel 데이터를 읽고 쓰는 방법에 대한 in-dept 튜토리얼 :
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html


그것은 절대적으로 끔찍한 해결책입니다. 나는 현재이 작업을 수행하고 있으며 오류가 발생하기 쉽습니다. Excel은 때로는 숫자를 정수로, 때로는 부동으로 때로는 문자열로 뱉어냅니다.
wobbily_col 2014

또한 xls / csv 파일이 수동으로 체질해야하는 쓰레기로 가득 찬 은행과 같은 신뢰할 수없는 소스에서 붙여
넣어야하는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.