日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java jxl 写 excel_Java 操作Excel(jxl读和写)

發布時間:2024/9/15 java 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jxl 写 excel_Java 操作Excel(jxl读和写) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.讀操作:

package com.jxl.opr;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

public class ReadExcelUtil {

public static void readExcel(String

sourceFile){

Workbook wb = null;

try {

InputStream is = new

FileInputStream(sourceFile);

//1.讀取 Excel 數據表的第一步是創建

Workbook( 術語:工作薄 ),

wb =

Workbook.getWorkbook(is);

//2.一旦創建了 Workbook,我們就可以通過它來訪問

Excel Sheet( 術語:工作表 )。

// 獲取第一張 Sheet 表

Sheet sheet =

wb.getSheet(0);

//3.我們既可能通過 Sheet

的名稱來訪問它,也可以通過下標來訪問它。如果通過下標來訪問的話,要注意的一點是下標從 0 開始,就像數組一樣。

//一旦得到了 Sheet,我們就可以通過它來訪問 Excel Cell( 術語:單元格 )。

//獲取第一行,第一列的值

Cell c00 = sheet.getCell(0,

0);

String strC00 =

c00.getContents();

//獲取第一行,第二列的值

Cell c10 =

sheet.getCell(1,0);

String strC10 =

c10.getContents();

System.out.println("Cell(0, 0)"

+ " value : " + strC00 + "; type : " + c00.getType());

System.out.println("Cell(1, 0)"

+ " value : " + strC10 + "; type : " + c10.getType());

//循環Excel中所有的內容

int rows =

sheet.getRows();

for(int

i=0;i

Cell[] cell =

sheet.getRow(i);

System.out.println("第"+(i+1)+"行:");

for(Cell

curCell : cell){

System.out.print("?"+curCell.getContents());

}

System.out.println();

}

//1. int

getNumberOfSheets()

//獲得工作薄(Workbook)中工作表(Sheet)的個數

int sheetCount =

wb.getNumberOfSheets();

System.out.println("sheetCount:"+sheetCount);

//2. Sheet[] getSheets()

//返回工作薄(Workbook)中工作表(Sheet)對象數組,示例:

Sheet[] sheetArr =

wb.getSheets();

System.out.println("sheetArr:"+Arrays.toString(sheetArr));

//3. String

getVersion()

//返回正在使用的 API 的版本號

String apiVersion =

wb.getVersion();

System.out.println("apiVersion:"+apiVersion);

//4) int getColumns()

//獲取 Sheet 表中所包含的總列數,示例:

int rsColumns =

sheet.getColumns();

System.out.println("rsColumns:"+rsColumns);

//5) int getRows()

//獲取 Sheet 表中所包含的總行數,示例:

int rsRows =

sheet.getRows();

System.out.println("rsRows:"+rsRows);

//6) Cell[] getRow(int

row)

//獲取某一行的所有單元格,返回的是單元格對象數組,示例子:

Cell[] cell

= sheet.getRow(0);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (BiffException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

if(wb!=null){

//

操作完成時,關閉對象,釋放占用的內存空間

wb.close();

}

}

}

}

測試類:

package com.jxl.opr;

public class JavaExcelTest {

public static void main(String[] args) {

ReadExcelUtil.readExcel("e:/test.xls");

//WriteExcelUtil.writeExcel("e:/account.xls");

}

}

讀取的Excel文件:

讀取結果:

Cell(0, 0) value : 姓名; type : Label

Cell(1, 0) value : 年齡; type : Label

第1行:

姓名?年齡?地址?職位

第2行:

李四?23?上海?工程師

第3行:

張三?24?深圳?醫生

sheetCount:3

sheetArr:[jxl.read.biff.SheetImpl@fa9cf, jxl.read.biff.SheetImpl@55571e,

jxl.read.biff.SheetImpl@ca8327]

apiVersion:2.6.3

rsColumns:4

rsRows:3

二.寫操作package com.jxl.opr;

import java.io.File;

import java.io.IOException;

import java.util.Date;

import jxl.Workbook;

import jxl.format.UnderlineStyle;

import jxl.write.Colour;

import jxl.write.DateTime;

import jxl.write.Label;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

public class WriteExcelUtil {

public static void writeExcel(String targetfile)

{

WritableWorkbook wwb =

null;

try {

// 構建

Workbook 對象 , 只讀 Workbook 對象

// Method

1:創建可寫入的 Excel 工作薄

wwb =

Workbook.createWorkbook(new File(targetfile));

// Method 2:將

WritableWorkbook 直接寫入到輸出流

// 創建 Excel

工作表

WritableSheet

wSheet = wwb.createSheet("集中錄入數據統計", 0);

//字形

WritableFont

font1 = new

WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE);

WritableFont

font2 = new WritableFont(WritableFont.ARIAL,8);

WritableCellFormat

cf1 = new WritableCellFormat(font1);

WritableCellFormat

cf2 = new WritableCellFormat(font2);

// 1. 添加

Label 對象

Label c00 =

new Label(0, 0, "柜員號",cf1);

wSheet.addCell(c00);

Label c10 =

new Label(1, 0, "雙人錄入1",cf1);

wSheet.addCell(c10);

Label c20 =

new Label(2, 0, "雙人錄入2",cf1);

wSheet.addCell(c20);

Label c30 =

new Label(3, 0, "統計時間",cf1);

wSheet.addCell(c30);

jxl.write.Number

c01 = new jxl.write.Number(0, 1, 8111002,cf2);

wSheet.addCell(c01);

jxl.write.Number

c11 = new jxl.write.Number(1, 1, 1590,cf2);

wSheet.addCell(c11);

jxl.write.Number

c21 = new jxl.write.Number(2, 1, 2309,cf2);

wSheet.addCell(c21);

jxl.write.DateFormat

df = new jxl.write.DateFormat("yyyy-MM-dd hh:mm:ss");

jxl.write.WritableCellFormat

wcfDF = new jxl.write.WritableCellFormat(df);

DateTime c31

=?new DateTime(3,1,new Date(),wcfDF);

wSheet.addCell(c31);

//

注意加上這句話,寫入 Exel 工作表

//在關閉 Excel

對象之前,你必須要先調用 write()

方法,因為先前的操作都是存儲在緩存中的,所以要通過該方法將操作的內容保存在文件中。如果你先關閉了 Excel

對象,那么只能得到一張空的工作薄了。

wwb.write();

} catch (Exception e)

{

e.printStackTrace();

} finally {

// 關閉 Excel

工作薄對象

try {

if(wwb!=null){

wwb.close();

}

} catch

(WriteException e) {

e.printStackTrace();

} catch

(IOException e) {

e.printStackTrace();

}

}

}

}

寫的結果:

三 讀取合并單元格

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import jxl.Range;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

public class ExcelReader {

public static void readExcel(String

excelFileName)throws BiffException,IOException{

Workbook rwb = null;

//創建輸入流

InputStream stream = new

FileInputStream(excelFileName);

//獲取Excel文件對象

rwb =

Workbook.getWorkbook(stream);

//選擇第一個工作表

Sheet sheet =

rwb.getSheet(0);

//獲取合并單元格的信息

Range[] ranges =

sheet.getMergedCells();

for(int

j=1;j

for(int

k=0;k

String

str = null;

str

= sheet.getCell(k,j).getContents();

for(Range

r:ranges){

//如果剛好是合并的單元格的后面幾行,則取第一行的信息

if(j

> r.getTopLeft().getRow()

&& j <=

r.getBottomRight().getRow() && k ==

r.getTopLeft().getColumn()){

str

=

sheet.getCell(r.getTopLeft().getColumn(),r.getTopLeft().getRow()).getContents();

}

}

System.out.print("第"+j+"行,第"+k+"列的值:"+str+"\t");?}

System.out.println("");

}

}

public static void main(String[] args){

try {

ExcelReader.readExcel("e:/test.xls");//文件存放地址

} catch (BiffException e)

{

// TODO

Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

}

讀取的Excel:

輸出結果:

第1行,第0列的值:039001?第1行,第1列的值:S10030?第1行,第2列的值:F10001?第1行,第3列的值:5?第1行,第4列的值:Combo?第2行,第0列的值:039001?第2行,第1列的值:S10030?第2行,第2列的值:F10002?第2行,第3列的值:30?第2行,第4列的值:Text?第3行,第0列的值:039002?第3行,第1列的值:S10031?第3行,第2列的值:F10003?第3行,第3列的值:30?第3行,第4列的值:Text

這種情況未做例子,從網上摘錄以下信息,供參考

如何更新一個已經存在的工作薄,主要是下面二步操作,第一步是構造只讀的 Excel 工作薄,第二步是利用已經創建的 Excel

工作薄創建新的可寫入的 Excel 工作薄,參考下面的代碼片段:( 完整代碼見 ExcelModifying.java)

// 創建只讀的 Excel 工作薄的對象

jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));

// 創建可寫入的 Excel 工作薄對象

jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);

// 讀取第一張工作表

jxl.write.WritableSheet ws = wwb.getSheet(0);

// 獲得第一個單元格對象

jxl.write.WritableCell wc = ws.getWritableCell(0, 0);

// 判斷單元格的類型 , 做出相應的轉化

if(wc.getType() == CellType.LABEL)

{

Label l = (Label)wc;

l.setString("The value has been modified.");

}

// 寫入 Excel 對象

wwb.write();

// 關閉可寫入的 Excel 對象

wwb.close();

// 關閉只讀的 Excel 對象

rw.close();

之所以使用這種方式構建 Excel 對象,完全是因為效率的原因,因為上面的示例才是 API

的主要應用。為了提高性能,在讀取工作表時,與數據相關的一些輸出信息,所有的格式信息,如:字體、顏色等等,是不被處理的,因為我們的目的是獲得行數據的值,既使沒有了修飾,也不會對行數據的值產生什么影響。唯一的不利之處就是,在內存中會同時保存兩個同樣的工作表,這樣當工作表體積比較大時,會占用相當大的內存,但現在好像內存的大小并不是什么關鍵因素了。

一旦獲得了可寫入的工作表對象,我們就可以對單元格對象進行更新的操作了,在這里我們不必調用 API 提供的 add()

方法,因為單元格已經于工作表當中,所以我們只需要調用相應的 setXXX() 方法,就可以完成更新的操作了。

盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去,以使單元格的內容以不同的形式表現。

新生成的工作表對象是可寫入的,我們除了更新原有的單元格外,還可以添加新的單元格到工作表中,這與示例 2

的操作是完全一樣的。

最后,不要忘記調用 write()

方法,將更新的內容寫入到文件中,然后關閉工作薄對象,這里有兩個工作薄對象要關閉,一個是只讀的,另外一個是可寫入的。

總結

以上是生活随笔為你收集整理的java jxl 写 excel_Java 操作Excel(jxl读和写)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。