NPOI Excel用OLE对象的形式插入文件附件以及插入图片

发布于:2025-06-08 ⋅ 阅读:(18) ⋅ 点赞:(0)
static void Main(string[] args)
{
    XlsWithObjData();
    Console.WriteLine("输出完成");
}
       
static void XlsWithObjData()
{
    // 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("Sheet1");
    IRow row = sheet.CreateRow(0);
    ICell cell = row.CreateCell(0);

    // 读取ZIP文件为字节数组
    byte[] zipData = File.ReadAllBytes("001.pdf");
    var imgData = File.ReadAllBytes("001.png");
    var iconid = workbook.AddPicture(imgData, PictureType.PNG);
    var pdfIdx = workbook.AddOlePackage(zipData, "222.pdf", "333.pdf", "111.pdf");

    HSSFPatriarch drawing = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
    HSSFClientAnchor anchor = (HSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, 1, 1, 0, 0);
    anchor.AnchorType = AnchorType.MoveAndResize;
    drawing.CreateObjectData(anchor, pdfIdx, iconid);

    // 保存文件
    var fileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xls";
    FileStream fs = new FileStream(fileName, FileMode.Create);
    workbook.Write(fs);
    fs.Close();
    workbook.Close();
}
//插入图片
static void InsertImg()
{
    //创建工作簿
    HSSFWorkbook wk = new HSSFWorkbook();
    ISheet sheet = wk.CreateSheet("sheet1");
    //sheet.SetColumnWidth(0, 1);
    //sheet.AutoSizeColumn(0);

    //添加内容
    IRow row = sheet.CreateRow(0);
    ICell cell = row.CreateCell(0);
    HSSFRichTextString rich = new HSSFRichTextString("签名:");
    cell.SetCellValue(rich);

    //添加图片
    byte[] bytes = System.IO.File.ReadAllBytes("001.png");
    int pictureIdx = wk.AddPicture(bytes, PictureType.PNG);
    HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();

    //HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
    HSSFClientAnchor anchor = new HSSFClientAnchor(223, 0, 0, 0, 0, 0, 1, 1);
    //设置图片变换类型
    anchor.AnchorType = AnchorType.MoveDontResize;
    HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
    //pict.Resize(100,50);
    //保存到文件
    var fileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") +"图片"+ ".xls";
    FileStream fs = new FileStream(fileName, FileMode.Create);
    wk.Write(fs);
    fs.Close();
    wk.Close();
    Console.WriteLine("导出数据成功!");
}

参考

https://blog.csdn.net/m0_72440880/article/details/137240571