V4 V5

コピーは 2 つの形式を同時にクリップボードへ載せます。

形式用途
TSV(タブ区切りテキスト)Excel・テキストエディタなど他アプリとの相互運用
data-rg-* 属性つき HTMLReoGrid どうしのコピー(スタイル・数式・結合を保持)

貼り付け側は 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:C3A7:C9✅ 縦に連結
同じ行を共有して横に並ぶ(A1:A5D1: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-srcSourceRow / SourceCol)を打ち、参照は そのセル自身の元位置からずらします。単一範囲のコピーではこの属性は出力されず、 出力は従来とバイト一致のままです。

$ で固定した参照は動きません。範囲外に出る参照は #REF! になります。

Excel との相互運用

方向何が渡るか
Excel → ReoGridTSV として値が渡る
ReoGrid → ExcelTSV として値が渡る
ReoGrid → ReoGridHTML 経由でスタイル・数式・結合も渡る
reogrid-web → ReoGrid OneHTML 経由(同じ属性形式)

元に戻す

貼り付けは履歴に載ります。切り取り+貼り付けのように 2 段階になる操作も、 1 ステップとしてまとめて元に戻せます。

次に読む

ページの内容は役に立ちましたか?