# dotNet.ReoGrid 扩展库 - 剪贴板操作

内置剪贴板支持
---------------------------------

* 在 ReoGrid 和其他电子表格应用之间复制制表符分隔的纯文本
* 在两个 ReoGrid 工作表之间复制内容，包括数据、样式、边框等

制表符分隔的纯文本
-----------------------------------------

制表符分隔的纯文本格式是电子表格应用之间通用的数据交换格式。Excel 使用这种格式将数据以纯文本形式放入剪贴板：

```
A1 \t B1 \t C1 \n A2 \t B2 \t C2 \n A3 \t B3 \t C3 \n
```

将 Excel 数据复制到记事本中：

![剪贴板](../images/4.png)

从剪贴板获取制表符分隔的文本：

```aardio
import win.clip;
var text = win.clip.read();
```

ReoGrid 提供了将制表符格式解析为对象数组的方法：

```aardio
// 解析制表符分隔的文本为二维数组
var data = ReoGrid.RGUtility.ParseTabbedString(text);
```

然后将这个对象数组设置到工作表中：

```aardio
// 将数据设置到当前选区范围
sheet1.SetRangeData(sheet1.SelectionRange, data);
```

将选区数据转换为制表符字符串
-----------------------------------------------------------

使用工作表的 `StringifyRange` 方法将选定区域转换为制表符分隔的字符串：

```aardio
// 将选区数据转换为制表符字符串
var tabbedStr = sheet1.StringifyRange(sheet1.SelectionRange);
```

手动粘贴制表符字符串
-------------------------------------------

使用 `PasteFromString` 方法将剪贴板中的制表符字符串粘贴到工作表。返回值 `appliedRange` 是最终粘贴到工作表的区域。

```aardio
// 从剪贴板文本粘贴到A1单元格
var appliedRange = sheet1.PasteFromString(
    ReoGrid.CellPosition("A1"),  // 起始位置
    win.clip.read()              // 剪贴板文本
);
```

阻止内置剪贴板操作
-----------------------------------------

当用户按下 Ctrl-C、Ctrl-V 和 Ctrl-X 时，工作表会自动处理剪贴板操作。通过处理剪贴板事件并将 `IsCancelled` 设置为 true 可以阻止内置操作。

剪贴板操作相关事件：

* BeforeCopy - 复制前
* AfterCopy - 复制后  
* BeforePaste - 粘贴前
* AfterPaste - 粘贴后
* BeforeCut - 剪切前
* AfterCut - 剪切后

所有以 Before 开头的事件都有 `IsCancelled` 属性，可以阻止默认的剪贴板操作。例如：

```aardio
// 阻止默认粘贴操作
sheet1.BeforePaste = function(sender, event){
    event.IsCancelled = true;
}
```

调用剪贴板方法
---------------------------------

检查是否可以执行剪贴板操作的方法：

| 方法 | 描述 |
|------|------|
| CanCopy() | 检查是否可以将内容复制到剪贴板 |
| CanPaste() | 检查是否可以从剪贴板粘贴内容到工作表（剪贴板中存在可识别数据） |
| CanCut() | 检查是否可以将内容剪切到剪贴板 |

执行剪贴板操作的方法：

```aardio
sheet1.Copy();   // 复制
sheet1.Paste();  // 粘贴
sheet1.Cut();    // 剪切
```

示例：

```aardio
// 执行复制操作
if(sheet1.CanCopy()){
    sheet1.Copy();
}
```

手动复制和粘贴区域
-----------------------------------------

使用 `GetPartialGrid` 方法获取区域内容，使用 `SetPartialGrid` 方法将内容复制到指定区域。

```aardio
// 获取A1:B2区域内容
var content = sheet1.GetPartialGrid("A1:B2");

// 将内容粘贴到C1:D2区域
sheet1.SetPartialGrid("C1:D2", content);
```

## aardio 使用说明

1. 剪贴板操作需要先导入 win.clip 库：
```aardio
import win.clip;
```

2. ReoGrid 控件的事件回调使用 aardio 函数：
```aardio
sheet1.BeforePaste = function(sender, event){
    // 事件处理逻辑
}
```

3. 区域操作支持 A1 表示法（如"A1:B2"）和行列索引（从0开始）

4. 剪贴板文本会自动处理编码转换，无需额外操作

5. 对于大数据量操作，建议先检查 CanCopy/CanPaste 避免不必要的操作