POI:Excel中插入图片,解析Excel(poi-3.7-20101029.jar,poi-ooxml-3.7-20101029.jar)
/**
*解析Excel03
*/
public List<List<Map<Integer, DynamicDataEvt>>> readExcel03(String filePath)
{
int startRow = 1;// 开始行
List<List<Map<Integer, DynamicDataEvt>>> content = new ArrayList<List<Map<Integer, DynamicDataEvt>>>();
HSSFWorkbook workbook = null;
FileInputStream input = null;
try
{
input = new FileInputStream(new File(filePath));
workbook = new HSSFWorkbook(input);
}
catch (Exception e)
{
return null;
}
int colsum = 0;
HSSFSheet sheet = null;
HSSFRow dataRow = null;
int sheetnum = workbook.getNumberOfSheets();// 获取页签数
for (int z = 0; z < sheetnum; z++)// 循环页签
{
sheet = workbook.getSheetAt(z);
if (sheet.getFirstRowNum() == sheet.getLastRowNum())// 如果起止行相等说明页签为空
{
continue;
}
if ((startRow - 1) >= sheet.getLastRowNum())
{
continue;
}
List<Map<Integer, DynamicDataEvt>> page = new ArrayList<Map<Integer, DynamicDataEvt>>();
for (int x = (startRow - 1); x <= sheet.getLastRowNum(); x++)
{
dataRow = sheet.getRow(x);
boolean flag = true;
int lastcol = 0;
if (dataRow == null)
{
flag = false;
lastcol = colsum;
}
else
{
colsum = colsum < dataRow.getLastCellNum() ? dataRow
.getLastCellNum() : colsum;
lastcol = dataRow.getLastCellNum();
}
Map<Integer, DynamicDataEvt> cell = new HashMap<Integer, DynamicDataEvt>();
for (int y = 0; y < lastcol; y++)
{
DynamicDataEvt dy = new DynamicDataEvt();
if (flag)
{
MergeCellTwoEvt mer = getHSSFCell(sheet, x, y);
dy.setValue(retrievalCell03(mer.getHcell()));// 单元格的值
dy.setRowNumber(x);// 单元格跨行数
dy.setColNumber(y);// 单元格跨列数
if (mer.isDelegateCall())
{
dy.setRowUniteId(mer.getMergedrowSum());
dy.setColUniteId(mer.getMergedcolSum());
}
else
{
if (mer.isMergedRowSign())
{
dy.setRowUniteId(-1);
}
if (mer.isMergedColSign())
{
dy.setColUniteId(-1);//
}
}
}
else
{
dy.setValue("NULL");
dy.setRowNumber(x);
dy.setColNumber(y);
}
dy.setSheetNumber(z);
cell.put(y, dy);
}
page.add(cell);
}
content.add(page);
}
return content;
}
/**
* 03单元格解析
*
* @param sheet
* @param x
* @param y
* @return
*/
public MergeCellTwoEvt getHSSFCell(HSSFSheet sheet, int x, int y)
{
MergeCellTwoEvt merEvt = new MergeCellTwoEvt();
for (int numMR = 0; numMR < sheet.getNumMergedRegions(); numMR++)
{
CellRangeAddress region = sheet.getMergedRegion(numMR);
if (region.getFirstRow() <= x && region.getLastRow() >= x
&& region.getFirstColumn() <= y
&& region.getLastColumn() >= y)
{
if (region.getFirstRow() == x && region.getFirstColumn() == y)
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
merEvt.setDelegateCall(true);
}
else
{
merEvt.setHcell(sheet.getRow(region.getFirstRow()).getCell(
region.getFirstColumn()));
}
int info = 0;
if ((info = region.getLastRow() - region.getFirstRow()) > 0)
{
merEvt.setMergedrowSum(info + 1);
merEvt.setMergedRowSign(true);
}
if ((info = region.getLastColumn() - region.getFirstColumn()) > 0)
{
merEvt.setMergedcolSum(info + 1);
merEvt.setMergedColSign(true);
}
break;
}
else
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
}
}
if (merEvt.getHcell() == null)
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
}
return merEvt;
}
/**
*获取单元格的值
*/
public String retrievalCell03(HSSFCell hcel)
{
String dataEvt = "";
if (null == hcel)
{
dataEvt = "NULL";
}
// 字符串
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_STRING)
{
dataEvt = (hcel.toString());
}
// 公式
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_FORMULA)
{
dataEvt = (getConversionNumber(getCellValue03(hcel)));
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
{
if (HSSFDateUtil.isCellDateFormatted(hcel))
{
Date date = hcel.getDateCellValue();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy年MM月dd日");
dataEvt = (dateFormat.format(date));
}
else
{
dataEvt = (getConversionNumber(String.valueOf(hcel
.getNumericCellValue())));
}
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_BLANK)
{
dataEvt = "NULL";
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_ERROR)
{
dataEvt = "ERROR";
}
return dataEvt;
}
-------------
还有一个牛人整理的POI使用pdf。借鉴借鉴。
/** * 在Excle2003文档插入条形码 * * @param fileWordPath * Excel文档绝对路径 * @param newText * 需要插入的条形码图片的绝对路径 */ public static boolean insertImage2Excel03(String fileExcelPath,String fileImagePath) { FileOutputStream fileOut = null; BufferedOutputStream bos = null; BufferedImage bufferImg = null; ByteArrayOutputStream byteArrayOut = null; FileInputStream fis = null; HSSFWorkbook wb = null; try { bufferImg = ImageIO.read(new File(fileImagePath)); fis = new FileInputStream(new File(fileExcelPath)); wb = new HSSFWorkbook(fis); //遍历该excel下的所有页签 for (int i = 0; i < wb.getNumberOfSheets(); i++) { byteArrayOut = new ByteArrayOutputStream(); HSSFSheet sheet = wb.getSheetAt(i); ImageIO.write(bufferImg, "jpeg", byteArrayOut);//将图像写入outputStream sheet.shiftRows(0, sheet.getLastRowNum(), 1, false, false);//获得区域,在第一行上面插入一行 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); //如果第一行不为空 if (null != sheet.getRow(0)) { //设置第一行高度 sheet.getRow(0).setHeightInPoints((float) 65); HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short) 0, 0, (short)2, 1);//设置条码位置在(0列,0行,1列,1行) HSSFPicture picture = patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));//把jpeg图片通过流写入该sheet1 picture.resize();//把图片设置成原始大小 } byteArrayOut.flush(); byteArrayOut.close(); byteArrayOut = null; } fileOut = new FileOutputStream(fileExcelPath); bos = new BufferedOutputStream(fileOut); wb.write(bos); bos.flush(); bos.close(); } catch (IOException io) { io.printStackTrace(); return false; } finally { if (null != byteArrayOut)//关闭byteArrayOut流 try { byteArrayOut.close(); } catch (IOException e) { e.printStackTrace(); } if (null != fis) //关闭fis流 try { fis.close(); } catch (IOException e) { e.printStackTrace(); } if (null != fileOut)//关闭fileOut流 try { fileOut.close(); } catch (IOException e) { e.printStackTrace(); } if (null != bos)//关闭fileOut流 try { bos.close(); bos = null; } catch (IOException e) { e.printStackTrace(); } } return true; }
/**
*解析Excel03
*/
public List<List<Map<Integer, DynamicDataEvt>>> readExcel03(String filePath)
{
int startRow = 1;// 开始行
List<List<Map<Integer, DynamicDataEvt>>> content = new ArrayList<List<Map<Integer, DynamicDataEvt>>>();
HSSFWorkbook workbook = null;
FileInputStream input = null;
try
{
input = new FileInputStream(new File(filePath));
workbook = new HSSFWorkbook(input);
}
catch (Exception e)
{
return null;
}
int colsum = 0;
HSSFSheet sheet = null;
HSSFRow dataRow = null;
int sheetnum = workbook.getNumberOfSheets();// 获取页签数
for (int z = 0; z < sheetnum; z++)// 循环页签
{
sheet = workbook.getSheetAt(z);
if (sheet.getFirstRowNum() == sheet.getLastRowNum())// 如果起止行相等说明页签为空
{
continue;
}
if ((startRow - 1) >= sheet.getLastRowNum())
{
continue;
}
List<Map<Integer, DynamicDataEvt>> page = new ArrayList<Map<Integer, DynamicDataEvt>>();
for (int x = (startRow - 1); x <= sheet.getLastRowNum(); x++)
{
dataRow = sheet.getRow(x);
boolean flag = true;
int lastcol = 0;
if (dataRow == null)
{
flag = false;
lastcol = colsum;
}
else
{
colsum = colsum < dataRow.getLastCellNum() ? dataRow
.getLastCellNum() : colsum;
lastcol = dataRow.getLastCellNum();
}
Map<Integer, DynamicDataEvt> cell = new HashMap<Integer, DynamicDataEvt>();
for (int y = 0; y < lastcol; y++)
{
DynamicDataEvt dy = new DynamicDataEvt();
if (flag)
{
MergeCellTwoEvt mer = getHSSFCell(sheet, x, y);
dy.setValue(retrievalCell03(mer.getHcell()));// 单元格的值
dy.setRowNumber(x);// 单元格跨行数
dy.setColNumber(y);// 单元格跨列数
if (mer.isDelegateCall())
{
dy.setRowUniteId(mer.getMergedrowSum());
dy.setColUniteId(mer.getMergedcolSum());
}
else
{
if (mer.isMergedRowSign())
{
dy.setRowUniteId(-1);
}
if (mer.isMergedColSign())
{
dy.setColUniteId(-1);//
}
}
}
else
{
dy.setValue("NULL");
dy.setRowNumber(x);
dy.setColNumber(y);
}
dy.setSheetNumber(z);
cell.put(y, dy);
}
page.add(cell);
}
content.add(page);
}
return content;
}
/**
* 03单元格解析
*
* @param sheet
* @param x
* @param y
* @return
*/
public MergeCellTwoEvt getHSSFCell(HSSFSheet sheet, int x, int y)
{
MergeCellTwoEvt merEvt = new MergeCellTwoEvt();
for (int numMR = 0; numMR < sheet.getNumMergedRegions(); numMR++)
{
CellRangeAddress region = sheet.getMergedRegion(numMR);
if (region.getFirstRow() <= x && region.getLastRow() >= x
&& region.getFirstColumn() <= y
&& region.getLastColumn() >= y)
{
if (region.getFirstRow() == x && region.getFirstColumn() == y)
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
merEvt.setDelegateCall(true);
}
else
{
merEvt.setHcell(sheet.getRow(region.getFirstRow()).getCell(
region.getFirstColumn()));
}
int info = 0;
if ((info = region.getLastRow() - region.getFirstRow()) > 0)
{
merEvt.setMergedrowSum(info + 1);
merEvt.setMergedRowSign(true);
}
if ((info = region.getLastColumn() - region.getFirstColumn()) > 0)
{
merEvt.setMergedcolSum(info + 1);
merEvt.setMergedColSign(true);
}
break;
}
else
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
}
}
if (merEvt.getHcell() == null)
{
merEvt.setHcell(sheet.getRow(x).getCell(y));
}
return merEvt;
}
/**
*获取单元格的值
*/
public String retrievalCell03(HSSFCell hcel)
{
String dataEvt = "";
if (null == hcel)
{
dataEvt = "NULL";
}
// 字符串
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_STRING)
{
dataEvt = (hcel.toString());
}
// 公式
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_FORMULA)
{
dataEvt = (getConversionNumber(getCellValue03(hcel)));
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
{
if (HSSFDateUtil.isCellDateFormatted(hcel))
{
Date date = hcel.getDateCellValue();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy年MM月dd日");
dataEvt = (dateFormat.format(date));
}
else
{
dataEvt = (getConversionNumber(String.valueOf(hcel
.getNumericCellValue())));
}
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_BLANK)
{
dataEvt = "NULL";
}
else if (hcel.getCellType() == HSSFCell.CELL_TYPE_ERROR)
{
dataEvt = "ERROR";
}
return dataEvt;
}
-------------
还有一个牛人整理的POI使用pdf。借鉴借鉴。
- poi-ooxml-3.7-20101029.jar (486.6 KB)
- 下载次数: 0
- poi-3.7-20101029.jar (1.6 MB)
- 下载次数: 0
- POI实战_28by_VintageYu_29.pdf (973.8 KB)
- 下载次数: 5
相关推荐
标题中的“poi操作excel案例”指的是使用Apache POI库来处理Excel文件的示例项目。Apache POI是一个开源的Java库,它允许开发者创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿(XLS和XLSX)。在这个...
这篇博客文章“POI操作Excel常用方法总结”可能详细介绍了如何利用Apache POI库在Java环境中读写Excel文件。以下是对该主题的一些关键知识点的详细说明: 1. **Apache POI介绍**: Apache POI是开源项目,提供了...
"poi操作excel所需完整jar包"指的是包含了所有必要组件的Apache POI库,这样在导入IDE并添加到构建路径后,就可以避免出现`NoClassDefFoundError`这样的运行时错误。 Apache POI 提供了丰富的API,允许开发者读取、...
Apache POI是一个强大的Java库,专门用于处理...通过lib.rar和Poi02.rar中的示例代码,你可以更深入地了解和学习POI操作Excel的具体实现。在实践中,结合这些资源,你将能够熟练地在Java Web项目中集成Excel处理功能。
标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...
在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...
这个"poi操作excel的Demo"很可能是提供了一个使用Apache POI库来读取、写入或修改Excel文件的示例代码。下面将详细介绍Apache POI在处理Excel时的一些关键知识点。 1. **Apache POI概述**: Apache POI 是Java平台...
在这个场景中,"POI操作Excel的封装"指的是对POI API进行的高级抽象和简化,以便于开发人员更方便地处理Excel文件。通过反射和约定,可以创建一个易于使用的API,隐藏底层复杂的POI细节。 反射是Java编程语言中的一...
二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....
poi操作excel所需jar包及poi源码 包含内容 poi-3.7.jar poi-ooxml-3.7.jar poi-ooxml-schemas-3.7.jar poi-scratchpad-3.7.jar Lib-->commons-logging-1.1.jar lib-->junit-3.8.1.jar lib-->log4j.1.2.13.jar ooxml-...
"poi操作Excel文件jar包"指的是包含Apache POI库的Java归档(JAR)文件,可以集成到Java项目中以实现Excel文件的处理功能。 1. **Apache POI 简介** Apache POI 是Apache软件基金会的一个顶级项目,最初由Markus ...
接下来,我们将讨论如何使用Apache POI操作Excel 2007(.xlsx)文件的主要步骤: 1. **创建Workbook对象**:这是Excel工作簿的Java表示。你可以使用`XSSFWorkbook`类来创建一个新的Excel工作簿。 ```java import...
这个“POI操作excel的JAR包”是Apache POI项目的一部分,它提供了一系列API,使得Java开发者可以方便地创建、读取、修改Excel电子表格。 在Java开发中,使用Apache POI库可以实现以下功能: 1. **创建Excel工作簿*...
"poi操作excel全部jar包"指的是使用Apache POI进行Excel操作所需的所有库文件集合,通常包含多个JAR文件,每个文件服务于不同的功能模块。 Apache POI 主要分为三个部分: 1. **HSSF**: 这是处理Microsoft Excel的...
Java中的Apache POI库是处理...以上是Java POI操作Excel的基本概念和关键点,理解并熟练运用这些知识点,你就可以在项目中高效地进行批量导入导出操作了。记住,持续学习和适应新的库版本是保持技术领先的关键。
使用POI操作Excel调用高德地图API操作Excel示例
"poi操作excel的jar包集.rar"文件包含了运行Apache POI库所需的全部依赖,让你能够无缝进行Excel文件的操作,无论是2003的老版本还是2007及以后的新版本。 首先,我们需要理解Apache POI的主要组件: 1. **HSSF...
这个"POI操作Excel总结实例"的资料可能包含了一系列示例代码,教你如何利用Apache POI库来读取、写入和操作Excel文件。下面,我将详细讲解关于POI操作Excel的一些关键知识点。 1. **创建Excel工作簿(Workbook)** ...
在这个场景中,我们关注的是如何使用 POI 操作 Excel 工具类。这个工具类可以帮助开发者在 Java 环境下读写 Excel 文件,从而实现数据导入、导出等功能。下面将详细介绍 POI 操作 Excel 的关键知识点。 1. **工作簿...