# 插入图片到 Excel

以下示例演示如何在 aardio 中通过 NPOI 库将图片插入 Excel 文件。

## 示例代码

```aardio
import NPOI;

// 创建新的 XSSF 工作簿（适用于 .xlsx 格式）
var workbook = NPOI.XSSF.UserModel.XSSFWorkbook();

// 创建工作表并命名为"Pictures"
var sheet = workbook.CreateSheet("Pictures");

// 创建绘图对象（用于在工作表中插入图片）
var drawing = sheet.CreateDrawingPatriarch();

/*
创建图片锚点定位对象
参数说明：dx1, dy1, dx2, dy2, col1, row1, col2, row2
- dx1/dy1: 图片左上角在单元格内的偏移量（单位：EMU）
- dx2/dy2: 图片右下角在单元格内的偏移量
- col1/row1: 起始单元格位置（列和行，从0开始计数）
- col2/row2: 结束单元格位置
*/
var anchor = NPOI.XSSF.UserModel.XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 5);

// 设置锚点类型为"移动但不调整大小"
anchor.AnchorType = NPOI.SS.UserModel.AnchorType.MoveDontResize;

// 加载 PNG 图片到工作簿并获取图片ID
var imageId = loadPNGImage("/res/dotnet.png", workbook);

// 在工作表中创建图片
var pic = drawing.CreatePicture(anchor, imageId);

// 保存工作簿到文件
workbook.Write("/pictures.xlsx");

/*
加载 PNG 图片到工作簿的函数
参数：
- path: 图片文件路径
- wb: 工作簿对象
返回值：图片在工作簿中的ID
*/
function loadPNGImage(path, wb) {
    // 读取图片文件为二进制数据
    var buffer = string.loadBuffer(path);
    
    // 将图片添加到工作簿并返回图片ID
    return wb.AddPicture(buffer, NPOI.SS.UserModel.PictureType.PNG);
}
```

## 关键点说明

1. **图片定位**：
   - `XSSFClientAnchor` 用于确定图片在工作表中的位置和大小
   - 参数中的列和行索引从 0 开始计数
   - 可以通过调整 dx/dy 值微调图片在单元格内的位置

2. **图片类型**：
   - NPOI 支持多种图片格式，通过 `PictureType` 枚举指定
   - 常用类型：`PNG`, `JPEG`, `DIB` 等

3. **文件操作**：
   - aardio 使用 `string.loadBuffer` 直接读取文件为二进制数据
   - 保存工作簿使用 `Write` 方法，参数可以是文件路径或流对象

4. **资源路径**：
   - 示例中使用 `/res/` 表示应用程序根目录下的 res 文件夹
   - 在 aardio 中，以 `/` 或 `\` 开头的路径表示应用程序根目录

这个示例展示了 NPOI 在 aardio 中的基本图片操作，你可以根据需要调整图片位置、大小和格式。