コピーは 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 だけが埋まります。
相対参照の自動オフセット
数式を含むセルをコピーして別の位置に貼ると、相対参照が貼り付け先に合わせてずれます。 Excel および V4 と同じ挙動です。
C1 に "=A1*B1" がある状態で C1 をコピーし、C5 に貼る
→ C5 は "=A5*B5" になる
これを実現しているのが HTML 側のアンカー情報(SourceAnchorRow / SourceAnchorCol)です。
コピー元の位置が記録されているため、貼り付け位置との差分だけ参照をずらせます。
$ で固定した参照は動きません。範囲外に出る参照は #REF! になります。
Excel との相互運用
| 方向 | 何が渡るか |
|---|---|
| Excel → ReoGrid | TSV として値が渡る |
| ReoGrid → Excel | TSV として値が渡る |
| ReoGrid → ReoGrid | HTML 経由でスタイル・数式・結合も渡る |
| reogrid-web → ReoGrid One | HTML 経由(同じ属性形式) |
元に戻す
貼り付けは履歴に載ります。切り取り+貼り付けのように 2 段階になる操作も、 1 ステップとしてまとめて元に戻せます。