ExcelからWebページにコピー/貼り付け


89

スプレアシートからWebフォームにコピーアンドペーストするための標準的な方法またはライブラリはありますか?Excelから複数のセルを選択すると、(明らかに)区切り文字が失われ、すべてがWebフォームの1つのセルに貼り付けられます。VBで行う必要がありますか?または、Webフォームで貼り付けアクションが開始されたら、処理を実行できますか?


何かを自動化しようとしていますか?あなたはより良い例を与えることができます...
デイトンブラウン

2
私はこの質問をするのが怖かった。それをしてくれて、そしてとても簡潔にしてくれてありがとう。:)
Nostalg.io 2015

回答:


94

区切り文字を失うことはありません。セルはタブ(\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 2016

1
セル内に改行がある場合、これは壊れます。
th3byrdm4n 2016年

これに関する簡単なメモ-見事に機能しますが、Excelはデータがコピーされるときに末尾の行を追加するため、空のになりtdます。ちょうどFYI
jg2703

これは迅速ですが短期的な解決策です。私のセルの1つに\ nが含まれている場合はどうなりますか
MeVimalkumar 2018

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基本的に、「後貼り付け」イベントをシミュレートします。
userfuser 2017

12

上のOSXWindowsの、異なる種類のコンテンツのためのクリップボードの複数の種類があります。Excelでコンテンツをコピーすると、データはプレーンテキストとhtmlクリップボードに保存されます。

正しい方法(区切り文字の問題でつまずかない)は、HTMLを解析することです。 http://jsbin.com/uwuvan/5は、HTMLクリップボードを取得する方法を示す簡単なデモです。重要なのは、onpasteイベントにバインドして読み取ることです

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

jsbinは私にとって期待どおりに機能しませんでした(Win 7、Excel2013のFirefox42)。この回答を投稿してから何か重要な変更があり、このアプローチは機能しなくなりましたか?ブラウザコンソールに、テキスト/プレーンコンテンツがログに記録されているのが表示されますが、テキスト/ htmlコンテンツは空です。
クリスチャンセムラウ2015

これは、Excelを使用するWindowsまたはlibreOfficeを使用するubuntuのいずれかでChromeで機能します。元のシートのすべてのフォーマットを保持するため、最適なソリューションIMO。
BiAiB 2016

この非常に関連性の高い答えですが、より詳細な情報が必要です
MeVimalkumar 2018

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を作成し、それを単一のフィールドとしてサーバーに投稿します。
マイク2013年

ちなみに、これはWordテーブル(変換しようとしているユーザーのレガシー「フォーム」の1つ)でも機能します。ありがとう。
Hugh Seagraves 2016年

5

私のようにここで終わる将来のグーグルのために、私は@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

更新:これは、MSExcelの代わりにONLYOFFICEを使用する場合にのみ当てはまります。

実際には、ここで提供されているすべての回答と、受け入れられている回答に流れがあります。フローは、Excelに空のセルがあり、それをコピーすると、クリップボードに2つのタブ文字が隣接しているため、分割した後、配列に1つの追加アイテムが表示され、その行に追加のセルとして表示されます。他のすべてのセルを1つ移動します。したがって、これを回避するには、基本的に、文字列内のすべてのダブルタブ(タブが隣り合っている場合のみ)文字を1つのタブ文字に置き換えてから分割する必要があります。

@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ソフトウェアのスプレッドシートからコピーした場合にのみ発生することが実際にわかりました。うーん..誰かがそれにつまずいた場合に備えて、これをここに残しておきます。
アラム

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からExcelファイルを読み取り、それをDBに保存するか、何らかの処理を行うとよいでしょう。

PHPを使用してExcelデータを読み書きする方法に関する詳細なチュートリアル: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.