本文目录一览:

您好我也遇到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){}

}

poi如何去写入excel文件

package com.common.util;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

public class ExcelUtil{

public static HSSFWorkbook exportExcelForStudent(List studentList

) { //创建excel文件对象

HSSFWorkbook wb = new HSSFWorkbook();

//创建一个张表

Sheet sheet = wb.createSheet();

//创建第一行

Row row = sheet.createRow(0);

//创建第二行

Row row1 = sheet.createRow(1);

// 文件头字体

Font font0 = createFonts(wb, Font.BOLDWEIGHT_BOLD, "宋体", false,

(short) 200);

Font font1 = createFonts(wb, Font.BOLDWEIGHT_NORMAL, "宋体", false,

(short) 200);

// 合并第一行的单元格

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1));

//设置第一列的文字

createCell(wb, row, 0, “总数”, font0);

//合并第一行的2列以后到8列(不包含第二列)

sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 8));

//设置第二列的文字

createCell(wb, row, 2, “基本信息”, font0);

//给第二行添加文本

createCell(wb, row1, 0, "序号", font1);

createCell(wb, row1, 1, "版本", font1);

createCell(wb, row1, 2, "姓名", font1);

createCell(wb, row1, 3, "性别", font1);

createCell(wb, row1, 4, "年龄", font1);

createCell(wb, row1, 5, "年级", font1);

createCell(wb, row1, 6, "学校", font1);

createCell(wb, row1, 7, "父母名称", font1);

createCell(wb, row1, 8, "籍贯", font1);

createCell(wb, row1, 9, "联系方式", font1);

//第三行表示

int l = 2;

//这里将学员的信心存入到表格中

for (int i = 0; i studentList.size(); i++) {

//创建一行

Row rowData = sheet.createRow(l++);

Student stu = studentList.get(i);

createCell(wb, rowData, 0, String.valueOf(i + 1), font1);

createCell(wb, rowData, 1, "3.0", font1);

createCell(wb, rowData, 2, stu.getName(), font1);

createCell(wb, rowData, 3, stu.getStudentsex(), font1);

createCell(wb, rowData, 4, stu.getStudentage(), font1);

createCell(wb, rowData, 5, stu.getGrade().getName(), font1);

createCell(wb, rowData, 6, stu.getStudentschool(), font1);

createCell(wb, rowData, 7, stu.getparents(), font1);

createCell(wb, rowData, 8, stu.getStudentprovince()+stu.getStudentcity()+stu.getStudentarea(), font1);

createCell(wb, rowData, 9, stu.getContact(), font1);

}

return wb;

}

/**

* 创建单元格并设置样式,值

*

* @param wb

* @param row

* @param column

* @param

* @param

* @param value

*/

public static void createCell(Workbook wb, Row row, int column,

String value, Font font) {

Cell cell = row.createCell(column);

cell.setCellValue(value);

CellStyle cellStyle = wb.createCellStyle();

cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_BOTTOM);

cellStyle.setFont(font);

cell.setCellStyle(cellStyle);

}

/**

* 设置字体

*

* @param wb

* @return

*/

public static Font createFonts(Workbook wb, short bold, String fontName,

boolean isItalic, short hight) {

Font font = wb.createFont();

font.setFontName(fontName);

font.setBoldweight(bold);

font.setItalic(isItalic);

font.setFontHeight(hight);

return font;

}

/**

* 判断是否为数字

*

* @param str

* @return

*/

public static boolean isNumeric(String str) {

if (str == null || "".equals(str.trim()) || str.length() 10)

return false;

Pattern pattern = Pattern.compile("^0|[1-9]//d*(//.//d+)?$");

return pattern.matcher(str).matches();

}

}

如何使用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中的数据从数据库查询出来的,最后就生成了一个ListComputer对象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();

}

ListComputer computers = new ArrayListComputer();

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();

}

ListComputer computers = new ArrayListComputer();

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(ListComputer 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();

}

}

}