# 使用 NPOI 在 Excel 文件中添加图片

本文将介绍以下内容：
1. 在 Excel 文件中添加图片（JPEG、PNG 格式）
2. 写入包含图片的 Excel 文件

## 在 Excel 文件中添加图片

假设我们有一个名为 "Read-write-excel-npoi.jpg" 的 JPEG 图片文件，我们将把它插入到 Excel 的第 5 行第 5 列（索引从 0 开始）。

以下是 aardio 实现代码：

```aardio
import NPOI;

// 创建工作簿
var workbook = NPOI.XSSF.UserModel.XSSFWorkbook();

// 创建工作表
var sheet = workbook.CreateSheet("Sheet1");

// 读取图片文件
var imageData = string.loadBuffer("/read-write-excel-npoi.jpg");

// 添加图片到工作簿
var pictureIndex = workbook.AddPicture(imageData, NPOI.SS.UserModel.PictureType.JPEG);

// 获取创建助手
var helper = workbook.GetCreationHelper();

// 创建绘图对象
var drawing = sheet.CreateDrawingPatriarch();

// 创建锚点
var anchor = helper.CreateClientAnchor();
anchor.Col1 = 5;  // 第5列
anchor.Row1 = 5;  // 第5行

// 创建图片
var picture = drawing.CreatePicture(anchor, pictureIndex);

// 调整图片大小
picture.Resize();

// 保存工作簿
workbook.Write("/Result.xlsx");
```

## 写入包含图片的 Excel 文件

下面是一个完整的示例，演示如何创建一个包含数据和图片的 Excel 文件：

```aardio
import NPOI;
import JSON;

// 创建测试数据
var persons = {
    { ID="1001", Name="ABCD", City="City1", Country="USA" };
    { ID="1002", Name="PQRS", City="City2", Country="INDIA" };
    { ID="1003", Name="XYZZ", City="City3", Country="CHINA" };
    { ID="1004", Name="LMNO", City="City4", Country="UK" };
};

// 创建工作簿
var workbook = NPOI.XSSF.UserModel.XSSFWorkbook();
var sheet = workbook.CreateSheet("TestSheet1");

// 创建表头
var headerRow = sheet.CreateRow(0);
var columns = {"ID", "Name", "City", "Country"};

for(i=1; #columns; 1){
    headerRow.CreateCell(i-1).SetCellValue(columns[i]);
}

// 填充数据行
for(i=1; #persons; 1){
    var row = sheet.CreateRow(i);
    var person = persons[i];
    
    row.CreateCell(0).SetCellValue(person.ID);
    row.CreateCell(1).SetCellValue(person.Name);
    row.CreateCell(2).SetCellValue(person.City);
    row.CreateCell(3).SetCellValue(person.Country);
}

// 添加图片
var imageData = string.loadBuffer("Read-write-excel-npoi.jpg");
var pictureIndex = workbook.AddPicture(imageData, NPOI.SS.UserModel.PictureType.JPEG);

var helper = workbook.GetCreationHelper();
var drawing = sheet.CreateDrawingPatriarch();

var anchor = helper.CreateClientAnchor();
anchor.Col1 = 5;  // 第5列
anchor.Row1 = 5;  // 第5行

var picture = drawing.CreatePicture(anchor, pictureIndex);
picture.Resize();

// 保存工作簿
workbook.Write("/Result.xlsx");
```

## 注意事项

1. 图片文件需要放在项目目录下，或者指定完整的文件路径
2. 图片插入位置的行列索引从 0 开始计算
3. `picture.Resize()` 方法会自动调整图片大小以适应单元格
4. 支持 JPEG，PNG，GIF 格式的图像。

通过以上代码，我们可以成功将图片插入到 Excel 文件的指定位置。在实际应用中，可以根据需要调整图片的位置和大小。