java使⽤poi解析或处理excel的时候,如何防⽌数字变成科学计数法的形式和其
他常见E。。。
当使⽤POI处理excel的时候,遇到了⽐较长的数字,虽然excel⾥⾯设置该单元格是⽂本类型的,但是POI的cell的类型就会变成数字类型。
⽽且⽆论数字是否⼩数,使⽤NumbericCellValue() 去获取值的时候,会得到⼀个double,⽽且当长度⼤⼀点的时候会变成科学计数法形式。
那么获取这个单元格的原始的数据,就其实是⼀个double怎么转换成整数的问题了。
使⽤DecimalFormat对这个double进⾏了格式话,随后使⽤format⽅法获得的String就是你想要的值了。
DecimalFormat df = new DecimalFormat("0");
String whatYourWant = df.NumericCellValue());
POI设置EXCEL单元格格式为⽂本、⼩数、百分⽐、货币、⽇期、科学计数法和中⽂⼤写
以下将要介绍的每⼀种都会⽤到这三⾏中的变量
HSSFWorkbook demoWorkBook = new HSSFWorkbook();
HSSFSheet demoSheet = ateSheet("The World's 500 Enterprises");
HSSFCell cell = ateRow(0).createCell(0);
第⼀种:⽇期格式
cell.setCellValue(new Date(2008,5,5));
//set date format
HSSFCellStyle cellStyle = ateCellStyle();
HSSFDataFormat format= ateDataFormat();
cellStyle.Format("yyyy年m⽉d⽇"));
cell.setCellStyle(cellStyle);
第⼆种:保留两位⼩数格式
cell.setCellValue(1.2);
HSSFCellStyle cellStyle = ateCellStyle();
cellStyle.BuiltinFormat("0.00"));
cell.setCellStyle(cellStyle);
这⾥与上⾯有所不同,⽤的是BuiltinFormat()⽅法,之所以⽤这个,是因为0.00是Excel内嵌的格式,完整的Excel 内嵌格式列表⼤家可以看这个窗⼝中的⾃定义列表:
第三种:货币格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = ateCellStyle();
HSSFDataFormat format= ateDataFormat();
cellStyle.Format("¥#,##0"));
cell.setCellStyle(cellStyle);
第四种:百分⽐格式
cell.setCellValue(20);
HSSFCellStyle cellStyle = ateCellStyle();
cellStyle.BuiltinFormat("0.00%"));
cell.setCellStyle(cellStyle);
第五种:中⽂⼤写格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = ateCellStyle();
HSSFDataFormat format= ateDataFormat();
cellStyle.Format("[DbNum2][$-804]0"));
cell.setCellStyle(cellStyle);
第六种:科学计数法格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = ateCellStyle();
cellStyle.setDataFormat( BuiltinFormat("0.00E+00"));
cell.setCellStyle(cellStyle);
实际开发过程中通常⽤到的就是从数据库导出EXCEL表格了,JXL可以这样做,其实POI也可以(关于JXL与POI的异同可访问我之前总结的⽂章),之前写过POI对七种⽂档(当然也包括EXCEL)的内容读取操作的⽂章,这次要写的就⾮常重要了,就是开发中经常会⽤到的POI读取数据库导出EXCEL的操作,所谓导出EXCEL也就是⽣成带数据内容的新的EXCEL⽂件
整理思路:
1)数据库中的字段对应EXCEL的最顶层⼀⾏各个CELL名称
2)将每个数据⼀次插⼊到对应名称CELL的对应记录位置
3)为了⽅便操作,顶层的cell各个名称可以抽取出来成为⼀个单独类
第⼀部分:单独的EXCEL表头类
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Cachetable {
// Fields
private int recnum;
private String devIp;
private String srcaddr;
private String dstaddr;
private String nexthop;
private String input;
private String output;
private String dpkts;
private String doctets;
private String sstart;
private String dstport;
private String prot;
private String tos;
private String srcas;
private String dstas;
private String pduversion;
/** default constructor */
public Cachetable() {
}
/
** full constructor */
public Cachetable(int recnum, String devIp, String srcaddr, String dstaddr, String nexthop, String input, String output, String dpkts, String doctets, String sst art, String dstport, String prot, String tos, String srcas, String dstas,String pduversion) {
this.devIp = devIp;
this.srcaddr = srcaddr;
this.dstaddr = dstaddr;
this.input = input;
this.output = output;
this.dpkts = dpkts;
this.doctets = doctets;
this.sstart = sstart;
this.dstport = dstport;
this.prot = prot;
this.srcas = srcas;
this.dstas = dstas;
this.pduversion = pduversion;
}
}
第⼆部分:具体的POI操作⽣成EXCEL类
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
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.HSSFFooter;
import org.apache.poi.hssf.usermodel.HSSFHeader;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.kk.flow.webapp.util.Cachetable;
public class ExcelOut {
//表头
public static final String[] tableHeader = {"序号","版本","接收时刻","设备","⼊接⼝","出接⼝",
"源IP","⽬的IP","下⼀跳","协议","端⼝","对端端⼝","TOS","源AS","⽬的AS","TCP_FLAG","pad1","pad2"}; //创建⼯作本 TOS
public static HSSFWorkbook demoWorkBook = new HSSFWorkbook();
//创建表
public static HSSFSheet demoSheet = ateSheet("The World's 500 Enterprises");
//表头的单元格个数⽬
public static final short cellNumber = (short)tableHeader.length;
//数据库表的列数
public static final int columNumber = 1;
/**
* 创建表头
* @return
*/
public static void createTableHeader()
{
HSSFHeader header = Header();
header.setCenter("世界五百强企业名次表");
HSSFRow headerRow = ateRow((short) 0);
for(int i = 0;i < cellNumber;i++)
parse error怎么解决{
HSSFCell headerCell = ateCell((short) i);
headerCell.setCellType(HSSFCell.CELL_TYPE_STRING);
headerCell.setCellValue(tableHeader[i]);
}
}
/**
* 创建⾏
* @param cells
* @param rowIndex
*/
public static void createTableRow(List<String> cells,short rowIndex)
{
//创建第rowIndex⾏
HSSFRow row = ateRow((short) rowIndex);
for(int i = 0;i < cells.size();i++)
{
//创建第i个单元格
HSSFCell cell = ateCell(i);
CellType()!=1){
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
//新增的四句话,设置CELL格式为⽂本格式
HSSFCellStyle cellStyle2 = ateCellStyle();
HSSFDataFormat format = ateDataFormat();
cellStyle2.Format("@"));
cell.setCellStyle(cellStyle2);
cell.(i));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
}
/**
* USE:⽤于获取Cachetable的数据。。。假数据。到时候:你连接数据库的到List<Cachetable>的数据就⾏了。共⽣成 * 100条数据.相当于100⾏
*
* @return
*/
public List<Cachetable> getDate() {
List<Cachetable> cacheList = new ArrayList<Cachetable>();
for (int j = 0; j < 300; j++) {
Cachetable tb = new Cachetable();
tb.setRecnum(j + 1);
tb.setDevIp("JavaCrazyer");
tb.setSrcaddr("北京");
tb.setDstaddr("xxx");
tb.setNexthop("yy");
tb.setInput("123");
tb.setOutput("127.0.0.1");
tb.setDpkts("what are you doing?");
tb.setDoctets("who are you?");
tb.setSstart("Oh sure!");
tb.setProt("One");
tb.setTos("two");
tb.setSrcas("three");
tb.setDstas("four");
tb.setPduversion("不知道");
cacheList.add(tb);
}
return cacheList;
}
/**
* 创建整个Excel表
* @throws SQLException
*
*/
public void createExcelSheet() throws SQLException{
createTableHeader();
int rowIndex=1;
List<Cachetable> list=getDate();
for(int j=0;j<list.size();j++){
List<String> listRead=new ArrayList<String>();
for(int i=1;i<=columNumber;i++){
listRead.(i).getDevIp());
listRead.(i).getSrcaddr());
listRead.(i).getDstaddr());
listRead.(i).getNexthop());
listRead.(i).getInput());
listRead.(i).getOutput());
listRead.(i).getDpkts());
listRead.(i).getDoctets());
listRead.(i).getSstart());
listRead.(i).getProt());
listRead.(i).getTos());
listRead.(i).getSrcas());
listRead.(i).getDstas());
listRead.(i).getPduversion());
listRead.add(rowIndex+"");
}
createTableRow(listRead,(short)rowIndex);
rowIndex++;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论