Java 使用 Apache POI 将 JSON 数据写入 Excel 表格并插入图片
Java 使用 Apache POI 将 JSON 数据写入 Excel 表格并插入图片
本文介绍了如何使用 Java 的 Apache POI 库将 JSON 数据写入 Excel 表格,并附带将图片地址转换为图片并插入单元格的代码示例。
第一段代码:
String[] displayKeys = {"编号", "上传日期", "图片", "姓名"};
String[] dataKeys = {"id", "date", "images", "username"};
xlsx.create(path, fileName, "xlsx");
String flag = xlsx.writeInXlsxBulk(tempData.toString(), null, displayKeys, dataKeys);
第二段代码:
public String writeInXlsxBulk(String jsonstr, String title, String[] displayKeys, String[] dataKeys) {
if(file==null) {
return "error";
}
int rowcount = 0;
String result = "";
try {
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sheet = wb.createSheet();
Row r = null;
Cell c = null;
CellStyle cs1 = wb.createCellStyle();
Font font1 = wb.createFont();
//DataFormat df = workbook.createDataFormat();
font1.setFontHeightInPoints((short)12);
cs1.setFont(font1);
cs1.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
//cs1.setFillPattern((short)0);
wb.setSheetName(0, "sheet1");
//write in title
if(title != null) {
r = sheet.createRow(rowcount);
r.setHeight((short)(256*1.5));
rowcount++;
c = r.createCell(0);
c.setCellStyle(cs1);
c.setCellValue(title);
}
//write in keys
r = sheet.createRow(rowcount);
r.setHeight((short)(256*1.5));
rowcount++;
for(int i=0;i<displayKeys.length;i++) {
sheet.setColumnWidth(i, 256*4*displayKeys[i].getBytes().length/2);
c = r.createCell(i);
c.setCellStyle(cs1);
c.setCellValue(displayKeys[i]);
}
//write in data
JSONObject json = new JSONObject(jsonstr);
System.out.println(json);
JSONArray data = json.getJSONArray("data");
int length = data.length();
for(int i=0; i<length;i++) {
r=sheet.createRow(i+rowcount);
r.setHeight((short)(256*1.5));
int cellNum = 0;
JSONObject temp = new JSONObject(data.optString(i));
for(cellNum=0;cellNum<displayKeys.length;cellNum++) {
String value = temp.optString(dataKeys[cellNum]);
CellUtil.createCell(r, cellNum, value);
// 如果当前数据为图片地址,则插入图片
if (dataKeys[cellNum].equals("images")) {
// 获取图片字节数组
URL imageUrl = new URL(value); // 假设 value 是图片 URL 地址
InputStream imageStream = imageUrl.openStream();
byte[] byteArray = IOUtils.toByteArray(imageStream);
// 插入图片
int pictureIndex = wb.addPicture(byteArray, HSSFWorkbook.PICTURE_TYPE_JPEG);
HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) cellNum, i+rowcount, (short) (cellNum+1), i+rowcount+1);
HSSFPicture picture = patriarch.createPicture(anchor, pictureIndex);
picture.resize();
}
}
}
FileOutputStream fsout = new FileOutputStream(file);
wb.write(fsout);
fsout.flush();
fsout.close();
wb.dispose();
wb.close();
isNewFile = false;
result = "success";
filesize = String.valueOf(file.length());
}
catch (Exception e) {
e.printStackTrace();
result = "error";
}
return result;
}
说明:
- 代码中使用了 Apache POI 的
HSSFClientAnchor和HSSFPicture类来创建图片对象并将其插入单元格。 images数据存储的图片地址需要替换为实际的图片 URL 地址。- 代码中使用了
IOUtils.toByteArray方法将图片流转换为字节数组,需要导入org.apache.commons.io.IOUtils类。 - 插入图片时需要指定图片类型,代码中使用的是
HSSFWorkbook.PICTURE_TYPE_JPEG,可以根据实际情况修改。 - 代码中使用了
picture.resize()方法调整图片大小,可以根据需要修改参数。
完整代码示例:
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.commons.io.IOUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.SXSSFWorkbook;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
public class WriteDataToExcelWithImages {
public static void main(String[] args) throws Exception {
// 假设 JSON 数据为
String jsonData = "{"data":[{"id":"1","date":"2023-03-08","images":"https://www.example.com/image1.jpg","username":"张三"},{"id":"2","date":"2023-03-09","images":"https://www.example.com/image2.jpg","username":"李四"},{"id":"3","date":"2023-03-10","images":"https://www.example.com/image3.jpg","username":"王五"}]}";
String[] displayKeys = {"编号", "上传日期", "图片", "姓名"};
String[] dataKeys = {"id", "date", "images", "username"};
// 创建 Excel 文件
String fileName = "data.xlsx";
String path = "path/to/your/excel/file";
// 创建 Excel 对象
ExcelWriter xlsx = new ExcelWriter();
xlsx.create(path, fileName, "xlsx");
// 写入数据
xlsx.writeInXlsxBulk(jsonData, null, displayKeys, dataKeys);
}
public String writeInXlsxBulk(String jsonstr, String title, String[] displayKeys, String[] dataKeys) {
// ... 代码同上 ...
}
}
注意:
上述代码仅供参考,具体实现可能需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/qC6A 著作权归作者所有。请勿转载和采集!