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中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- Mysql之sync-binlog参数
Mysql开启bin-log日志使用bin-log时,默认情况下,并不是每次执行写入就与硬盘同步,这样在服务器崩溃是,就可能导致bin-log最后的语句丢失. 可以通过这个参数来调节,sync_bin ...
- error LNK2019: unresolved external symbol 的一个解决方法
在VS2010中使用opencv时,有时会出现如下类似的连接错误: 解决方法:根据头文件手动指定lib文件 #ifdef _DEBUG #pragma comment(lib,"*.lib& ...
- Spring4 MVC+Hibernate4+MySQL+Maven使用注解集成实例
在本教程中,我们将使用基于注解的配置集成Spring和Hibernate. 我们将开发包含表单要求用户输入一个简单的CRUD为导向Web应用程序,使用Hibernate保存输入的数据到 MySQL 数 ...
- C++11写算法之顺序查找
从这篇博文起,将尝试使用C++11来写常用算法与数据结构. 本篇博文以最简单的顺序查找作为系列博文的起点,并作约定如下: 1,变量名 : varList : 函数名 : SequentialFind ...
- SSH后台管理系统,实现查询+分页
一个搜索框,然后会获取大量信息,将信息进行分页,每一页显示固定条数. mysql中使用“like”和“%%”进行模糊匹配,用“limit”进行分页. 1.首先创建一个页面信息的实体类,代码如下: im ...
- Win MYSQL5.7.19压缩版安装
最近需要在wins上安装MYSQL,发现最新的版本和之前的有点差距,再次记录一下 1.下载:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5. ...
- [Spring Data MongoDB]学习笔记--注册一个Mongo实例
1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() thr ...
- M²的经典语录
1. If you failed, stop and think! You should work in the correct way. 2. If I can do all of it, why ...
- 《挑战程序设计竞赛》2.1 深度优先搜索 POJ2386 POJ1979 AOJ0118 AOJ0033 POJ3009
POJ2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25366 Accepted: ...
- flex 均分铺满
<view>充值金额</view> <view class="weui-flex"> <repeat for="{{amount ...