Ответ зависит от типа файла Excel
.
Для Office Open XML
формата *.xlsx
Он прост:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.util.IOUtils;
public class CreateExcelXSSFSheetBackgroundPicture {
public static void main(String[] args) throws Exception {
try (XSSFWorkbook workbook = new XSSFWorkbook();
FileOutputStream out = new FileOutputStream("CreateExcelXSSFSheetBackgroundPicture.xlsx")) {
XSSFSheet sheet = workbook.createSheet("Sheet1");
//add picture data to this workbook.
FileInputStream is = new FileInputStream("dummy.png");
byte[] bytes = IOUtils.toByteArray(is);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
is.close();
//add relation from sheet to the picture data
String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx))
.getRelationship().getId();
//set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(rID);
workbook.write(out);
}
}
}
Для двоичного файла BIFF
формат *.xls
это так же сложно, как и Использование java.awt.image.BufferedImage для создания BIFF8-записи BIFF8 занимает много времени - есть ли лучший подход? .