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. JQuery:JQuery遍历详解

    JQuery:遍历一.什么是遍历?jQuery 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找"(或选取)HTML 元素.以某项选择开始,并沿着这个 ...

  2. asm/aam links

    http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/asm_links.html

  3. Android 通过Base64上传图片到服务器

    之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下. 前台图片处理:(传Bitmap对象即可) /** * ...

  4. linux设备模型_转

    建议原博文查看,效果更佳. 转自:http://www.cnblogs.com/wwang/category/269350.html Linux设备模型 (1) 随着计算机的周边外设越来越丰富,设备管 ...

  5. 第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  6. Django 学习

    urls.py 路由系统 from django.conf.urls import url,includefrom django.contrib import adminfrom web import ...

  7. 使用NSData处理数据

    // //  main.m //  06-使用NSData处理数据 // //  Created by apple on 14-3-21. //  Copyright (c) 2014年 apple. ...

  8. iOS UICollectionView之三(基本用法)

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  9. Ajax.ActionLink()方法的使用

    第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!哎,今天就和大家一起讨论下Ajax的辅助方法ActionLink的使用,如果有讲的不好的地方或错的地方,请大家务必扔板砖,要投准哦,砸死我算 ...

  10. 阿里与腾讯“智慧城市”的O2O谁更强?(分享)

    成都亿合科技:本月22日蚂蚁金服联合新浪微博宣布“智慧城市”战略,用户可通过新浪微博.手机淘宝.支付宝三大客户端完成医疗.市政缴费以及相关信息查询工作,首批入驻城市有上海.太原.深圳.青岛等12个城市 ...