java+poi在Excel中生成二维码

代码如下:

第一种:
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个单元格的行号
经验分享 程序员 微信小程序 职场和发展