import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
*
* @Description :POI读取/创建Excel文件
* @author : James
* @version : 1.0
* @Date : 2016年3月2日 下午2:18:27
*/
public class ExcelManager { private HSSFWorkbook hssfWorkbook;
private XSSFWorkbook xssfWorkbook; /**
* 读取Excel2010版
*
* @param inputStream输入流
* @return
*/
public List<String[]> readXlsx(InputStream inputStream) {
List<String[]> result = new ArrayList<>();
try {
xssfWorkbook = new XSSFWorkbook(inputStream);
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow != null) {
String[] row = new String[xssfSheet.getRow(1).getLastCellNum()]; // 以第一列值行为标准
for (int i = 0; i < row.length; i++) {
row[i] = getValue(xssfRow.getCell(i));
}
result.add(row);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 读取Excel2003/2007版
*
* @param inputStream输入流
* @return
*/
public List<String[]> readXls(InputStream inputStream) {
List<String[]> result = new ArrayList<>();
try {
hssfWorkbook = new HSSFWorkbook(inputStream);
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow != null) {
String[] row = new String[hssfSheet.getRow(1).getLastCellNum()];
for (int i = 0; i < row.length; i++) {
row[i] = getValue(hssfRow.getCell(i));
}
result.add(row);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public List<String[]> readXlsx(File file) {
List<String[]> result = new ArrayList<>();
try {
xssfWorkbook = new XSSFWorkbook(file);
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow != null) {
String[] row = new String[xssfSheet.getRow(1).getLastCellNum()]; // 以第一列值行为标准
for (int i = 0; i < row.length; i++) {
row[i] = getValue(xssfRow.getCell(i));
}
result.add(row);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
} private String getValue(XSSFCell xssfRow) {
if (xssfRow == null)
return "";
if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
return String.valueOf(xssfRow.getBooleanCellValue());
} else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
return String.valueOf(xssfRow.getNumericCellValue());
} else {
return String.valueOf(xssfRow.getStringCellValue().trim());
}
} private String getValue(HSSFCell hssfCell) {
if (hssfCell == null)
return "";
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
return String.valueOf(hssfCell.getNumericCellValue());
} else {
return String.valueOf(hssfCell.getStringCellValue().trim());
}
} /**
* 重新创建新Excel文件
*
* @return
*/
public String createNewExcel(File file, String newFilePath, String[] title) {
try {
InputStream inputStream = new FileInputStream(file);
// 文件类型
String fileType = file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length());
List<String[]> objList = null;
if ("xlsx".equals(fileType)) {
objList = readXlsx(inputStream);
} else if ("xls".equals(fileType)) {
objList = readXls(inputStream);
}
// 创建Excel的工作书册 Workbook,对应到一个excel文档
XSSFWorkbook wb = new XSSFWorkbook();
// 创建Excel的工作sheet,对应到一个excel文档的tab
XSSFSheet sheet = wb.createSheet("sheet1");
sheet.setColumnWidth(0, 5500);// 设置单元格宽度,这里设置第一列的宽度
XSSFRow firstRow = sheet.createRow(0);
// 设置字体
XSSFFont font = wb.createFont();
font.setBold(true);// 粗体字
font.setColor(HSSFColor.RED.index);
font.setFontName("宋体");
// 设置单元格属性
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFont(font);// 设置字体
cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
// 生成表头
for (int i = 0; i < title.length; i++) {
XSSFCell cell = firstRow.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(cellStyle);// 设置单元格背景
}
// 生成数据
for (int i = 0; i < objList.size(); i++) {
String[] lineObj = objList.get(i);
XSSFRow row = sheet.createRow(i + 1);// 因为表头已经占用了第一行,所以后面生成的行需从第二行开始
for (int j = 0; j < lineObj.length; j++) {
XSSFCell cell = row.createCell(j);
cell.setCellValue(lineObj[j].toString());
}
}
FileOutputStream os = new FileOutputStream(newFilePath);
wb.write(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} public static void main(String[] args) {
String[] title = { "姓名", "年龄", "性别", "岗位", "入职年份" };
ExcelManager em = new ExcelManager();
em.createNewExcel(new File("D:\\用户信息.xlsx"), "D:\\new_excel.xlsx", title);
} }

效果图

原Excel文件:

生成后:

POI读取/写入Excel文件的更多相关文章

  1. Java入门开发POI读取导入Excel文件

    Apache POI是Apache开发的开源的跨平台的 Java API,提供API给Java程序对Microsoft Office格式档案进行各种操作. POI中Excel操作很简单,主要类有 HS ...

  2. Java poi读取,写入Excel,处理row和cell可能为空的情况

    首先需要导入包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NP ...

  3. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils; import java.io.File; import ja ...

  4. Apache POI 实现对 Excel 文件读写

    1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...

  5. 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...

  6. 从网络上获取图片,并写入excel文件

    package com.weChat.utils; import com.manage.utils.DateUtil;import com.manage.utils.MD5Util;import or ...

  7. python pandas写入excel文件

    pandas读取.写入csv数据非常方便,但是有时希望通过excel画个简单的图表看一下数据质量.变化趋势并保存,这时候csv格式的数据就略显不便,因此尝试直接将数据写入excel文件. pandas ...

  8. Delphi数据库数据用文件流方式快速写入Excel文件

    在开发数据库应用程序中,经常要将类型相同的数据导出来,放到Excel文件中,利用Excel强大的编辑功能,对数据作进一步的加工处理.这有许多的方法,我们可以使用OLE技术,在Delphi中创建一个自动 ...

  9. Java poi读取,写入Excel2003

    Java poi读取,写入Excel2003 相关阅读:poi读写Excel2007:http://www.cnblogs.com/gavinYang/p/3576741.htmljxl读写excel ...

随机推荐

  1. ie无法下载 无法打开该internet站点.请求的站点不可用或无法找到.请稍后重试

    PK找的: http://support.microsoft.com/kb/316431/ 症状 ... 如果服务器使用着安全套接字层 (SSL) 并且已将下面的两个 HTTP 标头或其中的一个添加到 ...

  2. T4模版生成多个实体文件时,提示找不到 Host

    T4模版生成多个实体文件时,提示找不到 Host 使用以下方法,把hostspecific改为true就可以了 hostspecific:有效值true.false,默认为false.如果将此特性的值 ...

  3. javascript 内部函数的定义及调用

    内部函数:定义在另一个函数中的函数 例如: <script> function outer(){ function inner(){ } } </script> inner() ...

  4. linux查看公网地址

    curl cip.cc curl http://members.3322.org/dyndns/getip

  5. Oracle RAC 11.2.0.4 – RHRL 6.4: DiskGroup resource are not running on nodes. Database instance may not come up on these nodes

    使用DBCA创建新库的时候报错: 查看资源状态: $ crsctl stat res -t ------------------------------------------------------ ...

  6. css 滑动按钮样式

    <div class="pub_switch_box"> <input type="checkbox" id="pub_switch ...

  7. 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]

    最近在学习搭建Hadoop, 我们从Apache官方网站直接下载最新版本Hadoop2.2.官方目前是提供了linux32位系统可执行文件,结果运行时发现提示 “libhadoop.so.1.0.0 ...

  8. JAX-WS(一)之使用wsgen从Java创建简单的WebService

    概念 JAX-WS2.0的全称Java API for XML-Based Web Service 2.0.JAX-WS2.0是对JAX-RPC1.0规范的扩展,是JAX-RPC1.1的后续版本,JA ...

  9. 续【C# 以管理员方式启动Winform,进而使用管理员控制Windows Service】

    前提:在我们的域环境下,给分配了管理员级别两个账号(user0,user1). 需求:只允许一个账户运行进程"WindowsFormsApplication1": 1,)当已经运行 ...

  10. 从零开始攻略PHP(4)——数组的使用

    1.数组的概念 数组就是一个用来存储一系列变量值的命名区域. 每个数组元素有一个相关的索引(也成为关键字),它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 ...