如何将含图片的HTML字符串正确写入Excel单元格并显示图片?
如何将含图片的HTML字符串正确写入Excel单元格(Aspose实现)
原始HTML字符串
string htmlString = "<img src=\"https://dev.azure.com/hungtrinh25197/ffda2280-d6d0-45d9-80ce-14da52703545/_apis/wit/attachments/d3fc19e0-5e4b-42b6-9759-734a366c777b?fileName=image.png\" alt=Image><br><div><b>ádasdasd<br><br><br><i><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd </b><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd</b></i><br></b></div>";
问题说明
使用Aspose的sheet.Cells["A1"].HtmlString = htmlString;方法无法正确显示HTML中的图片和完整格式,需要实现同时展示文本格式与图片的效果。
解决方案
Aspose的HtmlString属性仅支持解析文本相关的HTML格式,对<img>标签的支持不足,因此需要分离处理文本格式和图片插入:
步骤1:提取纯文本HTML内容
将原始HTML中的<img>标签分离,保留剩余文本格式部分,用于设置单元格的富文本。
步骤2:设置单元格文本格式
用处理后的纯文本HTML设置单元格的HtmlString属性,实现文本的加粗、换行等格式。
步骤3:单独插入图片
下载图片资源,将其插入到工作表中,并调整图片的位置、大小,使其与目标单元格对齐,同时调整行高以容纳图片和文本。
完整代码示例
using Aspose.Cells; using System.IO; using System.Net; // 原始HTML字符串 string htmlString = "<img src=\"https://dev.azure.com/hungtrinh25197/ffda2280-d6d0-45d9-80ce-14da52703545/_apis/wit/attachments/d3fc19e0-5e4b-42b6-9759-734a366c777b?fileName=image.png\" alt=Image><br><div><b>ádasdasd<br><br><br><i><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd </b><b style=\"box-sizing:border-box;\">ádasdasd</b><b style=\"box-sizing:border-box;\">ádasdasd</b></i><br></b></div>"; // 分离图片标签与文本HTML内容 int imgStartIndex = htmlString.IndexOf("<img"); int imgEndIndex = htmlString.IndexOf(">", imgStartIndex) + 1; string textOnlyHtml = htmlString.Remove(imgStartIndex, imgEndIndex - imgStartIndex); // 初始化Workbook和Worksheet Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; Cell targetCell = sheet.Cells["A1"]; // 设置单元格的文本格式 targetCell.HtmlString = textOnlyHtml; // 下载图片并插入到工作表 using (WebClient webClient = new WebClient()) { // 若图片URL需要认证,需在此添加请求头,例如webClient.Headers.Add("Authorization", "Bearer token"); byte[] imageData = webClient.DownloadData("https://dev.azure.com/hungtrinh25197/ffda2280-d6d0-45d9-80ce-14da52703545/_apis/wit/attachments/d3fc19e0-5e4b-42b6-9759-734a366c777b?fileName=image.png"); using (MemoryStream imageStream = new MemoryStream(imageData)) { // 在目标单元格位置插入图片 int pictureIndex = sheet.Pictures.Add(targetCell.Row, targetCell.Column, imageStream); Picture insertedPic = sheet.Pictures[pictureIndex]; // 调整图片位置与单元格对齐 insertedPic.Left = targetCell.Left; insertedPic.Top = targetCell.Top; // 限制图片宽度不超过列宽(可根据需求调整) insertedPic.Width = sheet.Cells.Columns[targetCell.Column].WidthInch * 96; // 96DPI转换 // 调整行高以容纳图片和文本 sheet.Cells.Rows[targetCell.Row].Height = insertedPic.Height + targetCell.Height; } } // 保存Excel文件 workbook.Save("FormattedOutput.xlsx");
注意事项
- 若图片URL需要身份认证,需在
WebClient中添加对应的请求头(如Bearer Token)以获取图片资源。 - 图片的大小和位置可根据实际需求进一步调整,确保与文本内容的排版协调。
- 需确保项目中已正确引用Aspose.Cells NuGet包。
内容的提问来源于stack exchange,提问作者Hưng Trịnh
相关产品推荐
相关产品推荐

