求助:怎样嵌入图片到xlsx文件的单元格

y4h3z4 15天前 229

怎样往xlsx文件的Sheet1单元格A1嵌入图片D:\1.jpg

最新回复 (10)
  • lcj21 15天前
    0 2
    import win;
    import com.excel;
    
    // 创建 Excel 应用程序对象
    var excelApp = com.excel(); // 创建新的 Excel 实例
    
    // 打开一个现有的 xlsx 文件(假设文件路径为 D:\test.xlsx)
    var workbook = excelApp.Workbooks.Open("D:\test.xlsx");
    
    // 获取 Sheet1 工作表
    var sheet = excelApp.ActiveWorkbook.Sheets(1);
    
    // 选择单元格 A1
    var cell = sheet.Range("A1");
    
    // 设置单元格的行高和列宽以适应图片(可选)
    cell.RowHeight = 100; // 设置行高
    cell.ColumnWidth = 20; // 设置列宽
    
    // 嵌入图片
    var picture = sheet.Shapes.AddPicture(
        "D:\1.jpg", // 图片路径
        false,       // 不链接到文件
        true,        // 保存图片随文档
        cell.Left,   // 图片左边缘位置
        cell.Top,    // 图片上边缘位置
        -1,          // 宽度(-1 表示保持原始宽度)
        -1           // 高度(-1 表示保持原始高度)
    );
    
    // 调整图片大小以适应单元格(可选)
    picture.LockAspectRatio = false; // 允许调整宽高比
    picture.Width = cell.Width;      // 设置图片宽度与单元格相同
    picture.Height = cell.Height;    // 设置图片高度与单元格相同
    
    // 保存工作簿
    workbook.Save();
    
    // 关闭工作簿并退出 Excel
    workbook.Close();
    excelApp.Quit();
    
    
    // 提示完成
    win.msgbox("图片已成功嵌入到单元格 A1!");


  • 光庆 14天前
    0 3
    import godking.libxl
    var book = godking.libxl.open("\abc.xlsx",)
    var sheet = book.sheet()
    var pictureId = book.addPicture("\图.png")
    sheet.setPicture("A1", pictureId, 0, 0, 0, 0)
    book.save()
    book.close()


  • y4h3z4 14天前
    0 4

    感谢两位的帮助。


    图片能嵌入了,现在又发现不会删除指定单元格的图片。

  • 光庆 14天前
    0 5
    y4h3z4 感谢两位的帮助。图片能嵌入了,现在又发现不会删除指定单元格的图片。

    sheet.delPicture("A1")

  • y4h3z4 14天前
    0 6
    delPicture是要用到libxl库的吧?用com.excel的有办法吗?
  • aika107 14天前
    0 7
    y4h3z4 delPicture是要用到libxl库的吧?用com.excel的有办法吗?
    有更好用的库,咋还舍不得放弃com.excel呢
  • y4h3z4 14天前
    0 8

    原来程序用的是com.excel,用新库要变动比较多。

  • lcj21 14天前
    0 9
    此楼层已删除
  • lcj21 14天前
    0 10
    y4h3z4 原来程序用的是com.excel,用新库要变动比较多。
    import win;
    import com.excel;
    import win.ui;
    
    /*DSG{{*/
    var winform = win.form(text="Excel图片操作";right=400;bottom=150)
    winform.add(
        buttonInsert={cls="button";text="插入图片";left=40;top=40;right=160;bottom=80;z=1};
        buttonDelete={cls="button";text="删除图片";left=200;top=40;right=320;bottom=80;z=2}
    )
    /*}}*/
    
    // 插入图片函数
    insertPicture = function() {
        try {
            var excelApp = com.excel(); 
            var workbook = excelApp.Workbooks.Open("D:\test.xlsx");
            var sheet = excelApp.ActiveWorkbook.Sheets(1);
            var cell = sheet.Range("A1");
            
            cell.RowHeight = 100; 
            cell.ColumnWidth = 20; 
            
            // 先删除可能存在的旧图片
            deletePicture(sheet);
            
            var picture = sheet.Shapes.AddPicture(
                "D:\1.jpg", 
                false, 
                true, 
                cell.Left, 
                cell.Top, 
                -1, 
                -1
            );
            
            picture.LockAspectRatio = false; 
            picture.Width = cell.Width; 
            picture.Height = cell.Height; 
            
            // 给图片命名,方便后续删除
            picture.Name = "A1_Picture";
            
            workbook.Save();
            workbook.Close();
            excelApp.Quit();
            
            win.msgbox("图片已成功嵌入到单元格 A1!");
        }
        catch(e) {
            win.msgbox("插入图片时出错:" + e);
        }
    }
    
    // 删除图片函数(直接按名称或位置删除)
    deletePicture = function(sheet) {
        try {
            var cell = sheet.Range("A1");   //这个就是指定的单元格
            var shapes = sheet.Shapes;
            
            // 方法1:按图片名称删除(推荐)
            try {
                var pic = shapes.Item("A1_Picture");
                pic.Delete();
            }
            catch(e) {
                // 如果找不到指定名称的图片,则按位置删除
                for(i=shapes.Count; 1; -1) {
                    var shape = shapes(i);
                    if(shape.Top >= cell.Top && shape.Left >= cell.Left 
                        && shape.Top <= cell.Top + cell.Height 
                        && shape.Left <= cell.Left + cell.Width) {
                        shape.Delete();
                        break; // 只删一张(若需删全部,去掉 break)
                    }
                }
            }
        }
        catch(e) {
            // 忽略错误(可能没有图片)
        }
    }
    
    // 删除图片按钮函数
    deletePictureFromExcel = function() {
        try {
            var excelApp = com.excel();
            var workbook = excelApp.Workbooks.Open("D:\test.xlsx");
            var sheet = excelApp.ActiveWorkbook.Sheets(1);
            
            deletePicture(sheet);
            
            workbook.Save();
            workbook.Close();
            excelApp.Quit();
            
            win.msgbox("A1单元格的图片已删除!");
        }
        catch(e) {
            win.msgbox("删除图片时出错:" + e);
        }
    }
    
    // 绑定按钮事件
    winform.buttonInsert.oncommand = function(id,event){
        insertPicture();
    }
    
    winform.buttonDelete.oncommand = function(id,event){
        deletePictureFromExcel();
    }
    
    winform.show();
    win.loopMessage();


  • y4h3z4 13天前
    0 11

    非常感谢。

    要是能删除任意单元格任意不确定的图片就好了。

返回