1. ホーム
  2. javascript

[解決済み] jexcell javascriptライブラリで、どのセルがハイライトされているかを知るにはどうすればよいですか?

2022-02-07 06:54:17

質問内容

jexcelでマークしたセルを結合したいのですが、どうすればいいですか?その方法がわかりません。具体的には、セルを動的な状態にマージして、MySQLでマージされたセルに書き込みたいのです。どうすればいいのか

<div id="example"></div>
<script>

var data = [
  ['', 'Ford', 'Tesla', 'Toyota', 'Honda'],
  ['2017', 10, 11, 12, 13],
  ['2018', 20, 11, 14, 13],
  ['2019', 30, 15, 12, 13]
];

var container = document.getElementById('example');
var hot = new Handsontable(container, {
  data: data,
  rowHeaders: true,
  colHeaders: true,
  filters: true,
  dropdownMenu: true,
  contextMenu: true
});

</script>

解決方法は?

あなたの質問は明確ではありませんが、私は私の能力の範囲内でそれに答えるためにしようとします。

あなたが提供した例を無視して、jExcelに焦点を当てると、セルをマージするために setMerge ということを知る必要があります。

  • 最初のセルのアドレス
  • 選択された行の数
  • 選択された列の数

この情報を抽出することができます。

$("#spreadsheet").jexcel("getSelectedRows", true);
$("#spreadsheet").jexcel("getSelectedColumns", true);

理論的にはこれだけでうまくいくはずなのですが、jExcelはフォーカスを失うと(つまりユーザーがボタンをクリックすると)セルの選択を解除してしまうので、セルの選択をオブジェクトに格納し、後でそのオブジェクトを使ってセルの結合を行うという回避策をとりました。

HTMLです。

<div id="spreadsheet"></div>
<br>
<input id="myB" type="button" value="Merge Selected" />

Javascriptを使用しています。

var mySlection = {};
var options = {
  minDimensions: [10, 10],
  onselection: storeSelection
};

$(document).ready(function() {
  var mySpreadsheet = $("#spreadsheet").jexcel(options);


  $("#myB").click(function() {
    //Merge Cells using the stored selection
    $("#spreadsheet").jexcel("setMerge", mySlection.firstcell, mySlection.colspan, mySlection.rowspan)
    /*
    you may now store the following values to your MySQL
    mySlection.firstcell
    mySlection.colspan
    mySlection.rowspan
    */
  });
});


function storeSelection() {
  var sRows = $("#spreadsheet").jexcel("getSelectedRows", true);
  var sCols = $("#spreadsheet").jexcel("getSelectedColumns", true);

  mySlection.firstcell = [sCols[0], sRows[0]];
  mySlection.colspan = sCols.length;
  mySlection.rowspan = sRows.length;
}

要求事項 jQuery、jExcel、jSuites v3

CodePenでの動作例です。