作成日: 2026/08/31 最終更新日: 2026/09/24
文書種別
不具合
状況
回避方法あり
詳細
EditModePermanentプロパティを有効にしたSPREADで、セルを編集モードにしてからキーボードの下矢印キーで行移動する際、移動によりSPREADのスクロールが発生すると、セルの編集が開始されません。
また、この場合はEditModeReplaceプロパティを有効にしてもアクティブセルの移動時に編集が開始されないため、テキストが全選択されず、上書き入力が有効になりません。
また、この場合はEditModeReplaceプロパティを有効にしてもアクティブセルの移動時に編集が開始されないため、テキストが全選択されず、上書き入力が有効になりません。
回避方法
下矢印キーによるスクロール時のみ、アクティブセルが完全に表示されているかを確認し、完全に表示されていない場合だけ、scrollTop += 1 で 1px 補正する方法が考えられます。
これによりアクティブセルが表示された状態にすることができ、正しく編集を開始することが可能です。
<script>
document.addEventListener("DOMContentLoaded", () = {
const spread = document.getElementById("FpSpread1");
var scrollVp = document.getElementById(spread.id + "_view");
scrollVp.addEventListener("scroll", ScrollVp_Scrolled);
// 「ArrowDown」キーの押下を追跡
spread.addEventListener("keydown", (e) = {
if (e.key === 'ArrowDown') {
isNextCellKeyDown = true;
}
}, true)
// キー押下の追跡をリセット
spread.addEventListener("wheel", (e) = {
isNextCellKeyDown = false;
}, true)
});
var isNextCellKeyDown = false;
var ScrollVp_Scrolled = (e) = {
// ナビゲーションキーによるスクロール時のみ実行
if (!isNextCellKeyDown) {
return;
}
var spread = document.getElementById("FpSpread1");
var nextCell = spread.Cells(spread.ActiveRow, spread.ActiveCol);
if (nextCell && IsCellHidden(nextCell, true)) {
var scrollVp = document.getElementById(spread.id + "_view");
scrollVp.scrollTop += 1;
}
isNextCellKeyDown = false;
}
///セルがビューから隠れているかどうかを確認します。
///セルの一部が隠れているか、全体が隠れているかを確認することを示します。
var IsCellHidden = function (cell, partial, viewport) {
if (cell == null) return true;
var vp = viewport;
var spread = document.getElementById("FpSpread1");
var spreadView = spread.getSpreadView();
if (vp == null) vp = (spreadView.Parent == null) ? spreadView._GetViewportFromCell(cell) : spreadView.GetTopSpreadView().Viewport;
if (vp == null) return true;
return IsElementHidden(cell, vp.parentNode, partial);
}
///要素がビューから隠れているかどうかを確認します。
///セルの一部が隠れているか、全体が隠れているかを確認することを示します。
var IsElementHidden = function (element, view, partial) {
var r1 = element.getBoundingClientRect();
var offset = view.getBoundingClientRect();
var r2 = { top: offset.top, left: offset.left, bottom: offset.top + view.clientHeight, right: offset.left + view.clientWidth };
var isHidden = function (r1, r2, partial) {
return (partial) ?
(r1.top r2.bottom || r1.right r2.right) :
(r1.bottom <=><=>= r2.bottom || r1.left = r2.right);
}
return isHidden(r1, r2, partial);
}
</script>