POI将网络图片添加到excel
生活随笔
收集整理的這篇文章主要介紹了
POI将网络图片添加到excel
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
主要看: 讀取網(wǎng)絡(luò)圖片,插入excel表格 部分
package com.example.demo.exect;import cn.hutool.core.lang.Console; import cn.hutool.core.util.ReUtil; import cn.hutool.http.HttpUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class Exect {public static void main(String[] args) throws IOException {Workbook wb = new XSSFWorkbook();Sheet sheet = wb.createSheet("明細(xì)");// 設(shè)置指定列的寬度sheet.setColumnWidth(24, 22 * 256);// 讀取excelString path = "C:\\Users\\Administrator\\Desktop\\待處理.xlsx";ExcelReader reader = ExcelUtil.getReader(new File(path), "明細(xì)");List<List<Object>> readAll = reader.read();long timeMillis = System.currentTimeMillis();// 貨號String hh = "0";// 圖片urlString picPath = null;// 商品品牌String name = null;int index = 0;for (int i = 0; i < readAll.size(); i++) {Row row = sheet.createRow(i);System.out.println(i + "行");for (Object lineObj : readAll.get(i)) {// 添加每個單元格數(shù)據(jù)row.createCell(index).setCellValue(lineObj + "");// 商品品牌if (index == 2){name = lineObj + "";System.out.println(" "+name);}// 貨號if (index == 11) {// 爬取圖片if (!hh.equals(lineObj)){hh = lineObj + "";// 根據(jù)貨號爬取圖片地址if (name.contains("阿迪")){System.out.println(" 查詢貨號:" + hh);picPath = setPicWH(getPicPath(hh + ""));}else if (name.contains("耐克")){// 耐克貨號名稱不帶-符號的話,自動加上if (!hh.contains("-")){hh = hh.substring(0,hh.length()-3) +"-"+hh.substring(hh.length()-3);System.out.println(" 查詢貨號:" + hh);}picPath = getPicPathNK(hh);}else{picPath = null;}}// 讀取網(wǎng)絡(luò)圖片,插入excel表格!!!if (picPath != null){// 設(shè)置行高row.setHeight((short) 2280);// URL url = new URL("https://img.adidas.com.cn/resources/2021/9/2/16305671552242554.JPG?x-oss-process=image/resize,m_pad,w_150,h_150,limit_0,color_ffffff");// 圖片url地址URL url = new URL(picPath);BufferedImage bufferImg = ImageIO.read(url);ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();ImageIO.write(bufferImg, "jpg", byteArrayOut);byte[] bytes = byteArrayOut.toByteArray();int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);byteArrayOut.close();CreationHelper helper = wb.getCreationHelper();Drawing drawing = sheet.createDrawingPatriarch();ClientAnchor anchor = helper.createClientAnchor();// 圖片存放- 列anchor.setCol1(24);// 圖片存放- 行anchor.setRow1(i);Picture pict = drawing.createPicture(anchor, pictureIdx);pict.resize();}}++index;}index = 0;}//save workbookString file = "處理完成-圖片.xls";if (wb instanceof XSSFWorkbook) {file += "x";}FileOutputStream fileOut = new FileOutputStream(file);wb.write(fileOut);fileOut.close();System.out.println("處理完成, 耗時(秒):" + (System.currentTimeMillis() - timeMillis) / 1000);}// 阿迪達(dá)斯public static String getPicPath(String path) {//String result = HttpUtil.get("https://www.adidas.com.cn/item/GY1028?isFromSearchPage=true");String result = HttpUtil.get("https://www.adidas.com.cn/item/" + path + "?isFromSearchPage=true");List<String> titles = ReUtil.findAll("<input type=\"hidden\" id=\"shoppingcartpic\" value=\"(.*?)\">", result, 1);if (titles == null || titles.size() == 0) {System.out.println(" 未查詢到商品圖片");return null;}return titles.get(0);}public static String getPicPathNK(String path) {// {countryLang} https://www.nike.com/cn/t/air-force-1-07-60-女子運(yùn)動鞋-ngqK8t/DR0148-171String result = HttpUtil.get("https://www.nike.com/cn/w?q="+path+"&vst="+path);// 匹配規(guī)則String reg = "countryLang}(.*?)\\\"}],";Pattern pattern = Pattern.compile(reg);// 內(nèi)容 與 匹配規(guī)則 的測試Matcher matcher = pattern.matcher(result);if( matcher.find() ){// 不包含前后的兩個字符String ma = matcher.group(1);String url = ma.substring(0, ma.indexOf(",") - 1);url = "https://www.nike.com/cn" + url.replace("\\u002F", "/");// 二次請求String resultUrl = HttpUtil.get(url);List<String> titles = ReUtil.findAll("<source srcSet=\"(.*?)\" media", resultUrl, 1);if (titles == null || titles.size() == 0) {System.out.println(" 未查詢到商品圖片");return null;}else{for (String title : titles) {//打印標(biāo)題if (title.contains("w_640")){String replace = title.replace("w_640", "w_115");return replace;}}}return null;}else{System.out.println(" 未查詢到商品圖片");return null;}}public static String setPicWH(String pic){if (pic != null){if (pic.contains("w_500,h_500")){return pic.replace("w_500,h_500", "w_150,h_150");}if (pic.contains("_500X500")){return pic.replace("_500X500", "") + "?x-oss-process=image/resize,m_pad,w_150,h_150,limit_0,color_ffffff";}}return null;}}總結(jié)
以上是生活随笔為你收集整理的POI将网络图片添加到excel的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stanford Alpaca (羊驼)
- 下一篇: 分享暄桐好作业之《临〈岁朝清供图〉》