使用 NPOI 将图像插入 Excel 文件

2024-01-28

我正在使用 C# 在 Visual Studio 2010 中编写一个程序,并且正在使用 NPOI 库。

我正在尝试将图像插入到 Excel 文件中。我尝试了两种不同的方法,但都不起作用。

//Method 1

HSSFPatriarch patriarch = newSheet.CreateDrawingPatriarch() as HSSFPatriarch;
HSSFClientAnchor anchor;
var memoryStream = new MemoryStream();
System.Drawing.Image image = System.Drawing.Image.FromFile("image.jpeg");
image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif);
anchor = new HSSFClientAnchor(0, 0, 255, 255, 0, 0, 0, 0);
anchor.AnchorType = 2; //types are 0, 2, and 3. 0 resizes within the cell, 2 doesn't
int index = newWorkbook.AddPicture(memoryStream.ToArray(), PictureType.JPEG);
HSSFPicture signaturePicture = patriarch.CreatePicture(anchor, index) as HSSFPicture; //ERROR

使用方法1,当我尝试编译时捕获了异常。错误消息是Object reference not set to an instance of an object,并且错误发生在代码的最后一行。

//Method 2

byte[] data = File.ReadAllBytes("image.jpeg");
int picInd = newWorkbook.AddPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG);
XSSFCreationHelper helper = newWorkbook.GetCreationHelper() as XSSFCreationHelper;
XSSFDrawing drawing = newSheet.CreateDrawingPatriarch() as XSSFDrawing;
XSSFClientAnchor anchor = helper.CreateClientAnchor() as XSSFClientAnchor;
anchor.Col1 = 0;
anchor.Row1 = 0;
XSSFPicture pict = drawing.CreatePicture(anchor, picInd) as XSSFPicture;

方法2编译运行没有问题。但是当我尝试打开创建的 Excel 文件时,我收到一条消息说Excel found unreadable content in 'output.xlsx'. Do you want to recover the contents of this workbook?我恢复了工作簿,但仍然没有显示图像。

插入图像后下一步是Clone同一工作簿中的工作表。使用方法 2 时,根本没有创建克隆表,我不确定图像问题解决后是否会解决此问题。

有人可以帮我解决这个问题吗?我想知道如何使这两种方法正常工作,或者是否有另一种方法将图像插入 Excel 文件。

另外,作为注释,我正在使用XSSFWorkbook, XSSFSheet,等等(不是HSSF),我的输出文件是.xlsx

感谢任何帮助/建议,谢谢!


你的方法2没问题。但你需要添加pict.Resize();在最后一行。

byte[] data = File.ReadAllBytes("image.jpeg");
int picInd = newWorkbook.AddPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG);
XSSFCreationHelper helper = newWorkbook.GetCreationHelper() as XSSFCreationHelper;
XSSFDrawing drawing = newSheet.CreateDrawingPatriarch() as XSSFDrawing;
XSSFClientAnchor anchor = helper.CreateClientAnchor() as XSSFClientAnchor;
anchor.Col1 = 0;
anchor.Row1 = 0;
XSSFPicture pict = drawing.CreatePicture(anchor, picInd) as XSSFPicture;
pict.Resize();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NPOI 将图像插入 Excel 文件 的相关文章

  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • is_integral 与 is_integer:其中之一是多余的吗?

    是积分 http en cppreference com w cpp types is integral and 是整数 http en cppreference com w cpp types numeric limits is inte
  • dup2() 和 exec()

    include
  • C# 测试活动的互联网连接。 Ping google.com

    C 2008 我正在使用此代码来测试互联网连接 因为我的应用程序必须登录到网络服务器 但是 如果用户互联网连接失败或电缆被拔出 我必须通知用户 Ping www google com to check if the user has a i
  • 使用空函数调用 hana::is_valid 的用途是什么?

    Boost Hana https www boost org doc libs 1 61 0 libs hana doc html index html offers boost hana is valid https www boost
  • 为什么这个 oracle 批量插入不起作用?

    我正在尝试将一些数据批量插入到 oracle 数据库中 我按照文档中的示例进行操作 this DataBaseAccess new OracleConnection connString var dataAdapter new Oracle
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 我要恢复我的记忆!我怎样才能真正处理一个控件?

    我正在制作一个应用程序 它创建大量的窗口控件 按钮和标签等 它们都是通过函数动态生成的 我遇到的问题是 当我删除控件并处置它们时 它们不会从内存中删除 void loadALoadOfStuff while tabControlToClea
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 为什么这个单独的定义会导致错误?

    挑战 我有这段代码无法编译 你能找出问题所在吗 有一次让我很头疼 header namespace values extern std string address extern int port cpp file std string v
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • DataGridView 捕获用户行选择

    我在处理选择时遇到问题DataGridView 我的网格视图包含一个金额列 表单上有一个文本框 应显示所选网格视图行的总数 因此 我需要在用户选择 取消选择 gridview 行时捕获事件并相应地计算 添加 减去 金额 我找到了两种方法 使

随机推荐

  • 获取与 ggplot + stat_ecdf() 关联的数据

    我喜欢stat ecdf ggplot2 包的功能部分 我发现它对于探索数据系列非常有用 然而 这只是视觉上的 我想知道是否可行 如果是 如何 获取关联的表 请查看以下可重现的示例 p lt ggplot iris aes string x
  • Java 8 Streams 查看 API

    我尝试了以下 Java 8 代码片段peek List
  • 将变量设置为“this”是否有功能目的? [复制]

    这个问题在这里已经有答案了 就像 有时当我查看其他人的代码时 他们会去var self this 或者以 jquery 为例 govar self this 这样做有什么特殊原因吗 它保留了以下的价值this用于当前函数内定义的函数 Con
  • 在 MATLAB 中求解多个非线性独立方程的最快方法?

    MATLAB 有两种求解非线性方程的方法 fzero https mathworks com help matlab ref fzero html 求解单个非线性方程 fsolve https mathworks com help opti
  • 通过搜索文档找到最小片段的算法?

    我一直在阅读斯基纳 Skiena 出色的 算法设计手册 并沉迷于其中的一个练习 问题是 给定一个由三个单词组成的搜索字符串 找到包含所有三个搜索单词的文档的最小片段 即其中单词数量最少的片段 您将获得这些单词在搜索字符串中出现的索引位置 例
  • 如何在 postgresql 中找到死元组的大小?

    如何在 postgresql 中找到死元组的大小 我已经使用 pg dump 创建了数据库备份并将其恢复到其他服务器上 我发现两个数据库中的数据库大小存在差异 5 GB 我已经验证了表中的活元组和死元组 由于当前数据库中添加了新数据 存在行
  • 如何从子进程(通过 Parallel::ForkManager 分叉)传递变量?

    我的查询 在下面的代码中我试图打印 commandoutput 0 被转移或传递到即将到来的子程序中 我尝试通过转移来传递它 但我失败了 你能帮我正确的方法吗 Code my max forks 4 createThreads my com
  • 从具有开始/结束日期的行创建年份序列行的数据框

    我对 R 和编码来说是一个相对较新的用户 我已经搜索过但无法解决这个问题 我有以下数据 groupid start date end date Status 1 2014 01 01 2017 01 01 A 1 2018 01 01 20
  • Python - 检查字母是否在列表中

    如果一个字母 字符串 在列表中 find letter o 你好 c 再见 返回 True 否则返回 False def find letter lst lst o hello 1 n o if not lst return 0 elif
  • 响应式背景图像 bootstrap 3

    我正在使用 bootstrap 并试图使我的背景图像具有响应能力 但它不起作用 这是我的代码 html div class row div class bg img src img home bg jpg alt home backgrou
  • `Class of` 类型声明的含义是什么?

    在查看我的代码之一时 我陷入了如下的一项声明 TMyObjectClass class of TMyObject 我有点困惑 想知道这句话的含义是什么 作为TMyObjectClass声明之上没有任何声明 and TMyObject声明如下
  • ElasticSearch:未分配的分片,如何修复?

    我有一个有4个节点的ES集群 number of replicas 1 search01 master false data false search02 master true data true search03 master fals
  • 按下按钮刷新 tkinter 框架

    我正在使用来自的代码在 tkinter 中的两个框架之间切换 https stackoverflow com questions 7546050 switch between two frames in tkinter制作我的图形用户界面
  • 在 Swift 中将参数传递给选择器

    我正在构建一个应用程序来跟踪大学课程的阅读作业 每个 ReadingAssignment 都包含一个 Bool 值 指示读者是否已完成阅读作业 ReadingAssignments 被收集到 WeeklyAssignment 数组中 我希望
  • 具有相同标签的不同散点图标记

    我遇到了 类似 的问题Matplotlib 一个标签具有多个不同标记的图例 https stackoverflow com questions 9262307 matplotlib legend with multiple differen
  • 多个域的集成 Windows 身份验证

    我有一个针对域 A 用户的 Asp net 网站 具有集成 Windows 身份验证 现在B域的用户需要访问该网站 但域B用户访问网站时会弹出窗口输入验证信息 我的问题是 如何配置IIS或Windows Server 让B域用户像A域用户一
  • XAML 文件的智能感知 (Xamarin.Forms)

    在 Visual Studio 15 中 如何让 XAML Intellisense 适用于 Xamarin Forms 中的 XAML 文件 编辑 将答案与问题分开 这个解决方案是在这个论坛 https social msdn micro
  • 如何检测 Angular 中属性的更改

    我有一个带有子组件的组件timeline
  • $null 应该位于相等比较的左侧吗? (-eq 与数组)

    与同事讨论 应该 null是在支票的左边还是右边 有什么例子可以说明为什么这很重要吗 abc null null eq abc True abc eq null True All ok abc 6 7 null 8 9 null eq ab
  • 使用 NPOI 将图像插入 Excel 文件

    我正在使用 C 在 Visual Studio 2010 中编写一个程序 并且正在使用 NPOI 库 我正在尝试将图像插入到 Excel 文件中 我尝试了两种不同的方法 但都不起作用 Method 1 HSSFPatriarch patri