エクスポートエクセル


ソース:http://www.cnblogs.com/linjiqin/p/3540266.html
 
jxl導入/エクスポートエクセル
1、jxl導入/excelの事例を導出し、貼り付けて実行できます.
package junit.test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

import org.apache.commons.lang3.math.NumberUtils;
import org.junit.Test;

/**
 * Excel    
 * 
 * @author    
 * @version 1.0 Feb 7, 2014 4:14:51 PM
 */
public class ExcelTest {

    /**
     *   (     )
     */
    @Test
    public void importExcel() {
        Workbook book = null;
        try {
            book = Workbook.getWorkbook(new File("D:/test/  .xls"));
            //           
            Sheet sheet = book.getSheet(0);
            int rows=sheet.getRows();
            int columns=sheet.getColumns();
            //           
            for(int i=0;i<rows;i++){
                for(int j=0;j<columns;j++){
                    Cell cell = sheet.getCell(j, i);
                    String result = cell.getContents();
                    if(j==0){
                        System.out.print("  :"+result+" ");
                    }
                    if(j==1){
                        System.out.print("  :"+result+" ");
                    }
                    if((j+1)%2==0){ 
                        System.out.println();
                    }
                }
            }
            System.out.println("========");
            //             
            Cell cell1 = sheet.getCell(0, 0);
            String result = cell1.getContents();
            System.out.println(result);
            System.out.println("========");
        } catch (Exception e) {
            System.out.println(e);
        }finally{
            if(book!=null){
                book.close();
            }
        }
    }

    /**
     *   (     )
     */
    @Test
    public void exportExcel() {
        WritableWorkbook book = null;
        try {
            //     
            book = Workbook.createWorkbook(new File("D:/test/  .xls"));
            //     "  "    ,  0       
            WritableSheet sheet = book.createSheet("  ", 0);
            //               (0, 0)          
            Label label = new Label(0, 0, "  ");
            //                
            sheet.addCell(label);
            //             Number      
            jxl.write.Number number = new jxl.write.Number(1, 0, 30);
            sheet.addCell(number);
            //          
            book.write();
        } catch (Exception e) {
            System.out.println(e);
        }finally{
            if(book!=null){
                try {
                    book.close();
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }
        }
    }
    
    /**
     *        Excel
     */
    @Test
    public void writeExcel() {
        WritableWorkbook book = null;
        try {
            //     
            book = Workbook.createWorkbook(new File("D:/test/stu.xls"));
            //     "  "    ,  0       
            WritableSheet sheet = book.createSheet("  ", 0);
            
            List<Student> stuList=queryStudentList();
            if(stuList!=null && !stuList.isEmpty()){
                for(int i=0; i<stuList.size(); i++){
                    sheet.addCell(new Label(0, i, stuList.get(i).getName()));
                    sheet.addCell(new Number(1, i, stuList.get(i).getAge()));
                }
            }
            
            //          
            book.write();
        } catch (Exception e) {
            System.out.println(e);
        }finally{
            if(book!=null){
                try {
                    book.close();
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }
        }
    
    }
    
    /**
     *   Excel     
     */
    @Test
    public void readExcel() {
        Workbook book = null;
        try {
            //     
            book = Workbook.getWorkbook(new File("D:/test/stu.xls"));
            //           
            Sheet sheet = book.getSheet(0);
            int rows=sheet.getRows();
            int columns=sheet.getColumns();
            List<Student> stuList=new ArrayList<Student>();
            //           
            for(int i=0;i<rows;i++){
                Student stu = new Student();
                for(int j=0;j<columns;j++){
                    Cell cell = sheet.getCell(j, i);
                    String result = cell.getContents();
                    if(j==0){
                        stu.setName(result);
                    }
                    if(j==1){
                        stu.setAge(NumberUtils.toInt(result));
                    }
                    if((j+1)%2==0){
                        stuList.add(stu);
                        stu=null;
                    }
                }
            }
            
            //    
            for(Student stu : stuList){
                System.out.println(String.format("  :%s,   :%s", 
                        stu.getName(), stu.getAge()));
            }
            
        } catch (Exception e) {
            System.out.println(e);
        }finally{
            if(book!=null){
                try {
                    book.close();
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }
        }
    
    }
    
    /**
     *     Excel,   png  
     */
    @Test
    public void writeImg() {
        WritableWorkbook wwb = null;
        try {
            wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));
            WritableSheet ws = wwb.createSheet("  ", 0);
            File file = new File("D:\\test\\png.png");
            //       ,           ,     
            WritableImage image = new WritableImage(1, 4, 6, 18, file);
            ws.addImage(image);
            wwb.write();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(wwb!=null){
                try {
                    wwb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }  
            }
        }
    }
    
    private List<Student> queryStudentList(){
        List<Student> stuList=new ArrayList<Student>();
        stuList.add(new Student("zhangsan", 20));
        stuList.add(new Student("lisi", 25));
        stuList.add(new Student("wangwu", 30));
        return stuList;
    }
    
    public class Student {
        private String name;
        private int age;

        public Student() {
        }

        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

2、jxl常用操作a、データフォーマットはExcelに複雑なデータタイプが含まれていないので、より良い処理文字列、数字と日付は一般的なアプリケーションを満たすことができます.
文字列のフォーマットはフォント、太さ、サイズなどの要素に関連しています.これらの機能は主にWritable FontとWritable CelFormat類が担当しています.私たちが文字列を含むセルを生成する時に、次のような文を使って、説明しやすいように、各ラインのコマンドに番号を付けました.
① 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、太字で表示します.Writable Fontは非常に豊富な構造のサブ関数があります.場合によっては、jExcel APIのjava-docに詳細なリストがあります.ここではリストしません.②コードにはWritable CelFormat類が使われていますが、このクラスは非常に重要で、セルの各種属性を指定することができます.後ろのセルのフォーマットにはもっと多くの説明があります. ③においてLabel類の構造子を使用して、そのようなフォーマットが与えられている文字列を指定しました.Writable CelFormatクラスでは、データの配置を指定する重要な方法があります.例えば、上記の例に対して、指定できます.
//            
format1.setAlignment(jxl.format.Alignment.CENTRE);
//            
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//      
format1.setWrap(true);
b、セル操作Excelの重要な一部は、行の高さ、列の幅、セルの結合などのセルの操作です.幸い、これらのサポートを提供しました.これらの操作は比較的簡単です.以下は関連のAPIだけを紹介します.1、セルの結合//役割は(m,n)から(p,q)までのセルをすべてWritable Sheet.mergeCels(int m,int n,intp,int q)に統合することである. たとえば:
WritableSheet sheet=book.createSheet("   ", 0); 
//                     
//         ,       。               ,       。
sheet.mergeCells(0, 0, 5, 0);
c、行の高さと列の幅/役割はi+1行目の高さを指定するWritable Sheet.set RowView(int i,int height)である.例えば、1行目の高さを200に設定します.
sheet.setRowView(0, 200);
//作用はi+1列目の幅を指定し、Writable Sheet.set ColumnView(int i,int width);例えば、1列目の幅を30に設定します.
sheet.setColumnView(0, 30);
d、操作画像(png画像のみ対応)
    /**
     *     Excel,   png  
     */
    @Test
    public void writeImg() {
        WritableWorkbook wwb = null;
        try {
            wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));
            WritableSheet ws = wwb.createSheet("  ", 0);
            File file = new File("D:\\test\\png.png");
            //       ,           ,     
            WritableImage image = new WritableImage(1, 4, 6, 18, file);
            ws.addImage(image);
            wwb.write();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(wwb!=null){
                try {
                    wwb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }  
            }
        }
    }

簡単にセルを挿入する方式と同じですが、パラメータが多くなりました.WritableImageという種類はDrawを継承しています.上は彼の構造方法の一つです.最後のパラメータはもちろん、前の4つのパラメータのタイプは全部doubleで、順次x、y、width、heightです.ここの幅と高さは写真の幅と高さではありません.写真が占めるセルの個数です.継承するDrawのタイプはdoubleでなければなりません.具体的にはどのように実現するかはまだ詳しく見ていません.これからも使用中の心得を書いていきます.
 
3、注意事項a、jxlはexcel文字をエクスポートします.excelをエクスポートする時、中国語のタイトルが文字化けしていることを発見しました.N種類の符号化方式を試しました.最初はいつもutf-8、gb 2312、gbkに変えたいですが、iso-859-1中国語の文字化けの問題が解決されました.
fileName = new String(fileName.getBytes(),"iso-8859-1");
response.setCharacterEncoding("gb2312");
response.reset();
response.setContentType("application/OCTET-STREAM;charset=gb2312");
response.setHeader("pragma", "no-cache");
response.addHeader("Content-Disposition", "attachment;filename=\""
+ fileName + ".xls\"");//     excle             
workbook = Workbook.createWorkbook(response.getOutputStream());