怎样往xlsx文件的Sheet1单元格A1嵌入图片D:\1.jpg
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!");
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 感谢两位的帮助。图片能嵌入了,现在又发现不会删除指定单元格的图片。
sheet.delPicture("A1")
y4h3z4 delPicture是要用到libxl库的吧?用com.excel的有办法吗?
原来程序用的是com.excel,用新库要变动比较多。
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();
非常感谢。
要是能删除任意单元格任意不确定的图片就好了。