c#使用NPOI插入图片
时间: 2025-05-06 11:07:33 浏览: 53
### C# 中使用 NPOI 库插入图片到 Excel 的示例教程
以下是关于如何在 C# 中通过 NPOI 库将图片插入到 Excel 文件的具体实现方式:
#### 准备工作
为了成功运行此代码,需先安装 `NPOI` NuGet 包。可以通过 Visual Studio 的 NuGet Package Manager 安装该包。
```bash
Install-Package NPOI
```
---
#### 实现代码
以下是一个完整的代码示例,展示如何将一张 JPEG 图片插入到 Excel 文件的指定单元格中(例如第 5 行和第 5 列)[^2]。
```csharp
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
class Program
{
static void Main(string[] args)
{
// 创建一个新的 XSSFWorkbook 对象
IWorkbook workbook = new XSSFWorkbook();
// 添加一个新工作表
ISheet sheet = workbook.CreateSheet("Image Sheet");
// 加载要插入的图片文件
string imagePath = "Read-write-excel-npoi.jpg"; // 替换为实际路径
byte[] bytes = File.ReadAllBytes(imagePath);
// 将图片数据添加到 Workbook 中
int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);
// 获取当前工作表的绘图对象
IDrawing drawing = sheet.CreateDrawingPatriarch();
// 设置图片的位置参数
IClientAnchor anchor = drawing.CreateAnchor(0, 0, 0, 0, 5, 5, 6, 8);
// 参数解释:
// dx1: 图片左上角相对于单元格左边框的距离 (单位:EMU)
// dy1: 图片左上角相对于单元格顶边框的距离 (单位:EMU)
// dx2: 图片右下角相对于单元格右边框的距离 (单位:EMU)
// dy2: 图片右下角相对于单元格底边框的距离 (单位:EMU)
// col1: 起始列索引
// row1: 起始行索引
// col2: 结束列索引
// row2: 结束行索引
// 插入图片
IPicture pict = drawing.CreatePicture(anchor, pictureIdx);
pict.Resize(); // 自动调整图片大小以适应锚定区域
// 输出 Excel 文件
using (FileStream fileStream = new FileStream("output.xlsx", FileMode.Create))
{
workbook.Write(fileStream);
}
Console.WriteLine("图片已成功插入到 output.xlsx");
}
}
```
---
#### 关键点解析
1. **加载图片并转换为字节数组**
- 使用 `File.ReadAllBytes()` 方法读取本地图片文件的内容,并将其存储为字节数组。
2. **将图片添加到 Workbook**
- 调用 `workbook.AddPicture(byte[], PictureType)` 方法将图片注册到 Workbook 中,并返回其唯一索引号 `pictureIdx`[^4]。
3. **创建 Drawing Patriarch 和 Client Anchor**
- 绘图父级 (`IDrawing`) 是用于管理图形元素的对象。
- 锚定点 (`IClientAnchor`) 定义了图片在工作表中的起始位置和结束位置。
4. **插入图片**
- 调用 `drawing.CreatePicture(anchor, pictureIdx)` 方法完成图片的实际插入操作。
- 可调用 `pict.Resize()` 来自动缩放图片尺寸以适配定义的锚定区域。
5. **保存 Excel 文件**
- 使用 `workbook.Write(FileStream)` 方法将修改后的 Excel 数据写入磁盘文件。
---
#### 注意事项
- 如果需要支持 PNG 格式的图片,则应将 `PictureType.JPEG` 更改为 `PictureType.PNG`。
- 锚定点坐标 `(col1, row1, col2, row2)` 需根据实际情况调整,确保图片不会超出目标范围或遮挡其他重要数据。
- 当前示例针对 `.xlsx` 文件格式;如果处理 `.xls` 文件,则需替换 `XSSFWorkbook` 为 `HSSFWorkbook` 并相应调整 API 调用[^1]。
---
阅读全文
相关推荐


















