エクスポートエクセル
36905 ワード
ソース:http://www.cnblogs.com/linjiqin/p/3540266.html
jxl導入/エクスポートエクセル
1、jxl導入/excelの事例を導出し、貼り付けて実行できます.
2、jxl常用操作a、データフォーマットはExcelに複雑なデータタイプが含まれていないので、より良い処理文字列、数字と日付は一般的なアプリケーションを満たすことができます.
文字列のフォーマットはフォント、太さ、サイズなどの要素に関連しています.これらの機能は主にWritable FontとWritable CelFormat類が担当しています.私たちが文字列を含むセルを生成する時に、次のような文を使って、説明しやすいように、各ラインのコマンドに番号を付けました.
簡単にセルを挿入する方式と同じですが、パラメータが多くなりました.WritableImageという種類はDrawを継承しています.上は彼の構造方法の一つです.最後のパラメータはもちろん、前の4つのパラメータのタイプは全部doubleで、順次x、y、width、heightです.ここの幅と高さは写真の幅と高さではありません.写真が占めるセルの個数です.継承するDrawのタイプはdoubleでなければなりません.具体的にはどのように実現するかはまだ詳しく見ていません.これからも使用中の心得を書いていきます.
3、注意事項a、jxlはexcel文字をエクスポートします.excelをエクスポートする時、中国語のタイトルが文字化けしていることを発見しました.N種類の符号化方式を試しました.最初はいつもutf-8、gb 2312、gbkに変えたいですが、iso-859-1中国語の文字化けの問題が解決されました.
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());