wsql 发表于 2013-2-5 09:42:48

通过文件结构直接生成xls文件的VB.Net和Java两个版本

在论坛发布的帖子,受到热心网友支持,翻译了两个语言的版本出来,在此一起收录
原文:
通过文件结构直接生成xls文件
ypZhuang 网友的java代码
<div class="highlighter">
[*]importjava.io.*;
[*]importjava.util.*;
[*]
[*]
[*]publicclassExcelWriter{
[*]publicstaticvoidmain(Stringargs[]){
[*]try{
[*]ExcelWriterexcel=newExcelWriter("c://mytest.xls");
[*]excel.beginWrite();
[*]
[*]Stringhead[]={"StuNumber","Name","Score"};
[*]excel.addLine(head);
[*]
[*]List<String>list=newArrayList<String>();
[*]list.add("99");
[*]list.add("jinjazz");
[*]list.add("99.9");
[*]excel.addLine(1,list);
[*]
[*]java.util.List<GradePO>gradeList=newArrayList<GradePO>();
[*]for(inti=0;i<10;i++){
[*]GradePOgrade=newGradePO();
[*]grade.setStuNumber(i);
[*]grade.setName("学生"+i);
[*]grade.setScore(88.8f+i);
[*]gradeList.add(grade);
[*]}
[*]Stringfields[]={"stuNumber","name","score"};
[*]excel.addBean(gradeList,fields);
[*]
[*]excel.writeNumber(12,0,12);
[*]excel.writeString(12,1,"ypzhuang");
[*]excel.writeNumber(12,2,100.0d);
[*]excel.endWrite();
[*]
[*]System.out.println("writefileok");
[*]}catch(FileNotFoundExceptione){
[*]System.err.print(e.getMessage());
[*]e.printStackTrace();
[*]}catch(IOExceptione){
[*]System.err.print(e.getMessage());
[*]e.printStackTrace();
[*]}catch(Exceptione){
[*]System.err.print(e.getMessage());
[*]e.printStackTrace();
[*]}
[*]}
[*]privateFileOutputStream_wirter;
[*]privateintrow=0;
[*]privateStringpath;
[*]
[*]publicExcelWriter(StringstrPath)throwsFileNotFoundException{
[*]_wirter=newFileOutputStream(strPath);
[*]path=strPath;
[*]}
[*]
[*]/**
[*]*写入short数组
[*]*@paramvalues
[*]*@throwsIOException
[*]*/
[*]privatevoid_writeFile(short[]values)throwsIOException{
[*]for(shortv:values){
[*]byte[]b=getBytes(v);
[*]_wirter.write(b,0,b.length);
[*]}
[*]}
[*]
[*]/**
[*]*写文件头
[*]*@throwsIOException
[*]*/
[*]publicvoidbeginWrite()throwsIOException{
[*]_writeFile(newshort[]{0x809,8,0,0x10,0,0});
[*]}
[*]
[*]/**
[*]*写文件尾
[*]*@throwsIOException
[*]*/
[*]publicvoidendWrite()throwsIOException{
[*]_writeFile(newshort[]{0xa,0});
[*]_wirter.close();
[*]}
[*]
[*]/**
[*]*写一个浮点数到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(shortx,shorty,floatvalue)throwsIOException{
[*]//_writeFile(newshort[]{0x203,14,x,y,0});
[*]//byte[]b=getBytes(value);
[*]//_wirter.write(b,0,b.length);
[*]writeString((short)x,(short)y,value+"");
[*]}
[*]
[*]/**
[*]*写一个数字到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(intx,inty,floatvalue)throwsIOException{
[*]writeNumber((short)x,(short)y,value);
[*]}
[*]
[*]/**
[*]*写一个字符到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteString(shortx,shorty,Stringvalue)throwsIOException{
[*]byte[]b=getBytes(value);
[*]_writeFile(newshort[]{0x204,(short)(b.length+8),x,y,0,(short)b.length});
[*]_wirter.write(b,0,b.length);
[*]}
[*]
[*]/**
[*]*写一个字符到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteString(intx,inty,Stringvalue)throwsIOException{
[*]writeString((short)x,(short)y,value);
[*]}
[*]
[*]
[*]/**
[*]*写一个整数到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(shortx,shorty,intvalue)throwsIOException{
[*]//_writeFile(newshort[]{0x203,14,x,y,0});
[*]//byte[]b=getBytes(value);
[*]//_wirter.write(b,0,b.length);
[*]writeString(x,y,value+"");
[*]}
[*]
[*]/**
[*]*写一个整数到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(intx,inty,intvalue)throwsIOException{
[*]writeNumber((short)x,(short)y,value);
[*]}
[*]
[*]/**
[*]*写一个双精度浮点数到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(shortx,shorty,doublevalue)throwsIOException{
[*]writeString(x,y,value+"");
[*]}
[*]
[*]/**
[*]*写一个双精度浮点数到单元格x,y
[*]*@paramx
[*]*@paramy
[*]*@paramvalue
[*]*@throwsIOException
[*]*/
[*]publicvoidwriteNumber(intx,inty,doublevalue)throwsIOException{
[*]writeNumber((short)x,(short)y,value);
[*]}
[*]
[*]/**
[*]*row行写入一行字符串
[*]*@paramrows
[*]*@paramhead
[*]*@throwsIOException
[*]*/
[*]publicvoidaddLine(introws,Stringhead[])throwsIOException{
[*]if(rows<0){
[*]rows=0;
[*]}
[*]for(inti=0;head!=null&&i<head.length;i++){
[*]writeString(rows,i,head);
[*]}
[*]row=rows+1;
[*]}
[*]
[*]/**
[*]*在第0行写入一行字符串
[*]*@paramhead字符数组
[*]*@throwsIOException
[*]*/
[*]publicvoidaddLine(Stringhead[])throwsIOException{
[*]addLine(0,head);
[*]}
[*]
[*]/**
[*]*在row行写入一行字符串
[*]*
[*]*@paramrows
[*]*@paramlist字符LIST
[*]*@throwsIOException
[*]*/
[*]publicvoidaddLine(introws,java.util.List<String>list)throwsIOException{
[*]if(rows<0){
[*]rows=0;
[*]}
[*]for(inti=0;list!=null&&i<list.size();i++){
[*]writeString(rows,i,list.get(i));
[*]}
[*]row=rows+1;
[*]}
[*]
[*]/**
[*]*在当前行写入一行字符串
[*]*@paramlist
[*]*@throwsIOException
[*]*/
[*]publicvoidaddLine(java.util.List<String>list)throwsIOException{
[*]addLine(row,list);
[*]}
[*]
[*]/**
[*]*在当前行开始写入JavaBean对象List
[*]*@parambeans
[*]*@paramfields
[*]*@throwsException
[*]*/
[*]publicvoidaddBean(java.util.Listbeans,Stringfields[])throwsException{
[*]
[*]StringmethodName=null;
[*]Objectparams[]=newObject;
[*]ClassparamCls[]=newClass;
[*]
[*]List<String>list=newArrayList<String>();
[*]for(Iteratoriterator=beans.iterator();iterator.hasNext();){
[*]Objectobj=iterator.next();
[*]intl=fields.length;
[*]for(intj=0;j<l;j++){
[*]Stringfield=fields;
[*]methodName=(newStringBuilder("get")).append(
[*]field.substring(0,1).toUpperCase()).append(
[*]field.substring(1)).toString();
[*]Stringtmp=String.valueOf(obj.getClass().getMethod(methodName,paramCls).invoke(obj,params));
[*]list.add(tmp);
[*]
[*]}
[*]addLine(list);
[*]list.clear();
[*]}
[*]
[*]}
[*]
[*]privatebyte[]getBytes(shortn){
[*]byte[]b=newbyte;
[*]b=(byte)(n&0xff);
[*]b=(byte)(n>>8&0xff);
[*]returnb;
[*]}
[*]
[*]privatebyte[]getBytes(intn){
[*]//byte[]b=newbyte;
[*]//
[*]//b=(byte)(n&0xff);
[*]//b=(byte)(n>>8&0xff);
[*]//b=(byte)(n>>16&0xff);
[*]//b=(byte)(n>>24&0xff);
[*]
[*]//b=(byte)(n&0xff);
[*]//b=(byte)(n>>8&0xff);
[*]//b=(byte)(n>>16&0xff);
[*]//b=(byte)(n>>24&0xff);
[*]//returnb;
[*]//returngetBytes((short)n);
[*]returngetBytes(n+"");
[*]}
[*]
[*]privatebyte[]getBytes(floatf){
[*]returngetBytes(Float.floatToRawIntBits(f));
[*]}
[*]
[*]privatebyte[]getBytes(Strings){
[*]returns.getBytes();
[*]}
[*]
[*]publicInputStreamgetInputStreamResult()throwsIOException{
[*]if(_wirter!=null){
[*]endWrite();
[*]}
[*]returnnewFileInputStream(path);
[*]}
[*]
[*]
[*]}
[*]
页: [1]
查看完整版本: 通过文件结构直接生成xls文件的VB.Net和Java两个版本