コピーは 2 つの形式を同時にクリップボードへ載せます。
| 形式 | 用途 |
|---|---|
| TSV(タブ区切りテキスト) | Excel・テキストエディタなど他アプリとの相互運用 |
data-rg-* 属性つき HTML | ReoGrid どうしのコピー(スタイル・数式・結合を保持) |
貼り付け側は HTML があればそちらを優先し、無ければ TSV を解釈します。 これは reogrid-web(Web 版)と同じ方式で、両者の間でも貼り付けが通ります。
ファイル保存の形式(reogrid-json)はクリップボードには使いません。
UI から使う
| メンバー | 内容 |
|---|---|
control.CopySelection() | 選択範囲をコピー |
control.CutSelection() | 切り取り |
control.PasteClipboard() | 貼り付け |
Ctrl+C / Ctrl+X / Ctrl+V は既定で配線されています。
API から使う
using unvell.ReoGrid.Core.Clipboard;
// 選択範囲を TSV にする(Excel やテキストエディタへ貼れる形)
string tsv = RangeClipboard.BuildTsv(ws, RangePosition.Parse("A1:C10"));
// TSV を取り込む
ClipboardRangeData data = RangeClipboard.ParseTsv(tsv);
RangePosition pasted = RangeClipboard.Apply(ws, startRow: 20, startCol: 0, data);
システムのクリップボードには触れないため、ヘッドレスでも使えます。
取り込んだデータを調べる
Console.WriteLine($"{data.Rows} x {data.Columns}");
// ReoGrid が書いた HTML から復元された場合はスタイルや数式も入る
if (data.IsReoGridSource)
Console.WriteLine($"anchor = {data.SourceAnchorRow},{data.SourceAnchorCol}");
ClipboardCellData? cell = data.Cells[0][0];
if (cell != null)
Console.WriteLine($"{cell.Value} fmt={cell.NumberFormat} span={cell.RowSpan}x{cell.ColSpan}");
ClipboardCellData が持つもの。
| プロパティ | 内容 |
|---|---|
Value | 入力文字列(= で始まれば数式) |
NumberFormat | 数値書式 |
Style | スタイル |
RichText | リッチテキスト |
CellType | セル型の設定 |
RowSpan / ColSpan | 結合 |
TSV から取り込んだ場合は Value だけが埋まります。
複数範囲(非連続選択)のコピー
クリップボードは矩形なので、複数領域を選んだ状態のコピーは 1 ブロックに詰められるときだけ通ります。Excel と同じ判定です。
| 領域の並び | 可否 |
|---|---|
同じ列を共有して縦に積む(A1:C3 と A7:C9) | ✅ 縦に連結 |
同じ行を共有して横に並ぶ(A1:A5 と D1:D5) | ✅ 横に連結 |
| それ以外(形も位置も揃わない) | ❌ 断る |
断るときのメッセージは Excel と同じ
“That command cannot be used on multiple selections.”
です(RangeClipboard.MultiRangeCopyMessage)。外接矩形を黙ってコピーすると
選択していないセルまで持っていくことになるため、推測はしません。
詰められるかどうかは RangeClipboard.TryGetCopyLayout(areas, out var ordered, out bool stacked)
で先に判定できます。BuildTsv / BuildHtmlFragment は範囲のリストを受け取る
オーバーロードを持ちます。
相対参照の自動オフセット
数式を含むセルをコピーして別の位置に貼ると、相対参照が貼り付け先に合わせてずれます。 Excel および V4 と同じ挙動です。
C1 に "=A1*B1" がある状態で C1 をコピーし、C5 に貼る
→ C5 は "=A5*B5" になる
これを実現しているのが HTML 側のアンカー情報(SourceAnchorRow / SourceAnchorCol)です。
コピー元の位置が記録されているため、貼り付け位置との差分だけ参照をずらせます。
複数領域を詰めてコピーした場合は、ブロック上の位置がもう元の位置を表しません。
そのため各セルに data-rg-src(SourceRow / SourceCol)を打ち、参照は
そのセル自身の元位置からずらします。単一範囲のコピーではこの属性は出力されず、
出力は従来とバイト一致のままです。
$ で固定した参照は動きません。範囲外に出る参照は #REF! になります。
Excel との相互運用
| 方向 | 何が渡るか |
|---|---|
| Excel → ReoGrid | TSV として値が渡る |
| ReoGrid → Excel | TSV として値が渡る |
| ReoGrid → ReoGrid | HTML 経由でスタイル・数式・結合も渡る |
| reogrid-web → ReoGrid One | HTML 経由(同じ属性形式) |
元に戻す
貼り付けは履歴に載ります。切り取り+貼り付けのように 2 段階になる操作も、 1 ステップとしてまとめて元に戻せます。