使用NPOI读取word表格里面的图片

一、引用NuGetGet里的npoi,如下图:

 二、打开文件

Stream stream = File.OpenRead(@"C:\Test\\11.docx");
XWPFDocument doc = new XWPFDocument(stream);

三、获取word里面所有的表格

var allTables = doc.Tables;

四、获得表格的所有行

var rows = table.Rows;

五、获得行下的所有列

var cells = row.GetTableCells();

六、获得列里的图片

var run = cell.Paragraphs[0].Runs[0];
List<XWPFPicture> xwpfPictureList = run.GetEmbeddedPictures();

七、得到图片的二进制数据

var data = xwpfPictureList[0].GetPictureData();
var picData = data.Data;

八、把二进制转换为image并保存到本地

var image = GetImageFromByte(picData);
image.Save(@"C:\Test\pics\\0603-" + i + ".png");

 

下面是完整的代码:

复制代码
                Stream stream = File.OpenRead(@"C:\Test\\11.docx");
                XWPFDocument doc = new XWPFDocument(stream);
                var allTables = doc.Tables;
                int i = 1;
                foreach (var table in allTables)
                {
                    var rows = table.Rows;
                    foreach (var row in rows)
                    {
                        var cells = row.GetTableCells();
                        foreach (var cell in cells)
                        {
                            if (cell.Paragraphs[0].Runs.Count > 0)
                            {
                                var run = cell.Paragraphs[0].Runs[0];
                                List<XWPFPicture> xwpfPictureList = run.GetEmbeddedPictures();
                                if (xwpfPictureList.Count > 0)
                                {
                                    var data = xwpfPictureList[0].GetPictureData();
                                    var picData = data.Data;
                                    var image = GetImageFromByte(picData);
                                    image.Save(@"C:\Test\pics\\0603-" + i + ".png");
                                    i++;
                                }
                            }
                        }
                    }

                }
复制代码
        public System.Drawing.Image GetImageFromByte(byte[] streamByte)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            return img;
        }

 

posted @   星星c#  阅读(2471)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示