❶ 如何使用POI对Excel表进行导入和导出
导入POI的jar包
新建一个项目,在根目录在新建一个lib文件夹,将jar包复制粘贴到lib文件夹后,右键将其添加到项目的build path中,最后的结果如图所示:
2
编写java类,新建一个实体类,比如我们要导出数据库的有关电脑的信息,那么就建一个Computer实体类,代码如下:
package com.qiang.poi;
public class Computer {
private int id;
private String name;
private String description;
private double price;
private double credit;
public int getId() {
return id;
}
public Computer(int id, String name, String description, double price,
double credit) {
super();
this.id = id;
this.name = name;
this.description = description;
this.price = price;
this.credit = credit;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
3
新建一个写入excel的方法,如write2excel,参数可以后面边写边决定(站在一个不熟悉POI的角度)
public static void write2Excel(){}
4
创建操作Excel的HSSFWorkbook对象
HSSFWorkbook excel= new HSSFWorkbook();
创建HSSFSheet对象
Excel中的一个sheet(工作表)对应着java中的一个HSSFSheet对象,利用HSSFWorkbook对象可以创建一个HSSFSheet对象
如:创建一个sheet名为computer的excel
HSSFSheet sheet = excel.createSheet("computer");
创建第一行标题信息的HSSFRow对象
我们都知道excel是表格,即由一行一行组成的,那么这一行在java类中就是一个HSSFRow对象,我们通过HSSFSheet对象就可以创建HSSFRow对象
如:创建表格中的第一行(我们常用来做标题的行) HSSFRow firstRow = sheet.createRow(0); 注意下标从0开始
创建标题行中的HSSFCell数组
当然,excel中每一行是由若干个单元格,我们常称为cell,它对应着java中的HSSFCell对象
如:创建5个单元格 HSSFCell cells[] = new HSSFCell[5];
//假设我们一行有五列数据
创建标题数据,并通过HSSFCell对象的setCellValue()方法对每个单元格进行赋值
既然单元格都准备好了,那最后是不是该填充数据了呀。对的,没错。填充数据之前,得把数据准备好吧,
数据:String[] titles = new String[]{"id","name","description","price","credit"};
插入一句话: 在这个时代,能让机器做的,尽量不让人来做,记住这句话。
好的,继续。现在就通过for循环来填充第一行标题的数据
for (int i = 0; i < 5; i++) {
cells[0] = firstRow.createCell(i);
cells[0].setCellValue(titles[i]);
}
数据分析
第一行标题栏创建完毕后,就准备填充我们要写入的数据吧,在java中,面向对象给我们带来的好处在这里正好体现了,没错
把要填写的数据封装在对象中,即一行就是一个对象,n行就是一个对象列表嘛,好的,走起。
创建对象Computer,私有属性id,name,description,price,credit,以及各属性的setter和getter方法,如步骤二所示。
假设我们要写入excel中的数据从数据库查询出来的,最后就生成了一个List<Computer>对象computers
数据写入
具体数据有了,又该让机器帮我们干活了,向excel中写入数据。
for (int i = 0; i < computers.size(); i++) {
HSSFRow row = sheet.createRow(i + 1);
Computer computer = computers.get(i);
HSSFCell cell = row.createCell(0);
cell.setCellValue(computer.getId());
cell = row.createCell(1);
cell.setCellValue(computer.getName());
cell = row.createCell(2);
cell.setCellValue(computer.getDescription());
cell = row.createCell(3);
cell.setCellValue(computer.getPrice());
cell = row.createCell(4);
cell.setCellValue(computer.getCredit());
}
将数据真正的写入excel文件中
做到这里,数据都写好了,最后就是把HSSFWorkbook对象excel写入文件中了。
OutputStream out = null;
try {
out = new FileOutputStream(file);
excel.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("数据已经写入excel"); //温馨提示
看看我的main方法吧
public static void main(String[] args) throws IOException {
File file = new File("test1.xls");
if(!file.exists()){
file.createNewFile();
}
List<Computer> computers = new ArrayList<Computer>();
computers.add(new Computer(1,"宏碁","笔记本电脑",3333,9.0));
computers.add(new Computer(2,"苹果","笔记本电脑,一体机",8888,9.6));
computers.add(new Computer(3,"联想","笔记本电脑,台式机",4444,9.3));
computers.add(new Computer(4, "华硕", "笔记本电脑,平板电脑",3555,8.6));
computers.add(new Computer(5, "注解", "以上价格均为捏造,如有雷同,纯属巧合", 1.0, 9.9));
write2excel(computers, file);
}
工程目录及执行main方法后的test1.xls数据展示
源码分享,computer就不贴了
package com.qiang.poi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
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;
public class ReadExcel {
public static void main(String[] args) throws IOException {
File file = new File("test1.xls");
if(!file.exists()){
file.createNewFile();
}
List<Computer> computers = new ArrayList<Computer>();
computers.add(new Computer(1,"宏碁","笔记本电脑",3333,9.0));
computers.add(new Computer(2,"苹果","笔记本电脑,一体机",8888,9.6));
computers.add(new Computer(3,"联想","笔记本电脑,台式机",4444,9.3));
computers.add(new Computer(4, "华硕", "笔记本电脑,平板电脑",3555,8.6));
computers.add(new Computer(5, "注解", "以上价格均为捏造,如有雷同,纯属巧合", 1.0, 9.9));
write2excel(computers, file);
}
public static void write2excel(List<Computer> computers,File file) {
HSSFWorkbook excel = new HSSFWorkbook();
HSSFSheet sheet = excel.createSheet("computer");
HSSFRow firstRow = sheet.createRow(0);
HSSFCell cells[] = new HSSFCell[5];
String[] titles = new String[] { "id", "name", "description", "price",
"credit" };
for (int i = 0; i < 5; i++) {
cells[0] = firstRow.createCell(i);
cells[0].setCellValue(titles[i]);
}
for (int i = 0; i < computers.size(); i++) {
HSSFRow row = sheet.createRow(i + 1);
Computer computer = computers.get(i);
HSSFCell cell = row.createCell(0);
cell.setCellValue(computer.getId());
cell = row.createCell(1);
cell.setCellValue(computer.getName());
cell = row.createCell(2);
cell.setCellValue(computer.getDescription());
cell = row.createCell(3);
cell.setCellValue(computer.getPrice());
cell = row.createCell(4);
cell.setCellValue(computer.getCredit());
}
OutputStream out = null;
try {
out = new FileOutputStream(file);
excel.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
❷ POI动态生成Excel
项目功能里要求能够将展示的报表导出excel,因为报表的数据都是动态从list传进来的,所以使用了POI技术来动态构建excel文件。
网络里说POI是介个样子的
“ApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对MicrosoftOffice格式档案读和写的功能”
简单来说就是通过它的API可以进行创建/读取文档,sheet,行列单元格等操作,也可以设置文档的各个样式。
刚接触这个任务的时候查了很多资料,最后主要是参考了这篇文章,程序复制粘贴就跑得通,对POI的整个理解可以得到很好地提升。
详解JAVA POI导出EXCEL报表的操作(包括各种格式及样式的实现)
然后参考着就实现了项目里要求的样子啦
=======================================================
网络中的示例附上作为下次使用的备忘。
创建Excel 文档
示例1将演示如何利用Jakarta POI API 创建Excel 文档。
示例1程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java .io.FileOutputStream;
public class CreateXL {
/** Excel 文件要存放的位置,假定在D盘下*/
public static String outputFile="D:\test.xls";
public static void main(String argv[]){
try{
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"效益指标"的工作表,其语句为:
// HSSFSheet sheet = workbook.createSheet("效益指标");
HSSFSheet sheet = workbook.createSheet();
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = sheet.createRow((short)0);
//在索引0的位置创建单元格(左上端)
HSSFCell cell = row.createCell((short) 0);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue("增加值");
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(outputFile);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();
System.out.println("文件生成...");
}catch(Exception e) {
System.out.println("已运行 xlCreate() : " + e );
}
}
}
读取Excel文档中的数据
示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为test1.xls的Excel文件。
示例2程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java .io.FileInputStream;
public class ReadXL {
/** Excel文件的存放位置。注意是正斜线*/
public static String fileToBeRead="D:\test1.xls";
public static void main(String argv[]){
try{
// 创建对Excel工作簿文件的引用
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
// 创建对工作表的引用。
// 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
HSSFSheet sheet = workbook.getSheet("Sheet1");
// 也可用getSheetAt(int index)按索引引用,
// 在Excel文档中,第一张工作表的缺省索引是0,
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
// 读取左上端单元
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
// 输出单元内容,cell.getStringCellValue()就是取所在单元的值
System.out.println("左上端单元是: " + cell.getStringCellValue());
}catch(Exception e) {
System.out.println("已运行xlRead() : " + e );
}
}
}
设置单元格格式
在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置 字体和单元格的格式,然后再应用这些格式:
1、创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
2、创建格式
HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
3、应用格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题 ");
处理WORD文档
import java .io.*;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
public class TestPoi {
public TestPoi() {
}
public static void main(String args[]) throws Exception
{
FileInputStream in = new FileInputStream ("D:\a.doc");
WordExtractor extractor = new WordExtractor();
String str = extractor.extractText(in);
//System.out.println("the result length is"+str.length());
System.out.println(str);
}
}
搜集链接 方便以后查阅
POI操作Excel常用方法总结
自己封装的poi操作excel工具类
❸ 如何提高poi读写excel文件(同一文件)的效率
我的代码
//导入普通客户信息
publicStringimportExcle(){
TEmployeeemployee=(TEmployee)request.getSession().getAttribute(
"employee");
TCustomerInfoc=newTCustomerInfo();
//声明数据流
InputStreamis=null;
if(employee!=null){
inthang=0;
intlie=0;
if(excel!=null){
try{
//解析excel2007版本文件
is=newFileInputStream(excel);
XSSFWorkbookwork=newXSSFWorkbook(is);
XSSFSheetsheet=work.getSheetAt(0);
introws=sheet.getPhysicalNumberOfRows();
//循环表的行,从第二行开始
for(inti=1;i<rows;i++){
hang=i+1;
c=newTCustomerInfo();
XSSFRowrow=sheet.getRow(i);
if(row==null){//判断是否为空
continue;
}
//读取该行的每一列
for(intj=0;j<row.getPhysicalNumberOfCells();j++){
XSSFCellcell=row.getCell(j);
if(cell==null){
continue;
}
if(cell.toString()==null
||"".equals(cell.toString())){
continue;
}
Stringv=Util.getXssfCellValue(cell);
switch(j){//通过列数来判断对应插如的字段
case0:
c.setCompanyName(v);
break;
case1:
c.setLinkName(v);
break;
case2:
c.setTell(v);
break;
case3:
c.setTelephone(v);
break;
case4:
c.setPosition(v);
break;
case5:
c.setEmail(v);
break;
case6:
c.setCompanyType(v);
break;
case7:
c.setCustomerType(v);
break;
case8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(employee.getName());
c.setCreateDate(newDate());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message","导入成功(=^_^=)");
}catch(Exceptione){
System.out.println("进入---解析excel2003版本文件--错误抛出");
try{
//解析excel2003版本文件
is=newFileInputStream(excel);
HSSFWorkbookwork=newHSSFWorkbook(is);
HSSFSheetsheet=work.getSheetAt(0);
if(sheet!=null){
introws=sheet.getPhysicalNumberOfRows();
//循环表的行,从第二行开始
for(inti=1;i<rows;i++){
hang=i+1;
c=newTCustomerInfo();
HSSFRowrow=sheet.getRow(i);
if(row==null){//判断是否为空
continue;
}
//循环表格的列
for(shortj=0;j<row
.getPhysicalNumberOfCells();j++){
HSSFCellcell=row.getCell(j);
if(cell==null){
continue;
}
if(cell.toString()==null||"".equals(cell.toString())){
continue;
}
Stringv=Util.getHssfCellValue(cell);
switch(j){//通过列数来判断对应插如的字段
case0:
c.setCompanyName(v);
break;
case1:
c.setLinkName(v);
break;
case2:
c.setTell(v);
break;
case3:
c.setTelephone(v);
break;
case4:
c.setPosition(v);
break;
case5:
c.setEmail(v);
break;
case6:
c.setCompanyType(v);
break;
case7:
c.setCustomerType(v);
break;
case8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(v);
c.setCreateDate(newDate());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message","导入成功(=^_^=)");
}
}catch(Exceptione1){
request.setAttribute("message","第"+hang+"行,第"
+lie+"列开始导入失败,请注意导入格式!!");
e1.printStackTrace();
}
}
}
}else{
request.setAttribute("message","登录超时,请重新登录!!");
}
//查询时对象中含有值对查询有误
if(customer!=null){
customer=null;
}
returncustomerList();
}
❹ 如何用Apache POI操作Excel文件
首先POI是开源组织Apache出品的一个开源jar包,提供了方便或漏皮解析Excel的API,我们可以非常方便的使用它来读取Excel。这里介绍3.5Final版本。
所需用到的jar包如下:
说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。
解析Excel2003源码
说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。
解析Excel2003源码
StringBuffer content = new StringBuffer();
HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得一个sheet
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一搜族行
for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值衫差
if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
content.append(aCell.getNumericCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
content.append(aCell.getBooleanCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
content.append(aCell.getStringCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
content.append(aCell.getCellFormula() + "\t");
} else {
continue;
}
}
if(cellNumOfRow == aRow.getLastCellNum()) {
content.append("\n");
}
}
}
}
}
}
return content.toString().trim();
解析Excel2007和2003基本一样,只是将HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。
另外要提醒大家的是Excel的样式都是基于一个单元格的,所以用HSSFRow.getRowStyle()拿样式会出问题的,不一定会拿到你想要的样式。处理合并单元格是POI的一个难点,只能通过判断当前单元格是否在合并单元格之中,如果是,那此单元格的值便是这个合并单元格的首位置单元格的值,只有通过这样才能来处理合并单元格。
处理合并单元格的代码:
public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {
//得到一个sheet中有多少个合并单元格
int sheetmergerCount = sheet.getNumMergedRegions();
for(int i = 0; i < sheetmergerCount; i++) {
//得出具体的合并单元格
CellRangeAddress ca = sheet.getMergedRegion(i);
//得到合并单元格的起始行, 结束行, 起始列, 结束列
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//判断该单元格是否在合并单元格范围之内, 如果是, 则返回 true
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
return true;
}
}
}
return false;
}
public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {
//获得一个 sheet 中合并单元格的数量
int sheetmergerCount = sheet.getNumMergedRegions();
//便利合并单元格
for(int i = 0; i < sheetmergerCount; i++) {
//获得合并单元格
CellRangeAddress ca = sheet.getMergedRegion(i);
//获得合并单元格的起始行, 结束行, 起始列, 结束列
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//判断该单元格是否是在合并单元格中, 如果是, 则返回所在合并单元格的首单元格的值
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
HSSFRow fRow = sheet.getRow(firstR);
HSSFCell fCell = fRow.getCell(firstC);
//除了合并单元格首单元格的值, 其余的用(*)来区分
if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {
return String.valueOf(fCell.getNumericCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {
return String.valueOf(fCell.getBooleanCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {
return fCell.getStringCellValue();
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){
return String.valueOf(fCell.getCellFormula());
}
}
}
}
return "";
}
❺ poi往excel写必须先把整个文件读到内存
不一定。您可以在excel文件中使滚尘掘用大核POI库来查找和修改已有数据,而无需兄神将整个文件加载到内存中。另外
❻ POI 写入EXCEL时出现问题
这和数据库没有兄枯关系
因为setCellValue方法的参数是有double,boolean,string等,而你传进去的是float,他会把你的float转换成double,转的时候有问题。
如果是把float a=4444.4443f;直接弄成变量打印,也会轿尘穗出现这种情况。
可以这闭卜样做改成
Float a=4444.4443f;
cell.setCellValue(a.toString());
测试通过
❼ 您好我也遇到POI写入excel但是显示不出来问题。请问你怎么解决的
今天在使用POI将float类型数据写EXCEL入时候会出现写入的数值与实际数值不符的问题;例如我将数据4444.4443写入EXCEL中(已将数据精度设置为:df.getFormat("#,##0.0"))出现问题图及正常图详见下图。此问题在从数据库中读出记录写入EXCEL时出现,直接往EXCEL文件中写入数据时完全正常;山搭数在数据库读出记录后打印出来也是完全正常的,请高手赐教,部分代码如下:
从数据库读出记录后写入:
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import jcmh.com.bean.JdbcUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class TestPoi {
public static void main(String[] args) throws Exception{
try{
FileOutputStream out = new FileOutputStream("dateFormat.xls");
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
Connection conn = JdbcUtils.getConnection();
Statement stmt = conn.createStatement();
HSSFSheet sheet = hssfworkbook.createSheet("new sheet");
HSSFCellStyle cs = hssfworkbook.createCellStyle();
HSSFDataFormat df = hssfworkbook.createDataFormat();
cs.setDataFormat(df.getFormat("#,##0.0"));
ResultSet rs = stmt.executeQuery("select price from test.test"); //就逗首一条记录为"4444.4443"
while(rs.next()){
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
System.out.println(rs.getFloat(1));
cell.setCellValue(rs.getFloat(1));
cell.setCellStyle(cs);
}
hssfworkbook.write(out);
out.close();
}catch(Exception e){}
}
}
直接写入时枝坦代码如下:
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class TestPoi {
public static void main(String[] args) throws Exception{
try{
FileOutputStream out = new FileOutputStream("dateFormat.xls");
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfworkbook.createSheet("new sheet");
HSSFCellStyle cs = hssfworkbook.createCellStyle();
HSSFDataFormat df =hssfworkbook.createDataFormat();
cs.setDataFormat(df.getFormat("#,##0.0"));
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(4444.4443);
cell.setCellStyle(cs);
hssfworkbook.write(out);
out.close();
}catch(Exception e){}
}
❽ 用java的poi类读取一个excel表格的内容后再写入到一个新excel表格中的完整代码
干嘛还那么麻烦的用poi读数据 然后又全部写到新文件。直接用IO流实现文件的读写不就得啦。
❾ 基于Apache POI的Excel表格处理
通过apache 的poi方法完成excel的读写,cell数据读写等常规操作,支持xls xlsx表格格式。
需要添加依赖的jar资源,具体如下:
xls格式的excel 表格需要通过HSSFWorkbook加载,而xlsx格式的excel表格需要XSSFWorkbook表格加载,获取WorkBook对象实例,这个实例对象就是表格文件的对象,具体为:
上面不同后缀的文件操作方法有所区分,分为两类,xls表格对应的HSSFWorkbook类方法,xlsx对应的XSSFWorkbook类方法,操作过程基本类似,下面以答掘HSSFWorkbook为例进行讲述。( xls,xlsx只要获取到wb后,如果没有特别的处理操作,后续采用这两种方法的任一种都是可以进行表格数据处理,可以不做区分 )
补充:获取wb后,wb提供的方法有很多,包括创建表格createSheet,获取表格名称getSheetName等等,具体根据自己需求使用。
正常来说,每个粗举陵Excel文件都会有多个sheet表格,比如Sheet1,Sheet2,Sheet3等等,我们通过第一步获取的wb对象,就可以轻松的拿到Excel表格的实例对象,方法两种,可以根据Excel表格的index序号获取,也可以通过Excel表格的名字获取,具体如下:
补充:sheet对象同样提供了用于操作本表格的很多方法,包括行列读写,新填行列等等所有表格相关的操作内容。
上一步获取了sheet对象,我们就可以获取具体的行列数据了。
通过上述cell对象我们就可以获得具体的内容了,包括内容格式等等详细信息。
单元格读取方式根据其类型有所不同,具体如下所示。
如果想给新添加的Cell设置个字体格式及颜色啥的,也是可以的,比如把刚新建的Cell字体设为红色,具体如下:
上面步骤,只是对于表格数据的处理,但实际上并没有保存到文件,如果此时就结束,那表格文件里的数据其实是没有更改,一定要记得最后要保存到表格哦~,具体如下:岩戚
到此,基本的表格读写处理已经基本完成了,Poi的方法库其实有很多操作,这里只是简单介绍的基本的读写,如果你想修改表格字体等等,都是可以实现的哦,赶紧动手试试吧。
本程序Gitee源码地址: https://gitee.com/carmanshaw/excelpoi-master.git
开发的表格处理小工具地址: https://gitee.com/carmanshaw/ExcelProcessor.git
❿ java poi 在服务器生成excel文件
报格式错误是因为你没有填充EXCEL的内容。
正确的做法是:
1, HSSFWorkbook ws = new HSSFWorkbook();//建立新HSSFWorkbook对象
2, Sheet sheet = workbook.createSheet(0); //建立一个新的sheet
3,Row row = sheet.createRow(1); //建立一个新的row对象
4, Cell cell = row.createCell(0); //在row上创建方格即列,
cell.setCellValue(cellValue); //设置这个行中列的值
cell.setCellStyle(cellStyle); //设置样式