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中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
随机推荐
- script
实例 链接一个外部脚本文件: <script type="text/javascript" src="myscripts.js"></scri ...
- java编译器特性
1.当一个表达式两边都是字面量,则编译过程中就会进行计算,并将结果生成在表达式的位置,以节省运算效率: ps:jvm认为只有是字面量时,才会对比常量池中内容:而如果是new的新对象为不同对象. 例1: ...
- Jenkins安装和配置系列
转自:http://www.cnblogs.com/zz0412/tag/jenkins/default.html?page=1 Jenkins进阶系列之——18Jenkins语言本地化 Jen ...
- Spring读取配置文件的方式总结
一.基于XML配置的方式 1.使用 PropertyPlaceholderConfigurer - 在 applicationContext.xml 中配置: <context:property ...
- pip依赖安装与记录
pip freeze requirements.txt是一个常常被许多Flask应用用于列出它所依赖的包的文本文件.它是通过pip freeze > requirements.txt生成的. 使 ...
- Eclipse 首选项(Preferences)
Eclipse 首选项(Preferences) 设置首选项 该对话框可通过框架管理但是其他插件可以设置其他页面来管理首选项的配置. 我们可以通过 Window 菜单选择 Preferences 菜单 ...
- SSH总结(二)
1.文件的操作,读写文件,解决乱码问题 读文件 InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(p ...
- Javascript间歇调用和超时调用
间歇调用:每隔指定的时间就执行一次代码 超时调用:在指定的时间过后执行代码 HTML Code 12345678910111213141516171819 <!DOCTYPE html& ...
- python3----ASCII
>>>print ord("a") 97 >>>print chr(97) a
- Nginx 的多站点配置
当我们有了一个 VPS 主机以后,为了不浪费 VPS 的强大资源(相比共享主机1000多个站点挤在一台机器上),往往有想让 VPS 做点什么的想法,银子不能白花啊:).放置多个网站或者博客是个不错的想 ...