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中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
这篇文章主要介绍了ThinkPHP使用PHPExcel实现Excel数据导入导出,非常实用的功能,需要的朋友可以参考下 本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方 ...
- Eclipse开发C/C++之使用技巧小结,写给新手
我需要在Linux下开发C++项目,没有VS,用Vim开发是不错,但项目大了,效率 就跟不上IDE了,所以选了Eclipse+CDT插件.当然,Vimers觉得我说的不对的请 勿喷哈,我也是水手一个. ...
- UIView 实例方法 Instance Methods(转)
好了,我接着上篇,开始我们的对UIView 实例方法的探索 UIView 实例方法 Instance Methods 初始化一个视图 - (id)initWithFrame:(CGRect)aRect ...
- 关于height:100%不生效的问题
当你设置一个页面元素的高度(height)为100%时,期望这样元素能撑满整个浏览器窗口的高度,但大多数情况下,这样的做法没有任何效果.你知道为什么height:100%不起作用吗? 按常理,当我们用 ...
- Servlet 打包部署
默认情况下,Servlet 应用程序位于路径 <Tomcat-installation-directory>/webapps/ROOT 下,且类文件放在 <Tomcat-instal ...
- Eclipse Debug 调试
Debug 调试 Java 程序 我们可以在 Package Explorer 视图调试 Java 程序,操作步骤如下: 鼠标右击包含 main 函数的 java 类 选择 Debug As > ...
- visualvm远程监控jvm两种配置方法
参考:http://blog.itpub.net/17203031/viewspace-765810 一.Jstatd RMI远程监控方法 VisualVM在监控本地JVM的时候是很方便的.只要应用程 ...
- VC++ 汇编相关的东西
Tips: VC++在新建一个.asm文件后必须重新导入project中才能进行编译. 下面是一个汇编与C++相互调用的例子: Main.cpp #include <stdio.h> #i ...
- OpenCV学习笔记八:opencv_photo模块
一,简介: 该库用于数码照片的处理,处于发展中,目前只包含如下算法: //! restores the damaged image areas using one of the available i ...
- LeetCode Problem 169: Majority Element查找多数元素
描述:Given an array of size n, find the majority element. The majority element is the element that app ...