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中的图片的更多相关文章

  1. java 在Excel中插入图片 POI实现

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  2. java POI实现向Excel中插入图片

          做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...

  3. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

  4. Python读取excel中的图片

    作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...

  5. 在 Excel 中设置图片

    package com.smbea.demo.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStr ...

  6. Open Xml 读取Excel中的图片

      在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...

  7. c# 应用NPOI 获取Excel中的图片,保存至本地的算法

    要求:读取excel中的图片,保存到指定路径 思路:  利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...

  8. Python抓取网页中的图片到本地

    今天在网上找了个从网页中通过图片URL,抓取图片并保存到本地的例子: #!/usr/bin/env python # -*- coding:utf- -*- # Author: xixihuang # ...

  9. Excel中把图片合并进图表的方法介绍

    方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...

随机推荐

  1. APACHE KYLIN™ 概览

    APACHE KYLIN™ 概览 Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发 ...

  2. 微信全局获取并缓存Accesstoken的值

    由于本项目中使用自定义菜单接口.获取用户信息接口.用户分组接口.消息发送接口等,都需要传入一个相同的参数access_token,其有效期 是7200秒(两小时),在有效期内可以使用,一旦access ...

  3. jQuery 和其他 JavaScript 框架

    正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaScript 框架也使用 $ 符号作为简写怎么办? 其他一些 JavaScript 框架包括:MooTo ...

  4. 数据库 : Mysql - 日常应用

    #登录MYSQL数据库 MYSQL -u root -p #显示所有数据库 SHOW databases; #显示当前数据库与应用程序间进行了多少条连接 SHOW processlist; #使用某一 ...

  5. day12闭包,装饰器

    一.闭包:内部函数引用了外部函数的变量. # f1() #闭包的定义 #内部的函数引用了外部函数的变量 # def f1(b): #闭包的常用状态 # def f2(): # print(b) # r ...

  6. The server encountered an internal error that prevented it from fulfilling this request.(JsonMappingException: Conflicting getter definitions)

    在测试一个方法,dubug查看查询结果已经出来了,结果页面上是The server encountered an internal error that prevented it from fulfi ...

  7. Java 基础巩固,根深而叶茂

    #J2SE ##基础 八种基本数据类型的大小,以及他们的封装类. 八种基本数据类型,int ,double ,long ,float, short,byte,character,boolean 对应的 ...

  8. hdu1174(3维射线与圆是否相交)

    简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...

  9. Cocos2d-x Lua中生命周期函数

    场景(Scene)以及所有节点(Node)的生命周期事件如下:enter.进入场景时候触发.enterTransitionFinish.进入场景而且过渡动画结束时候触发.exit.退出场景时候触发 . ...

  10. websocket Session 不支持序列化

    这是我本来的打算,把socket session 进行序列化分布式存储! 呵呵   然而现实很残酷,这b东西不支持序列化! 解决办法: