poi操作excel2007(读取、生成、编辑)
因为现在再写excel2003版的比较low,所以我在这就不介绍了,直接介绍2007,我所用的编程软件是IDEA
poi操作office总共有6个jar包,在pom.xml文件中配置如下,也可下载后直接引jar包(快捷键ctrl+shift+alt+s----->modules,添加jar包即可)目前poi的jar包最高版本为3.1.6
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-examples -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-excelant -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>3.16</version>
</dependency>
接下来进入正题:
1、读取excel
//读取excel表格中的数据,path代表excel路径
public void readExecl(String path) {
try {
//读取的时候可以使用流,也可以直接使用文件名
XSSFWorkbook xwb = new XSSFWorkbook(path);
//循环工作表sheet
for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
XSSFSheet xSheet = xwb.getSheetAt(numSheet);
if (xSheet == null) {
continue;
}
//循环行row
for (int numRow = 0; numRow <= xSheet.getLastRowNum(); numRow++) {
XSSFRow xRow = xSheet.getRow(numRow);
if (xRow == null) {
continue;
}
//循环列cell
for (int numCell = 0; numCell <= xRow.getLastCellNum(); numCell++) {
XSSFCell xCell = xRow.getCell(numCell);
if (xCell == null) {
continue;
}
//输出值
System.out.println("excel表格中取出的数据" + getValue(xCell));
}
} } } catch (IOException e) {
e.printStackTrace();
}
} /**
* 取出每列的值
*
* @param xCell 列
* @return
*/
private String getValue(XSSFCell xCell) {
if (xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(xCell.getBooleanCellValue());
} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
return String.valueOf(xCell.getNumericCellValue());
} else {
return String.valueOf(xCell.getStringCellValue());
}
}
2、从数据库中取出数据表,导入并生成excel
数据库表名为Vt_User,其他注释都写得很清楚
public void createExcel() {
try {
String path = "D:/test.xlsx";
// 创建新的Excel 工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"用户表"的工作表,其语句为:
XSSFSheet sheet = workbook.createSheet("用户表");
// 在索引0的位置创建行(最顶端的行)
XSSFRow row = sheet.createRow((short) 0);
//在索引0的位置创建单元格(左上端)
XSSFCell cell = row.createCell((short) 0);
//创建单元格样式
CellStyle cellStyle = workbook.createCellStyle();
// 设置这些样式
cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell = row.createCell((short) 0);
cell.setCellValue("用户id");
cell.setCellStyle(cellStyle); cell = row.createCell((short) 1);
cell.setCellValue("姓名");
cell.setCellStyle(cellStyle); cell = row.createCell((short) 2);
cell.setCellValue("别名");
cell.setCellStyle(cellStyle); cell = row.createCell((short) 3);
cell.setCellValue("密码");
cell.setCellStyle(cellStyle); cell = row.createCell((short) 4);
cell.setCellValue("外来id");
cell.setCellStyle(cellStyle); //查询数据库中所有的数据
VtUserMapper mapper = getMapper(VtUserMapper.class);
VtUserCriteria cri = new VtUserCriteria();
cri.createCriteria().andUserEnabledEqualTo(1);
List<VtUser> list = mapper.selectByExample(cri);
/*//第一个sheet第一行为标题
XSSFRow rowFirst = sheet.createRow(0);
rowFirst.setHeightInPoints(21.75f);*/
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow((int) i + 1);
VtUser stu = (VtUser) list.get(i);
// 第四步,创建单元格,并设置值
row.createCell((short) 0).setCellValue(stu.getUserId());
row.createCell((short) 1).setCellValue(stu.getUserName());
row.createCell((short) 2).setCellValue(stu.getUserNameZn());
row.createCell((short) 3).setCellValue(stu.getUserPassword());
row.createCell((short) 4).setCellValue(stu.getUserForeignId());
sheet.autoSizeColumn((short) 0); //调整第一列宽度(自适应),只识别数字、字母
sheet.autoSizeColumn((short) 1); //调整第二列宽度
//调整第三列宽度,有中文,先判断这一列的最长字符串
int length = stu.getUserNameZn().getBytes().length;
sheet.setColumnWidth((short)2,(short)(length*2*256));
sheet.autoSizeColumn((short) 3); //调整第四列宽度
sheet.autoSizeColumn((short) 4); //调整第五列宽度 /*Font font = workbook.createFont();
font.setFontHeightInPoints((short)18); //字体大小
sheet.setDefaultRowHeightInPoints(21.75f);
font.setFontName("楷体");
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体
font.setColor(HSSFColor.GREEN.index); //绿字- 字体颜色*/
}
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(path);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
//清空缓冲区数据
fOut.flush();
// 操作结束,关闭文件
fOut.close();
System.out.println("文件生成...");
} catch (Exception e) {
System.out.println("已运行 xlCreate() : " + e);
}
}
3、修改excel
//修改excel表格,path为excel修改前路径(D:\\test.xlsx)
public void writeExcel3(String path) {
try {
//传入的文件
FileInputStream fileInput = new FileInputStream(path);
//poi包下的类读取excel文件 // 创建一个webbook,对应一个Excel文件
XSSFWorkbook workbook = new XSSFWorkbook(fileInput);
//对应Excel文件中的sheet,0代表第一个
XSSFSheet sh = workbook.getSheetAt(0);
//修改excle表的第5行,从第三列开始的数据
for (int i = 2; i < 4; i++) {
//对第五行的数据修改
sh.getRow(4).getCell((short) i).setCellValue(100210 + i);
}
//将修改后的文件写出到D:\\excel目录下
FileOutputStream os = new FileOutputStream("D:\\修改后test.xlsx");
// FileOutputStream os = new FileOutputStream("D:\\test.xlsx");//此路径也可写修改前的路径,相当于在原来excel文档上修改
os.flush();
//将Excel写出
workbook.write(os);
//关闭流
fileInput.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
poi操作excel2007(读取、生成、编辑)的更多相关文章
- POI操作Excel2007实例二之“SXSSFWorkbook”处理海量数据
转自:http://blog.csdn.net/little_stars/article/details/8266262 前文讲述了 POI 读取的基本操作,但后期 经过试验,当写入数据量超过5万条以 ...
- Java POI 操作Excel(读取/写入)
pom.xml依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...
- java poi 操作
Java POI 操作Excel(读取/写入) https://www.cnblogs.com/dzpykj/p/8417738.html Java操作Excel之Poi基本操作 https://my ...
- POI操作Excel详解,读取xls和xlsx格式的文件
package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- Java使用poi从数据库读取数据生成Excel表格
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- java使用Apache POI操作excel文件
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...
- 使用POI操作Excel时对事先写入模板的公式强制执行
场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生 ...
- 全面了解POI操作Microsoft Office(Word、Excel、PowerPoint)
POI 与 Microsoft Office 1. POI 简介 POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft Office 办公套 ...
随机推荐
- 初步体验libsvm用法1(官方自带工具)
在机器学习和模式识别领域,svm理论使用得很广泛,其理论基础是统计学习,但是如果我们的研究方向不是svm理论,我们只是利用已有的svm工具来对我们的任务进行分类和回归,那么libsvm是一个不错的选择 ...
- nodejs-路由(待补充)
path Router 1 2 3 4 5 var express = require('express'); var Router = express.Router(); Router.get('/ ...
- RGB 与 (RGB转 YCbCr再转为 RGB)的图像
RGB 与 (RGB转 YCbCr再转为 RGB)的图像 不可逆,能够从 矩阵的逆运算看出来. 附上 matlab 代码: clc,clear; Source=imr ...
- CentOS6.5下安装远程桌面服务端软件VNC Server
VNC 使您能够远程訪问和控制您的计算机从还有一计算机或移动设备上,不管你在世界的不论什么地方. 常见的使用情形,包含给同事和朋友提供桌面支持.远程管理您的服务器. 将 VNC Server部署到您想 ...
- 从头认识java-13.5 利用泛型构建复杂模型
这一章节我们来展示一下如何利用泛型构建复杂模型? 1.元组列表 我们之前已经说过元组是一个复杂的模型,能够返回多对象. package com.ray.ch11; import java.util.A ...
- Android框架简要介绍
1. Android架构直观图 下图展示了Android系统的主要组成部分: 总体上而言,Android系统结构由5个部分组成.从上到下,别人是Applications (Android应用 ...
- codeforces 490 D Chocolate
题意:给出a1*b1和a2*b2两块巧克力,每次可以将这四个数中的随意一个数乘以1/2或者2/3,前提是要可以被2或者3整除,要求最小的次数让a1*b1=a2*b2,并求出这四个数最后的大小. 做法: ...
- ubuntu16.04安装配置mysql数据库,分割视频为帧图像
参考http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 版本为5.7 一.安装 安装命令sudo apt-get i ...
- avformat_find_stream_info函数卡住问题
问题:初始化RTSP流时,在android设备上卡住在avformat_find_stream_info函数,然后程序崩溃. 但其他URL没问题,且同样在代码在iOS上没问题,由于jni调试,也没看到 ...
- CSS实现栅格布局
CSS实现栅格布局 设置容器container: .grid-container { width: 100%; max-width: 1200px; } 清除浮动: .row:before, .row ...