ReoGrid ReoGrid Web

インタラクティブなチェックリスト

checkbox セル型でチェック可能なTODOリストを作り、チェック済みの行からライブの進捗カウンターを導出します。

Pro 限定。 セル型(チェックボックス、ドロップダウンなど)は Lite では無効です。

完成例

import { createReogrid } from '@reogrid/pro';

const { worksheet } = createReogrid('#grid');

const todos = [
  'Draft the proposal',
  'Review with design team',
  'Send to client',
  'Schedule kickoff meeting',
  'Archive previous version',
];

// Header
worksheet.cell('A1').setValue('✓').setStyle({ bold: true, horizontalAlignment: 'center' });
worksheet.cell('B1').setValue('Task').setStyle({ bold: true });
worksheet.cell('D1').setValue('Done:').setStyle({ bold: true, horizontalAlignment: 'right' });

// Rows: checkbox + task text
todos.forEach((task, i) => {
  const row = i + 1;
  worksheet.cell(row, 0).setType({ type: 'checkbox' }).setValue('false');
  worksheet.cell(row, 1).setValue(task);
});

// Live counter — COUNTIF of "true" values in the checkbox column
worksheet.setCellInput(0, 4, `=COUNTIF(A2:A${todos.length + 1}, "true")&"/${todos.length}"`);

// Column sizing
worksheet.column(0).width = 40;
worksheet.column(1).width = 260;
worksheet.column(3).width = 70;
worksheet.column(4).width = 60;

// Optional: strikethrough finished rows via conditional formatting
worksheet.range(`B2:B${todos.length + 1}`).addConditionalFormat({
  type: 'expression',
  formula: '=$A2="true"',
  style: { color: '#9ca3af', italic: true },
});

チェックボックスが状態をどう保持するか

チェックボックスセルは(真偽値ではなく)リテラル文字列の "true" / "false" を保持します。だからこそ数式ではクォート付きで COUNTIF(..., "true") を使います。

現在の状態をプログラムから読むには:

const isDone = worksheet.cell(1, 0).value === 'true';

変更に反応するには:

worksheet.on('cellValueChange', ({ row, column, newValue }) => {
  if (column === 0) {
    console.log(`Row ${row} checkbox is now`, newValue);
  }
});

補足

  • チェックボックスセルはキャンバス上にネイティブ描画され、クリックはグリッドのポインターコントローラが処理します。DOMオーバーレイは使いません。
  • 元に戻す/やり直しは自動で動作します。チェックを外す操作も通常のアクションマネージャを通ります。
  • テキスト列への条件付き書式により、セル単位のスタイル管理なしで「完了時に取り消し線」効果が得られます。

関連

ニュースレター

開発の最新情報をお届けします

新しいリリース・機能追加・お知らせをいち早く受け取るには、
メーリングリストにご登録ください。