JAVA抠取Excel中的图片
EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上。思路先把图片抠出存成单个图片。然后上传到服务器,取下路径更新到数据库中。
注释掉的部分为有多个Excel时使用。
package com.***;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.apache.commons.lang.StringUtils;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; import com.ctc.wstx.util.StringUtil;
public class ExcelImpTest { /**
*
* @param args
* @Date 2016-1-29
*/
public static void main(String[] args) {
int totalCountaaaaa = 0;
File file = new File("E:\\webchatcode.xlsx");
File filewrite = new File("E:"+File.separator + "webchatcodesql.sql");
XSSFWorkbook sw;
try {
int totalCount = 0;
if(file.exists()){
// File[] files = fileDir.listFiles();
// for(File file:files){
sw = new XSSFWorkbook(new FileInputStream(file));
System.out.println(sw.getNumberOfSheets());
totalCount += sw.getNumberOfSheets();
String fileName = file.getName();
for(int i = 0;i<sw.getNumberOfSheets();i++){
XSSFSheet sheet = sw.getSheetAt(i);
XSSFRow row = sheet.getRow(0);
XSSFRow row1 = sheet.getRow(1);
// String cValue = "";
// int cellNumber = 0;
// if(row!=null){
// int lastCellCell = row.getLastCellNum();
// for(int j=0;j<lastCellCell;j++){
// XSSFCell cell = row.getCell(j);
// XSSFCell cell1 = row1.getCell(j);
// String cell1Value = "";
// if(cell==null){
// continue;
// }
// cValue = cell.getStringCellValue()==null?"":cell.getStringCellValue().trim();
// if("项目".equals(cValue)){
// cValue = "场地";
// cellNumber = j;
// break;
// }
// if(cell1!=null){
// cell1Value = cell1.getStringCellValue()==null?"":cell1.getStringCellValue().trim();
// if("基本信息".equals(cValue)&&"学校等级".equals(cell1Value)){
// cValue = "校区";
// cellNumber = j;
// break;
// }
// }
//
//
// }
//
//
// }
//
// if(cValue!=null&&"场地".equals(cValue)){
// System.out.println("isVenue:==========="+fileName+"::"+sheet.getSheetName().trim());
// cValue = "场地";
// }else if(cValue!=null&&"校区".equals(cValue)){
// System.out.println("isCampus:==========="+fileName+"::"+sheet.getSheetName().trim());
// cValue = "校区";
// }else{
// System.out.println("unKnow:==========="+fileName+"::"+sheet.getSheetName().trim());
// cValue = "unKnow";
// }
String pathName = "E:/weiChat/"+sheet.getSheetName().trim()+"/";
File fileFolder = new File(pathName);
if(!fileFolder.exists()){
fileFolder.mkdirs();
}
Map<String, String> valueMap = getPicNameMap(sheet);
Map<Integer,PictureData> map = new HashMap<Integer, PictureData>();
XSSFCell cell = null;
//遍历sheet中的图片
for(POIXMLDocumentPart dr:sheet.getRelations()){
if(dr instanceof XSSFDrawing){
XSSFDrawing drawing = (XSSFDrawing)dr;
List<XSSFShape> shapes = drawing.getShapes();
//如果是图形,进行遍历
int k = 0;
for(XSSFShape shape:shapes){
k++;
//如果是图片,保存图片,并获取图片信息
if(shape instanceof XSSFPicture && shape!=null){
XSSFPicture picture = (XSSFPicture)shape;
if(picture == null){
continue;
}
try{
XSSFClientAnchor anchor = picture.getPreferredSize();
PictureData pic = picture.getPictureData();
CTMarker ctMarker = anchor.getFrom();
int startRowIndex = ctMarker.getRow();
int startColIndex = ctMarker.getCol();
XSSFRow rowaa = sheet.getRow(startRowIndex);
cell = rowaa.getCell(14);
String valTemp = "";
if(cell != null){
valTemp = String.valueOf(cell.getNumericCellValue());
valTemp = valTemp.substring(0,valTemp.length() -2);
}
// if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
//// cell = rowaa.getCell(startColIndex-2);
// }else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
// cell = rowaa.getCell(startColIndex);
// }else{
// cell = rowaa.getCell(startColIndex);
// System.out.println("=====startRowIndex====="+startRowIndex+"==========startColIndex================"+startColIndex+"==="+cell.getCellType());
// }
//
// switch (cell.getCellType()) {
// case HSSFCell.CELL_TYPE_STRING:
// valTemp = cell.getStringCellValue();
//// System.out.println("=====startRowIndex===="+startRowIndex+"======startColIndex========="+startColIndex+"====valTemp====="+valTemp);
// break;
// case HSSFCell.CELL_TYPE_NUMERIC:
//// valTempa = cell.getNumericCellValue();
// System.out.println("=====%%%%%%%%==="+startRowIndex+"======startColIndex========="+startColIndex);
// totalCountaaaaa++;
// break;
// }
// String valTemp = cell.getStringCellValue();
// System.out.println("=====startRowIndex===="+startRowIndex+"======startColIndex========="+startColIndex+"====valTemp====="+valTemp);
String value = getpicName(sheet,valueMap,startRowIndex,startColIndex,valTemp);
FileOutputStream os = new FileOutputStream(new File(pathName+value.replaceAll("/", "")+"."+pic.suggestFileExtension()));
os.write(pic.getData());
os.flush();
os.close(); // byte bytes[] = new byte[512];
// bytes = content.getBytes();
// int b = content.length();
// FileOutputStream fos = new FileOutputStream(file);
// fos.write(bytes, 0, b);
// fos.close();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filewrite,true), "utf-8"));
// String valueddd = valTemp+"_" + System.currentTimeMillis();
bw.write("UPDATE T_WEBCHAT_QUOTATION t SET t.CODEPICTURE = @#@#@"+pathName+value.replaceAll("/", "")+"."+pic.suggestFileExtension()+"@@@ WHERE t.ID = '"+valTemp+"';");
bw.newLine();
bw.close();
// response.getWriter().write("{\"result\":\"success\"}");
}catch (Exception e) {
// e.printStackTrace();
// System.out.println(fileName+":::"+sheet.getSheetName());
} }
}
}
}
}
}
// }
System.out.println(totalCount);
System.out.println("==================="+totalCountaaaaa);
// XSSFWorkbook nsw = null;
// for(int i=0;i<sheetCount;i++){
// if(i==sheetCount-1){
//
// break;
// }
// if(i%50==0){
//
// nsw = new XSSFWorkbook(new FileInputStream(new File("……需求/temp/venue"+i/50+".xlsx")));
// }
// XSSFSheet osheet = sw.getSheetAt(i);
// XSSFSheet sheet = nsw.createSheet(osheet.getSheetName());
// sheet = osheet;
//
// }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } public static Map<String, String> getPicNameMap(XSSFSheet sheet){
Map<String, String> valueMap = new HashMap<String, String>();
int merNums = sheet.getNumMergedRegions();
for(int j = 0;j<merNums;j++){
CellRangeAddress cRangeAddress = sheet.getMergedRegion(j);
int startRow = cRangeAddress.getFirstRow();
int startCol = cRangeAddress.getFirstColumn();
int endRow = cRangeAddress.getLastRow();
int endCol = cRangeAddress.getLastColumn();
XSSFCell cell = sheet.getRow(startRow).getCell(startCol);
sheet.getRow(startRow).getCell(startCol).setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellType(Cell.CELL_TYPE_STRING);
if(startCol > 2){
valueMap.put(startRow+"-"+startCol+"-"+endRow+"-"+endCol, cell.getStringCellValue());
}
}
return valueMap;
} public static String getpicName(XSSFSheet sheet,Map<String, String> valueMap,int startRowIndex,int startColIndex,String valTemp){
Iterator<String> it = valueMap.keySet().iterator();
String value = "";
while (it.hasNext()) {
String key = it.next();
String[] keys = key.split("-");
if((startColIndex+"").equals(keys[1])){
if(startRowIndex >= Integer.parseInt(keys[0]) && startRowIndex <= Integer.parseInt(keys[2])){
value = valueMap.get(key);
}
} }
if(StringUtils.isNotBlank(valTemp)){
value = valTemp+"_" + System.currentTimeMillis();
}else{
value = StringUtils.isNotBlank(value) ? (sheet.getSheetName().trim()+"_"+ value.trim()):(sheet.getSheetName().trim()+"_"+startRowIndex+"-"+startColIndex);
} return value.replaceAll("/", "");
} }
JAVA抠取Excel中的图片的更多相关文章
- java 在Excel中插入图片 POI实现
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- java POI实现向Excel中插入图片
做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...
- Java 抓取网页中的内容【持续更新】
背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...
- Python读取excel中的图片
作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...
- 在 Excel 中设置图片
package com.smbea.demo.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStr ...
- Open Xml 读取Excel中的图片
在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...
- c# 应用NPOI 获取Excel中的图片,保存至本地的算法
要求:读取excel中的图片,保存到指定路径 思路: 利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...
- Python抓取网页中的图片到本地
今天在网上找了个从网页中通过图片URL,抓取图片并保存到本地的例子: #!/usr/bin/env python # -*- coding:utf- -*- # Author: xixihuang # ...
- Excel中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- hive分桶 与保存数据的方式
创建分桶的表 create table t_buck(id int ,name string) clustered by (id ) sorted by (id) into 4 buckets ; ...
- FreeBSD编译安装emacs,不要用ports
1. 解压emacs 2. 进入解压之后的目录,执行configure命令,大体配置如下: ./configure --with-x-toolkit=no --with-xpm=no --with-j ...
- Death to Binary? 分析模拟
/** 题目:Death to Binary? 链接:https://vjudge.net/contest/154246#problem/T 题意:略. 思路: 注意事项: 给的字符串存在前导0: 存 ...
- c++标准库之thread
class thread是对线程的抽象.以下分别介绍thread是如何表示线程的大部分特征的. 执行体 线程的执行体由一个可执行(callable)对象来表示.这个执行体可以在thread创建的时候指 ...
- 第二百零三节,jQuery EasyUI,Window(窗口)组件
jQuery EasyUI,Window(窗口)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Window(窗口)组件的使用方法,这个组件 ...
- servlet部署到tomcat中
引用:http://blog.csdn.net/shuidao/article/details/1738059 配置,部署 servlet: 1. 在tomcat的安装目录下 找到webapps 文件 ...
- Material design之Material Theme
Material Theme提供了三方面的内容: 系统组件的颜色可以自定义更改 系统组件添加了触摸反馈动画效果 Activity切换动画效果 系统主题默认被定义在以下三个样式中: 使用Material ...
- 夏日炎炎 python写个天气预报
东南地区连续突破历史,江浙沪除了包邮之外的另一福利-桑拿也已到手.这样的日子里是应该每日关注天气主义降暑避免出现热疾病,python包含比 较多的网络应用类这样就方便了一些网络应用的操作,之外还有些可 ...
- 【转】ATL提供的所有转换宏
在头文件<atlconv.h>中定义了ATL提供的所有转换宏,如: A2CW (LPCSTR) -> (LPCWSTR) A2W (LPCSTR) -> (LPWSTR ...
- html中div获取焦点,去掉input div等获取焦点时候的边框
经测试只有在IE chrome才会在获取焦点时有边框 使用CSS div{ outline:none; } DIV焦点事件详解 --[focus和tabIndex] 摘自:http://my.osc ...