代码如下:
第一种:
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.goole.zxing.qrcode.QRCodeWriter;
……
XSSFSheet sheet = (XSSFSheet) workbook.getSheet("SheetName");
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
//设置二维码内容和大小
ByteArrayOutputStream baos = (ByteArrayOutputStream)generateQRCodeImage("二维码内容", 400, 400);
//二维码坐标设置(注:后4个参数是二维码显示范围从(0,0)单元格到(3,4)单元格,单元格之间是否存在合并都没有影响)
XSSFClientAnchor anchor = new XSSFClientAnchor(0 , -20000, -30000 , 0, 0, 0, 3, 4);
//将二维码图片插入Excel中
patriarch.createPicture(anchor, workbook.addPicture(baos.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG));
public OutputStream generateQRCodeImage(String qrStr, int widths, int heights) throws Exception {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(qrStr,BarcodeFormat.QR_CODE,widths,heights);
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG",byteArrayOutStream);
return byteArrayOutStream;
}
第二种:
CreationHelper helper = workbook.getCreationHelper();
ByteArrayOutputStream baos = (ByteArrayOutputStream) QRCodeGenerator.generateQRCodeImage("二维码内容", 400, 400);
ClientAnchor anchor = helper.createClientAnchor();
//二维码坐标设置
anchor.setCol1(0);
anchor.setRow1(0);
//图片结束列数anchor.setCol2(3);
//图片结束行数anchor.setRow2(4);
//将二维码图片插入Excel中
Picture pict = patriarch.createPicture(anchor, workbook.addPicture(baos.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG));
pict.resize();
XSSFClientAnchor的参数说明:
XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)
// dx1 第1个单元格中x轴的偏移量
// dy1 第1个单元格中y轴的偏移量
// dx2 第2个单元格中x轴的偏移量
// dy2 第2个单元格中y轴的偏移量
// col1 第1个单元格的列号
// row1 第1个单元格的行号
// col2 第2个单元格的列号
// row2 第2个单元格的行号