RJava Apache POI Excel(XSSF)删除图片

我无法使用xlsx库从Excel文档中删除图像。 没有内置的方法(只是addPicture),但是你可以通过RJava调用任意的Java命令到Apache POI库。

我可以删除实际的图片数据:

library(xlsx) workbook = loadWorkbook("Book1.xlsx") pictures = workbook$getAllPictures() image = pictures$get(as.integer(0)) packagePart = image$getPackagePart() package = packagePart$getPackage() parts = (package$getParts()) # Index 7 is "Java-Object{Name: /xl/media/image1.png - Content Type: image/png}" image_ref = parts$get(as.integer(7)) package$deletePartRecursive(image_ref$getPartName()) 

但是,这并不能消除表单中的关系 。 Excel文件较小(不再包含图像),但是当我打开它时,会出现一个很大的图像丢失现象,“此图像目前无法显示”。

理论上,关系应该已经被删除 – deletePartRecursive删除了关系 – 但是如果你调用image_ref$hasRelationships()你会得到FALSE。 由于某种原因,它没有填充。

这使我相信我只需要删除图像关系。 我可以通过抓取描述关系的绘图对象来做到这一点(因为文件中没有任何东西)

 drawings = parts$get(as.integer(6)) drawings$clearRelationships() 

这(似乎)删除的关系,但是当我打电话saveWorkbook没有任何反应。

同上,如果我以任何其他方式导航到绘图对象,例如通过工作表:

 sheet = workbook$getSheetAt(as.integer(0)) sheet$getRelations() [1] "Java-Object{[Name: /xl/drawings/drawing1.xml - Content Type: application/vnd.openxmlformats-officedocument.drawing+xml]}" refs = sheet$getRelations() refs$get(as.integer(0)) drawing_object = refs$get(as.integer(0)) 

不幸的是,drawing_object是XSSFDrawing的成员,它缺less任何删除方法。 和XSSFPictureData,PackageRelationship或删除方法的任何组合似乎并没有工作。

我在这里错过了很明显的东西吗 如何删除Excel中的图片关系?

谢谢。