先看效果:
再看代码:
@RequestMapping("/create")
public String createExcel(QrCodeData qrCodeData) throws Exception {
// 创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//在生成的Excel文件基础上,在生成一个以qrCodeData.getWordNo()命名的工作表
HSSFSheet sheetAll = wb.createSheet(qrCodeData.getWordNo());
// 工作表的第一行
HSSFRow hssfRow = sheetAll.createRow(0);
//第一行的第一个单元格
HSSFCell cellAll = hssfRow.createCell( (short) 1);
//第一行的第一个单元格的值
cellAll.setCellValue("单号:");
//第一行的第二个单元格
cellAll = hssfRow.createCell((short) 2);
//第一行的第二个单元格的值
cellAll.setCellValue(qrCodeData.getOrderNo());
// 依次类推
hssfRow = sheetAll.createRow(1);
cellAll = hssfRow.createCell((short) 1);
cellAll.setCellValue("类别:");
cellAll = hssfRow.createCell((short) 2);
cellAll.setCellValue(qrCodeData.getTypeStr());
hssfRow = sheetAll.createRow(2);
cellAll = hssfRow.createCell((short) 1);
cellAll.setCellValue("型号:");
cellAll = hssfRow.createCell((short) 2);
cellAll.setCellValue(qrCodeData.getSizeNo());
hssfRow = sheetAll.createRow(3);
cellAll = hssfRow.createCell((short) 1);
cellAll.setCellValue("批次:");
cellAll = hssfRow.createCell((short) 2);
cellAll.setCellValue(qrCodeData.getNumNo());
hssfRow = sheetAll.createRow(4);
cellAll = hssfRow.createCell((short) 1);
cellAll.setCellValue("工作号: ");
cellAll = hssfRow.createCell((short) 2);
cellAll.setCellValue(qrCodeData.getWordNo());
// 在这个工作表上画图
HSSFPatriarch drawingPatriarch = sheetAll.createDrawingPatriarch();
// 二维码辅助类
QRcodeUtil qRcodeUtil = new QRcodeUtil();
// 生成二维码的保存地址(当前项目\\aQrCodeFile\\aQrCodeImg\\目录里)
String qrCodeImage = qRcodeUtil.getQRCodeImage(qrCodeData.getSizeNo(), 200, 200, System.getProperty ("user.dir") + "\\aQrCodeFile\\aQrCodeImg\\", "订单号--"+qrCodeData.getOrderNo());
// 用文件流写入,不详细说了
BufferedImage bufferImg = null;
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File(qrCodeImage));
ImageIO.write(bufferImg, "jpg", byteArrayOut);
//anchor主要用于设置图片的属性 可以搜下HSSFClientAnchor的参数
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 5, 2, (short) 9, 12);
//设置图片的移动和缩放
anchor.setAnchorType(ClientAnchor.AnchorType.byId(3));
//插入图片到excel
drawingPatriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
// 将excel文件存到指定位置
File file = new File(System.getProperty ("user.dir")+ "\\aQrCodeFile\\");
if(!file.exists()){
file.mkdirs();
}
//当前时间命名excel
String nowDateStr = new SimpleDateFormat("YYYYMMddHHmmss").format(new Date());
//保存文件到:当前项目\\aQrCodeFile\\里
FileOutputStream fout = new FileOutputStream(System.getProperty ("user.dir")+ "\\aQrCodeFile\\" + nowDateStr +".xls");
wb.write(fout);
fout.close();
//我是配置的tomcat,所以返回的文件名
return nowDateStr +".xls";
}
缺少的类和依赖,都粘贴到下边了,如果还缺少啥的话,私信或者留言都可以:
依赖
<!-- POI依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!-- 生成二维码依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.0</version>
</dependency>
QRcodeUtil 二维码辅助类
public class QRcodeUtil {
/**
* 生成发送二维码方法
*
* @param text 二维码生成规则(二维码可以是任何英文字母加数字生成的二维码)
* @param width 宽度
* @param height 高度
* @param filePath 输出图片地址
*/
public String getQRCodeImage(String text, int width, int height, String filePath, String fileNewName) throws WriterException, IOException {
File file = new File(filePath);
if (!file.exists()){
file.mkdirs();
}
//生成二维码类
QRCodeWriter qrCodeWriter = new QRCodeWriter();
//生成的二维码
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
//生成图片唯一名称,加上.png格式
String pat = fileNewName + ".png";
//图片路劲加上图片名称 (输出地址)
filePath += pat;
Path path = FileSystems.getDefault().getPath(filePath);
//输出二维码图片
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
return filePath;
}
}
QrCodeData 实体类,请自行Get Set方法
/** 注释 */
private String orderNo;
/** 注释 */
private String typeStr;
/** 注释 */
private String sizeNo;
/** 注释 */
private String numNo;
/** 注释 */
private String wordNo;
全部的就在这了,创建一个springboot项目,复制粘贴即可。
结构