导航:首页 > 文件类型 > poi写excel文件

poi写excel文件

发布时间:2023-05-18 08:35:36

❶ 如何使用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); //设置样式

阅读全文

与poi写excel文件相关的资料

热点内容
最早的soul聊天app是怎么样的 浏览:489
网络云盘大小 浏览:420
去美国准备什么app 浏览:461
米8如何复制u盘文件 浏览:523
导航的o文件是什么 浏览:435
Re旧版本下载 浏览:416
电子血压表怎么读数据 浏览:610
软件开发和编程哪个前景好 浏览:30
手机保存图片在相册里找不到文件 浏览:42
xp桌面图案保存哪个文件夹 浏览:136
dnf70版本红眼 浏览:484
越来越不懂两个版本 浏览:258
javabigdecimal位数 浏览:316
学好编程需要学哪些东西 浏览:186
概预算教程 浏览:893
90版本国服第一驱魔 浏览:436
手机qq音乐启动程序 浏览:840
口袋妖怪破解版12版本 浏览:632
数据研究的岗位有哪些 浏览:124
今日头条网站怎么改名 浏览:663

友情链接