作成日: 2026/10/02 最終更新日: 2026/10/02
文書種別
制限事項
状況
回避方法あり
詳細
GcDateTime型セルに「20261231」 の日付書式と異なる値をペーストした場合、SpreadJSはその値を日付と判断できず、数値として扱います。そのため、GcDateTime型セルでは日付への変換が行われず、編集モードでは現在日が表示され、編集終了後はシリアル値が表示されます。
回避方法
値を日付に変換してGcDateTime型セルに貼り付けて回避が可能です。
◆サンプルコード(HTML)
<!-- GcDateTimeのレイアウトも非表示にするため、通常のinputを非表示コンテナ内に置く --> <div hidden><input id="dateParser" type="text" tabindex="-1"></div>
◆サンプルコード(JavaScript)
// 貼り付け変換用に非表示のGcDateTimeを作成する
var dateTime = new GC.InputMan.GcDateTime(document.getElementById('dateParser'));
// 貼り付けイベントを監視し、対象となる日付値のみを処理する
spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
var target = args.sheet, range = args.cellRange;
var text = args.pasteData && args.pasteData.text;
// ここで貼り付けをスキップする条件をチェックする
if (args.cancel || args.fromSheet || args.isCutting || !target || target.isEditing()) return;
if (!range || range.row < 0 || range.col < 0 || range.rowCount !== 1 ||
range.colCount !== 1 || target.getSelections().length !== 1) return;
// 対象セルがGcDateTimeCellTypeの場合のみ、値の貼り付けを処理する
if (args.pasteOption !== GC.Spread.Sheets.ClipboardPasteOptions.values &&
args.pasteOption !== GC.Spread.Sheets.ClipboardPasteOptions.all) return;
if (typeof text !== 'string' || !/^\d+$/.test(text.trim())) return;
var type = target.getCellType(range.row, range.col);
if (!type || type.typeName !== 'GC.Spread.Sheets.CellTypes.GcDateTimeCellType' ||
type.toJSON().displayType === 'text') return;
// イベントをキャンセルして、貼り付け処理を中断する
args.cancel = true;
try {
dateTime.setValue(null);
dateTime.setNumber(text.trim());
var date = dateTime.getValue();
if (!date || isNaN(date.getTime())) throw new Error('cannot convert to date.');
} catch (error) {
return;
}
// コマンドを使用して、セルの編集を実行する
spread.commandManager().execute({
cmd: 'editCell', sheetName: target.name(), row: range.row, col: range.col,
newValue: date, autoFormat: false
});
});