スプレアシートからWebフォームにコピーアンドペーストするための標準的な方法またはライブラリはありますか?Excelから複数のセルを選択すると、(明らかに)区切り文字が失われ、すべてがWebフォームの1つのセルに貼り付けられます。VBで行う必要がありますか?または、Webフォームで貼り付けアクションが開始されたら、処理を実行できますか?
スプレアシートからWebフォームにコピーアンドペーストするための標準的な方法またはライブラリはありますか?Excelから複数のセルを選択すると、(明らかに)区切り文字が失われ、すべてがWebフォームの1つのセルに貼り付けられます。VBで行う必要がありますか?または、Webフォームで貼り付けアクションが開始されたら、処理を実行できますか?
回答:
区切り文字を失うことはありません。セルはタブ(\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テーブルを作成します。
td
ます。ちょうどFYI
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);
}
上のOSXとWindowsの、異なる種類のコンテンツのためのクリップボードの複数の種類があります。Excelでコンテンツをコピーすると、データはプレーンテキストとhtmlクリップボードに保存されます。
正しい方法(区切り文字の問題でつまずかない)は、HTMLを解析することです。 http://jsbin.com/uwuvan/5は、HTMLクリップボードを取得する方法を示す簡単なデモです。重要なのは、onpasteイベントにバインドして読み取ることです
event.clipboardData.getData('text/html')
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>
私のようにここで終わる将来のグーグルのために、私は@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;
}
うまくいけば、それは将来誰かを助けるでしょう。
更新:これは、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');
})
})
})
将来誰かがそれに遭遇した場合に備えて、これを掘り起こします。上記のコードを意図したとおりに使用しましたが、データベースに送信された後、テーブルの表示で問題が発生しました。データを保存すると、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テーブルとして保存されます。
PHPからExcelファイルを読み取り、それをDBに保存するか、何らかの処理を行うとよいでしょう。
PHPを使用してExcelデータを読み書きする方法に関する詳細なチュートリアル:http:
//www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html