`

java实现excel导入导出(2)(转)

阅读更多

=================摘要=====================
java如何操作Excel(数据导入导出)(转)

jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下载。

一.读取Excel文件内容

java 代码
/**读取Excel文件的内容 
* @param file  待读取的文件 
* @return 
*/ 
public static String readExcel(File file){  
    StringBuffer sb = new StringBuffer();  
      
    Workbook wb = null;  
    try {  
        //构造Workbook(工作薄)对象  
        wb=Workbook.getWorkbook(file);  
    } catch (BiffException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
      
    if(wb==null)  
        return null;  
      
    //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了  
    Sheet[] sheet = wb.getSheets();  
      
    if(sheet!=null&&sheet.length>0){  
        //对每个工作表进行循环  
        for(int i=0;i
            //得到当前工作表的行数  
            int rowNum = sheet[i].getRows();  
            for(int j=0;j
                //得到当前行的所有单元格  
                Cell[] cells = sheet[i].getRow(j);  
                if(cells!=null&&cells.length>0){  
                    //对每个单元格进行循环  
                    for(int k=0;k
                        //读取当前单元格的值  
                        String cellValue = cells[k].getContents();  
                        sb.append(cellValue+"\t");  
                    }  
                }  
                sb.append("\r\n");  
            }  
            sb.append("\r\n");  
        }  
    }  
    //最后关闭资源,释放内存  
    wb.close();  
    return sb.toString();  

二.写入Excel文件

这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api.
同时还推荐一篇不错的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10

java 代码
/**生成一个Excel文件 
     * @param fileName  要生成的Excel文件名 
     */ 
    public static void writeExcel(String fileName){  
        WritableWorkbook wwb = null;  
        try {  
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象  
            wwb = Workbook.createWorkbook(new File(fileName));  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        if(wwb!=null){  
            //创建一个可写入的工作表  
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置  
            WritableSheet ws = wwb.createSheet("sheet1", 0);  
              
            //下面开始添加单元格  
            for(int i=0;i<10;i++){  
                for(int j=0;j<5;j++){  
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行  
                    Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");  
                    try {  
                        //将生成的单元格添加到工作表中  
                        ws.addCell(labelC);  
                    } catch (RowsExceededException e) {  
                        e.printStackTrace();  
                    } catch (WriteException e) {  
                        e.printStackTrace();  
                    }  
 
                }  
            }  
 
            try {  
                //从内存中写入文件中  
                wwb.write();  
                //关闭资源,释放内存  
                wwb.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (WriteException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
三.在一个Excel文件中查找是否包含某一个关键字

java 代码
    /**搜索某一个文件中是否包含某个关键字 
     * @param file  待搜索的文件 
     * @param keyWord  要搜索的关键字 
     * @return 
     */ 
    public static boolean searchKeyWord(File file,String keyWord){  
        boolean res = false;  
          
        Workbook wb = null;  
        try {  
            //构造Workbook(工作薄)对象  
            wb=Workbook.getWorkbook(file);  
        } catch (BiffException e) {  
            return res;  
        } catch (IOException e) {  
            return res;  
        }  
          
        if(wb==null)  
            return res;  
          
        //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了  
        Sheet[] sheet = wb.getSheets();  
          
        boolean breakSheet = false;  
          
        if(sheet!=null&&sheet.length>0){  
            //对每个工作表进行循环  
            for(int i=0;i
                if(breakSheet)  
                    break;  
                  
                //得到当前工作表的行数  
                int rowNum = sheet[i].getRows();  
                  
                boolean breakRow = false;  
                  
                for(int j=0;j
                    if(breakRow)  
                        break;  
                    //得到当前行的所有单元格  
                    Cell[] cells = sheet[i].getRow(j);  
                    if(cells!=null&&cells.length>0){  
                        boolean breakCell = false;  
                        //对每个单元格进行循环  
                        for(int k=0;k
                            if(breakCell)  
                                break;  
                            //读取当前单元格的值  
                            String cellValue = cells[k].getContents();  
                            if(cellValue==null)  
                                continue;  
                            if(cellValue.contains(keyWord)){  
                                res = true;  
                                breakCell = true;  
                                breakRow = true;  
                                breakSheet = true;  
                            }  
                        }  
                    }  
                }  
            }  
        }  
        //最后关闭资源,释放内存  
        wb.close();  
          
        return res;  
    } 
四.往Excel中插入图片图标

插入图片的实现很容易,参看以下代码:

java 代码
/**往Excel中插入图片 
* @param dataSheet  待插入的工作表 
* @param col 图片从该列开始 
* @param row 图片从该行开始 
* @param width 图片所占的列数 
* @param height 图片所占的行数 
* @param imgFile 要插入的图片文件 
*/ 
public static void insertImg(WritableSheet dataSheet, int col, int row, int width,  
        int height, File imgFile){  
    WritableImage img = new WritableImage(col, row, width, height, imgFile);  
    dataSheet.addImage(img);  
}  
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:

java 代码
    try {  
        //创建一个工作薄  
WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));  
//待插入的工作表  
WritableSheet imgSheet = workbook.createSheet("Images",0);  
//要插入的图片文件  
File imgFile = new File("D:/1.png");  
//图片插入到第二行第一个单元格,长宽各占六个单元格  
insertImg(imgSheet,0,1,6,6,imgFile);  
workbook.write();  
workbook.close();  
catch (IOException e) {  
e.printStackTrace();  
catch (WriteException e) {  
e.printStackTrace();  
但是jxl只支持png格式的图片,jpg格式和gif格式都不支持
========================================================
jxl.jar包简介/java操作excel jxl.jar下载地址

jxl.jar 包简介
下载地址:
http://www.andykhan.com/jexcelapi/ 当前的最高版本是2.6。

真实下载地址:

http://www.andykhan.com/jexcelapi/download.html


作者的网站上对它的特征有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字、日期操作
● 能够修饰单元格属性
● 支持图像和图表
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
搭建环境
将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:
代码(CreateXLS.java):
//生成Excel的类
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//打开文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet(“第一页”,0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,”test”);
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
编译执行后,会在当前位置产生一个Excel文件。
三、读取文件
以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:
//读取Excel的类
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“测试.xls”));
//获得第一个工作表对象
Sheet sheet=book.getSheet(0);
//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
程序执行结果:test
四、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
//修改Excel的类,添加一个工作表
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File(“测试.xls”));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”),wb);
//添加一个工作表
WritableSheet sheet=book.createSheet(“第二页”,1);
sheet.addCell(new Label(0,0,”第二页的测试数据”));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
执行结果如图:
高级操作
一、 数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。
1、 字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:

WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为excel支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体 _GB2312"),12,WritableFont.NO_BOLD );① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③ 其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的 java-doc中有详细列表,这里不再列出。 ②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。 ③处使用了Label类的构造子,指定了字串被赋予那种格式。在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

//把水平对齐方式指定为居中

format1.setAlignment(jxl.format.Alignment.CENTRE);

//把垂直对齐方式指定为居中

format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

//设置自动换行
format1.setWrap(true);



二、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、 合并单元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一页”,0);
//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
2、 行高和列宽
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//将第一行的高度设为200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
作用是指定第i+1列的宽度,比如:
//将第一列的宽度设为30
sheet.setColumnView(0,30);
五、操作图片
public static void write()throws Exception{
        WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
        WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
        File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png");
        WritableImage image=new WritableImage(1, 4, 6, 18,file);
        ws.addImage(image);
        wwb.write();
        wwb.close();
    }
很简单和插入单元格的方式一样,不过就是参数多了些,WritableImage这个类继承了Draw,上面只是他构造方法的一种,最后一个参数不用了说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。
   读:
读的时候是这样的一个思路,先用一个输入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作表中得某个单元格.
InputStream->Workbook->Sheet->Cell,就得到了excel文件中的单元格
代码:
String path="c:\\excel.xls";//Excel文件URL
InputStream is = new FileInputStream(path);//写入到FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄
jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表
Cell cell=st.getCell(0,0);//得到工作表的第一个单元格,即A1
String content=cell.getContents();//getContents()将Cell中的字符转为字符串
wb.close();//关闭工作薄
is.close();//关闭输入流

我们可以通过Sheet的getCell(x,y)方法得到任意一个单元格,x,y和excel中的坐标对应.
例如A1对应(0,0),A2对应(0,1),D3对应(3,2).Excel中坐标从A,1开始,jxl中全部是从0开始.
还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容.
写:
往Excel中写入内容主要是用jxl.write包中的类.
思路是这样的:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
这里面Label代表的是写入Sheet的Cell位置及内容.
代码:
OutputStream os=new FileOutputStream("c:\\test.xls");//输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表
Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容
ws.addCell(labelCF);//将Label写入sheet中
Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体
WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式
Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
现在可以写了
wwb.write();
写完后关闭
wwb.close();
输出流也关闭吧
os.close;
OK,只要把读和写结合起来,就可以在N个Excel中读取数据写入你希望的Excel新表中,还是比较方便的.

下面是程序一例:

程序代码:sql = "select * from tablename";
    rs = stmt.executeQuery(sql);

//新建Excel文件
String filePath=request.getRealPath("aaa.xls");
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();

        //用JXL向新建的文件中添加内容
    OutputStream outf = new FileOutputStream(filePath);
        jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
        jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);

int i=0;
        int j=0;

for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
    ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}

while(rs.next()){
    out.println(rs.getMetaData().getColumnCount());

for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
    }

i++;
}
wwb.write();
    wwb.close();
}catch(Exception e){e.printStackTrace();}
finally{

rs.close();
conn.close();
}

response.sendRedirect("aaa.xls");
==============================================
  1 /**
  2  * QuickExcel.java
  3  * 作者:杨庆成
  4  * Created on 2004年11月22日, 下午4:05
  5  * 在实际应用中经常要将数据库中的表导入Excel
  6  * 本人在Apache的POI基础上写了一个简单的类
  7  * 有不当指出请指正,谢谢!
  8  *
  9  */
10
11package yqc.poi;
12
13import java.sql.*;
14import java.util.*;
15import java.io.*;
16import java.io.ByteArrayInputStream;
17import java.io.FileInputStream;
18import java.io.FileOutputStream;
19import java.io.IOException;
20
21import org.apache.poi.hssf.usermodel.*;
22import org.apache.poi.poifs.filesystem.POIFSFileSystem;
23import org.apache.poi.hssf.record.*;
24import org.apache.poi.hssf.model.*;
25import org.apache.poi.hssf.usermodel.*;
26import org.apache.poi.hssf.util.*;import yqc.sql.*;
27
28/**//**
29 *
30 * @author  Administrator
31 */
32public class QuickExcel {
33   
34    /**//** Creates a new instance of QuickExcel */
35    private QuickExcel(String file){
36        _file=file;
37    }
38   
39    private void open()throws IOException{
40        InputStream stream = null;
41        Record[] records = null;
42        POIFSFileSystem fs =
43            new POIFSFileSystem(new FileInputStream(_file));
44        _wb = new HSSFWorkbook(fs);
45    }
46   
47    private void create(){
48        _wb=new HSSFWorkbook();
49    }
50   
51    public static QuickExcel newInstance (String file){
52        QuickExcel qe=new QuickExcel(file);
53        qe.create();
54        return qe;
55    }
56   
57    public static QuickExcel openInstance(String file) throws IOException {
58        QuickExcel qe=new QuickExcel(file);
59        qe.open();
60        return qe;
61    }
62   
63    public void close(){
64        try{
65            FileOutputStream fileOut = new FileOutputStream(_file);
66            _wb.write(fileOut);//把Workbook对象输出到文件workbook.xls中
67            fileOut.close();
68        }
69        catch (Exception ex){
70            System.out.println(ex.getMessage());
71        }
72    }
73   
74    private void removeSheet(String sheetName){
75        int i=_wb.getSheetIndex("sheetName");
76        if (i>=0) _wb.removeSheetAt(i);
77    }
78   
79    public int fillSheet (ResultSet rs,String sheetName)throws SQLException {
80        HSSFSheet st= _wb.createSheet(sheetName);
81        ResultSetMetaData rsmd= rs.getMetaData();
82        int index=0;
83        int result=0;
84        HSSFRow row=st.createRow(index++);
85        for(int i=1;i<=rsmd.getColumnCount();++i){
86            HSSFCell cell=row.createCell((short)(i-1));
87            cell.setCellValue(rsmd.getColumnName(i));
88        }
89        while(rs.next()) {
90            result++;
91            row=st.createRow(index++);
92            for(int i=1;i<=rsmd.getColumnCount();++i){
93                HSSFCell cell=row.createCell((short)(i-1));
94                cell.setEncoding(cell.ENCODING_UTF_16);
95                cell.setCellValue(rs.getString(i));
96            }
97        }
98        return result;
99}
100   
101    public static void main(String[] args){
102        try{
103            QuickConnection qc=new MssqlConnection("jdbc:microsoft:sqlserver://192.168.0.100:1433;DatabaseName=ls");
104            QuickExcel qe=QuickExcel.newInstance("a.xls");
105            qc.connect();
106            String sql="select * from ls.dbo.radio1_emcee";
107            ResultSet rs=qc.getStatement().executeQuery(sql);
108            qe.fillSheet(rs,"MT");
109            qe.close();
110            qe=QuickExcel.openInstance("a.xls");
111            qe.fillSheet(rs,"MO");
112            qe.close();
113            qc.close();
114        }
115        catch (SQLException ex){
116            System.out.println(ex.getMessage());
117        }
118        catch (IOException ex){
119            System.out.println(ex.getMessage());
120        }
121    }
122   
123    HSSFWorkbook _wb;
124    String _file="new.xls";
125}
===================================
/**导出数据为XLS格式
  * @param fos 生成Excel文件Path
  * @param bo 要导入的数据
  */
public void writeExcelBo(FileOutputStream fos, java.util.Vector ve)
{
  jxl.write.WritableWorkbook wwb;
  try
  {
   wwb= Workbook.createWorkbook(fos);
   jxl.write.WritableSheet ws= wwb.createSheet("booksheet", 10);
   ws.addCell(new jxl.write.Label(0, 1, "书目ID"));
   ws.addCell(new jxl.write.Label(1, 1, "ISBN"));
   ws.addCell(new jxl.write.Label(2, 1, "定价"));
   ws.addCell(new jxl.write.Label(3, 1, "书名"));
   ws.addCell(new jxl.write.Label(4, 1, "原书名"));
   ws.addCell(new jxl.write.Label(5, 1, "副题名"));
   ws.addCell(new jxl.write.Label(6, 1, "著者"));
   ws.addCell(new jxl.write.Label(7, 1, "译者"));
   ws.addCell(new jxl.write.Label(8, 1, "版次"));
   ws.addCell(new jxl.write.Label(9, 1, "出版地"));
   ws.addCell(new jxl.write.Label(10, 1, "出版社"));
   ws.addCell(new jxl.write.Label(11, 1, "出版日期"));
   ws.addCell(new jxl.write.Label(12, 1, "页数"));
   ws.addCell(new jxl.write.Label(13, 1, "书高"));
   ws.addCell(new jxl.write.Label(14, 1, "装帧"));
   ws.addCell(new jxl.write.Label(15, 1, "丛书名"));
   ws.addCell(new jxl.write.Label(16, 1, "一般性附注项"));
   ws.addCell(new jxl.write.Label(17, 1, "简介"));
   ws.addCell(new jxl.write.Label(18, 1, "主题词"));
   ws.addCell(new jxl.write.Label(19, 1, "中图法分类"));
   ws.addCell(new jxl.write.Label(20, 1, "更新日期"));
   ws.addCell(new jxl.write.Label(21, 1, "本数"));
   book=new Book[ve.size()];
   for (int i= 0; i < ve.size(); i++)
   {
    book[i]= (Book)ve.get(i);
    ws.addCell(new jxl.write.Label(0, i + 2, "" + book[i].getBookId()));
    ws.addCell(new jxl.write.Label(1, i + 2, book[i].getIsbn()));
    ws.addCell(new jxl.write.Label(2, i + 2, "" + book[i].getPrice()));
    ws.addCell(new jxl.write.Label(3, i + 2, book[i].getBookTitle()));
    ws.addCell(new jxl.write.Label(4, i + 2, book[i].getOldFilename()));
    ws.addCell(new jxl.write.Label(5, i + 2, book[i].getSubTitle()));
    ws.addCell(new jxl.write.Label(6, i + 2, book[i].getWriter()));
    ws.addCell(new jxl.write.Label(7, i + 2, book[i].getTranscribe()));
    ws.addCell(new jxl.write.Label(8, i + 2, "" + book[i].getVersion()));
    ws.addCell(new jxl.write.Label(9, i + 2, book[i].getPublishCity()));
    ws.addCell(new jxl.write.Label(10, i + 2, book[i].getPublisher()));
    ws.addCell(new jxl.write.Label(11, i + 2, book[i].getPublishDate().toString()));
    ws.addCell(new jxl.write.Label(12, i + 2, "" + book[i].getPage()));
    ws.addCell(new jxl.write.Label(13, i + 2, "" + book[i].getHight()));
    ws.addCell(new jxl.write.Label(14, i + 2, book[i].getInstall()));
    ws.addCell(new jxl.write.Label(15, i + 2, book[i].getSeries()));
    ws.addCell(new jxl.write.Label(16, i + 2, book[i].getNotes()));
    ws.addCell(new jxl.write.Label(17, i + 2, book[i].getPrecisnotes()));
    ws.addCell(new jxl.write.Label(18, i + 2, book[i].getSubject()));
    ws.addCell(new jxl.write.Label(19, i + 2, book[i].getCls().replaceAll("_", "")));
    ws.addCell(new jxl.write.Label(20, i + 2, book[i].getUpdatedate().toString()));
    ws.addCell(new jxl.write.Label(21, i + 2, "0"));
   }
   jxl.write.WritableFont wfc=
    new jxl.write.WritableFont(
     WritableFont.ARIAL,
     255,
     WritableFont.BOLD,
     false,
     UnderlineStyle.NO_UNDERLINE,
     jxl.format.Colour.BLACK);
   jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);
   ws.addCell(new jxl.write.Label(0, 0, "为保证您提交定单的稳定和正确,导入定单时候请勿更改此表格式(请勿更改书目ID,订购本数自行添加!)"));
   wwb.write();
   //关闭Excel工作薄对象
   wwb.close();
  } catch (IOException e)
  {} catch (RowsExceededException e)
  {} catch (WriteException e)
  {}
}



   //导入EXCEL
   if (f.getName().indexOf(".xls") > 0)
   {
    try
    {
     fis= new FileInputStream(f);
     BookBean bob= new BookBean();
     UserBean usb= new UserBean();
     jxl.Workbook rwb= Workbook.getWorkbook(fis);
     jxl.Sheet sh= rwb.getSheet(0);
     int rowCount= sh.getRows();
     SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
     book= new Book[rowCount - 1];
     for (int i= 1; i < rowCount; i++)
     {
      book[i - 1]= new Book();
      jxl.Cell[] ce= sh.getRow(i);
      book[i - 1].setIsbn(ce[0].getContents().toString());
      book[i - 1].setSeries(ce[1].getContents().toString());
      book[i - 1].setBookTitle(ce[2].getContents().toString());
      book[i - 1].setWriter(ce[3].getContents().toString());
      book[i - 1].setTranscribe(ce[4].getContents().toString());
      book[i - 1].setPublisher(ce[5].getContents().toString());
      book[i - 1].setPublishDate(sdf.parse(ce[6].getContents().toString(), new ParsePosition(0)));
      book[i-1].setVersion(Integer.parseInt(ce[7].getContents().toString()));
      book[i-1].setPage(Integer.parseInt(ce[8].getContents().toString()));
      book[i-1].setCls(ce[9].getContents().toString());
      book[i-1].setPrecisnotes(ce[10].getContents().toString());
      book[i-1].setInstall(ce[11].getContents().toString());
      book[i-1].setPrice(Float.parseFloat(ce[12].getContents().toString()));
      book[i-1].setUserid(usb.getUser().getUserid());
      getVector().addElement(book[i - 1]);
     }
     rwb.close();
     fis.close();
    } catch (FileNotFoundException e)
    {} catch (BiffException e)
    {} catch (IOException e)
    {} catch (NumberFormatException e)
    {
     ShowMessage("数据导入失败,请按照本软件要求的EXCEL格式导入定单");
    }
   }
=================================================
   
   
文档选项


级别: 初级

Rubber (mailto:userid@us.ibm.com?subject=利用JAVA操作EXCEL文件&cc=userid@us.ibm.com),

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到 Excel文件,但是还不能真正的操纵Excel文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Java Excel API,使用它大家就可以方便地操纵Excel文件了。
分享到:
评论

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    Java实现Excel导入导出

    Excel源代码,导入导出各种工具类 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-scratchpad 代码实例: String path = ""; byte[] bytes; vo.setCurrentPage(0); vo....

    java实现excel导入导出.pdf

    Java 实现 Excel 导入导出 Java 是一种流行的编程语言,Excel 是一种常用的电子表格软件。在 Java 中,实现 Excel 导入导出可以使用多种方式,本文将介绍使用 JXL 和 POI 两个库实现 Excel 导入导出的方法。 使用 ...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出

    java实现Excel导入导出

    Java 实现 Excel 导入导出是指使用 Java 语言编写程序来实现将 Excel 文件中的数据导入到 Java 程序中,并将 Java 程序中的数据导出到 Excel 文件中。这种操作可以使用 Apache POI 库来实现。 POI 库简介 Apache ...

    最新java实现Excel导入导出

    用Java实现的Excel的导入导出,简洁明了,高质量代码。

    Java实现Excel导入导出功能

    综上所述,Java实现Excel导入导出功能主要依赖于Apache POI库,通过其提供的API可以方便地读取和写入Excel数据,同时注意性能优化和异常处理,确保功能的稳定性和效率。在实际开发中,还需要结合具体业务需求进行...

    Java实现Excel导入导出操作详解.pptx.pptx

    Java实现Excel导入导出是Java开发中常见的任务,主要用于数据的批量处理和分析,尤其在数据分析、报表生成和数据备份等方面具有广泛应用。要熟练掌握这一技术,开发者需要了解Excel文件的结构,熟悉Java的文件操作,...

    Java poi 实现excel导入导出

    在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...

    JAVA中excel导入导出通用方法

    JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...

    Java实现Excel导入导出数据库的方法示例

    Java实现Excel导入导出数据库的方法示例主要介绍了Java实现Excel导入导出数据库的方法,结合实例形式分析了java针对Excel的读写及数据库操作相关实现技巧。该示例中,主要讲解了如何将Excel文件导入到数据库中,并...

    POI实现Excel导入导出并附带加载进度条

    总之,这个项目是一个完整的Java解决方案,用于处理Excel文件的导入导出,同时具备用户友好的进度条显示。它利用了Apache POI的强大功能,结合maven的依赖管理,以及可能的GUI组件,提供了高效且直观的数据操作体验...

    java实现excel导入导出

    ### Java实现Excel导入导出详解 #### 知识点概览 本文主要探讨了使用Java进行Excel文件导入与导出的技术细节,通过两种不同的库——`jxl`和`Apache POI`,来实现对Excel文件的操作。我们将深入分析代码示例,了解...

    java实现Excel导入导出源码

    以上就是Java实现Excel导入导出的基本流程和关键知识点。实际项目中,可能还需要考虑线程安全、并发处理、数据验证、公式计算等复杂情况。通过熟练掌握这些技术,可以高效地在Java应用中处理Excel数据。

    asp将EXCEL导入导出数据库原程序

    这个"asp将EXCEL导入导出数据库原程序"提供了一个解决方案,能够方便地将Excel中的数据存入MSSQL数据库,同时也能将数据库中的数据导出到Excel文件。 首先,我们需要了解如何使用ASP连接MSSQL数据库。通常,这涉及...

    java swing开发导入导出excel功能

    此代码为java运用poi3.8插件实现运用模版导入导出复杂excel

    Java实现Excel导入和导出(珍藏版).html

    把Java实现表格的相关操作进行了封装,本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求。详细讲解包含源码 把Java实现表格的相关操作进行了封装,...

    JAVA实现Excel导入/导出的功能实现

    请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040804.zip,解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-20040804.jar这个库文件。...

    Java实现excel文档数据导入数据库、导出excel

    总结,Java通过Apache POI库处理Excel文档,结合JDBC进行数据库操作,实现了数据的导入导出。在实际应用中,可能还需要处理异常、优化性能,以及考虑并发和多线程等问题。理解并掌握这些技术,可以极大地提高Java...

Global site tag (gtag.js) - Google Analytics