java操作Excel的一種方法:在開(kāi)源世界中,有兩套比較有影響的API可供使用,一個(gè)是POI,一個(gè)是jExcelAPI。其中jExcelAPI是一個(gè)韓國(guó)程序員的作品,雖然沒(méi)有POI那樣血統(tǒng)高貴,但是在使用過(guò)程中,感覺(jué)簡(jiǎn)單方便,對(duì)中文支持非常好,功能也比較強(qiáng)大。它的下載地址是: 當(dāng)前的最高版本是2.4。作者的網(wǎng)站上對(duì)它的特征有如下描述:
創(chuàng)新互聯(lián)是一家專(zhuān)注于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),高州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:高州等地區(qū)。高州做網(wǎng)站價(jià)格咨詢(xún):18980820575
● 支持Excel 95-2000的所有版本
● 生成Excel 2000標(biāo)準(zhǔn)格式
● 支持字體、數(shù)字、日期操作
● 能夠修飾單元格屬性
● 支持圖像和圖表
搭建環(huán)境
將下載后的文件解悔巖包,得到j(luò)xl.jar,放入classpath,安裝就完成了。
基本操作
一、創(chuàng)建文件
擬生成一個(gè)名為“測(cè)試數(shù)據(jù).xls”的Excel文件,其中第一個(gè)工作表被命名為“第一頁(yè)”,大致效果如下:
代碼(CreateXLS.java):
//生成Excel的類(lèi)
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//打開(kāi)文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“測(cè)試.xls”));
//生成名為“第一頁(yè)”的工作表,參數(shù)0表示這是第一頁(yè)
WritableSheet sheet=book.createSheet(“第一頁(yè)”,0);
//在Label對(duì)象的構(gòu)造子中指名單元格位置是第一列第一行(0,0)
//以及單元格內(nèi)容為test
Label label=new Label(0,0,”test”);
//將定義好的單元格添加到工作表中
sheet.addCell(label);
/*生成一個(gè)保存數(shù)字的單元格
必須使用Number的完整包路徑,否則有語(yǔ)法歧義
單元格位置是第二列,第一行,值為789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//寫(xiě)入數(shù)據(jù)并關(guān)閉文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
編譯執(zhí)行后,會(huì)在當(dāng)前位置產(chǎn)生一個(gè)Excel文件。
三、讀取文件
以剛才畝運(yùn)我們創(chuàng)建的Excel文件為例,做一個(gè)簡(jiǎn)單的讀取操作,程序代碼如下:
//讀取Excel的類(lèi)
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“測(cè)試.xls”));
//獲得第一個(gè)工作表對(duì)象
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);
}
}
}
程序執(zhí)行結(jié)果:test
四、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文迅前梁件的時(shí)候,除了打開(kāi)文件的方式不同之外,其他操作和創(chuàng)建Excel是一樣的。下面的例子是在我們已經(jīng)生成的Excel文件中添加一個(gè)工作表:
//修改Excel的類(lèi),添加一個(gè)工作表
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(“測(cè)試.xls”));
//打開(kāi)一個(gè)文件的副本,并且指定數(shù)據(jù)寫(xiě)回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“測(cè)試.xls”),wb);
//添加一個(gè)工作表
WritableSheet sheet=book.createSheet(“第二頁(yè)”,1);
sheet.addCell(new Label(0,0,”第二頁(yè)的測(cè)試數(shù)據(jù)”));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
執(zhí)行結(jié)果如圖:
高級(jí)操作
一、 數(shù)據(jù)格式化
在Excel中不涉及復(fù)雜的數(shù)據(jù)類(lèi)型,能夠比較好的處理字串、數(shù)字和日期已經(jīng)能夠滿(mǎn)足一般的應(yīng)用。
1、 字串格式化
字符串的格式化涉及到的是字體、粗細(xì)、字號(hào)等元素,這些功能主要由WritableFont和WritableCellFormat類(lèi)來(lái)負(fù)責(zé)。假設(shè)我們?cè)谏梢粋€(gè)含有字串的單元格時(shí),使用如下語(yǔ)句,為方便敘述,我們?yōu)槊恳恍忻罴恿司幪?hào):
WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①
WritableCellFormat format1=new WritableCellFormat(font1); ②
Label label=new Label(0,0,”data 4 test”,format1) ③
其中①指定了字串格式:字體為T(mén)IMES,字號(hào)16,加粗顯示。WritableFont有非常豐富的構(gòu)造子,供不同情況下使用,jExcelAPI的java-doc中有詳細(xì)列表,這里不再列出。
②處代碼使用了WritableCellFormat類(lèi),這個(gè)類(lèi)非常重要,通過(guò)它可以指定單元格的各種屬性,后面的單元格格式化中會(huì)有更多描述。
③處使用了Label類(lèi)的構(gòu)造子,指定了字串被賦予那種格式。
在WritableCellFormat類(lèi)中,還有一個(gè)很重要的方法是指定數(shù)據(jù)的對(duì)齊方式,比如針對(duì)我們上面的實(shí)例,可以指定:
//把水平對(duì)齊方式指定為居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直對(duì)齊方式指定為居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、單元格操作
Excel中很重要的一部分是對(duì)單元格的操作,比如行高、列寬、單元格合并等,所幸jExcelAPI提供了這些支持。這些操作相對(duì)比較簡(jiǎn)單,下面只介紹一下相關(guān)的API。
1、 合并單元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是從(m,n)到(p,q)的單元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一頁(yè)”,0);
//合并第一列第一行到第六列第一行的所有單元格
sheet.mergeCells(0,0,5,0);
合并既可以是橫向的,也可以是縱向的。合并后的單元格不能再次進(jìn)行合并,否則會(huì)觸發(fā)異常。
2、 行高和列寬
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//將第一行的高度設(shè)為200
sheet.setRowView(0,200); 能夠獲取到j(luò)ava里面那么再封裝保存進(jìn)數(shù)據(jù)庫(kù)也就簡(jiǎn)單了,希望這樣可以幫到你。
動(dòng)態(tài)創(chuàng)建表舉租格,比如:str你從數(shù)據(jù)庫(kù)讀出列名,data數(shù)據(jù)集
這里的data是一個(gè)好爛二維數(shù)組,
就像
{{學(xué)號(hào):001,出生:09-01,成績(jī)99}
{學(xué)號(hào):001,出生:09-01,成績(jī)99}
{學(xué)號(hào):001,出生:09-01,成績(jī)99}}
生成表格
學(xué)號(hào) 出生日期 成績(jī)友答漏
001 09-01 99
001 09-01 98
001 09-01 99
項(xiàng)目結(jié)構(gòu):
xls:
\\\
XlsMain .java 類(lèi)
//該類(lèi)有main方法,主要負(fù)責(zé)運(yùn)行程序,同時(shí)該類(lèi)中也包含了用poi讀取Excel(2003版)
*
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
*
* @author Hongten/br
*
* 參考地址:
*
*/
public class XlsMain {
public static void main(String[] args) throws IOException {
XlsMain xlsMain = new XlsMain();
XlsDto xls = null;
ListXlsDto list = xlsMain.readXls();
try {
XlsDto2Excel.xlsDto2Excel(list);
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i list.size(); i++) {
xls = (XlsDto) list.get(i);
System.out.println(xls.getXh() + " " + xls.getXm() + " "
+ xls.getYxsmc() + " " + xls.getKcm() + " "
+ xls.getCj());
}
}
/**
* 讀取xls文件內(nèi)容
*
* @return ListXlsDto對(duì)象乎畢吵
* @throws IOException
* 輸入/輸出數(shù)巧(i/o)異歲侍常
*/
private ListXlsDto readXls() throws IOException {
InputStream is = new FileInputStream("pldrxkxxmb.xls");
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
XlsDto xlsDto = null;
ListXlsDto list = new ArrayListXlsDto();
// 循環(huán)工作表Sheet
for (int numSheet = 0; numSheet hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 循環(huán)行Row
for (int rowNum = 1; rowNum = hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow == null) {
continue;
}
xlsDto = new XlsDto();
// 循環(huán)列Cell
// 0學(xué)號(hào) 1姓名 2學(xué)院 3課程名 4 成績(jī)
// for (int cellNum = 0; cellNum =4; cellNum++) {
HSSFCell xh = hssfRow.getCell(0);
if (xh == null) {
continue;
}
xlsDto.setXh(getValue(xh));
HSSFCell xm = hssfRow.getCell(1);
if (xm == null) {
continue;
}
xlsDto.setXm(getValue(xm));
HSSFCell yxsmc = hssfRow.getCell(2);
if (yxsmc == null) {
continue;
}
xlsDto.setYxsmc(getValue(yxsmc));
HSSFCell kcm = hssfRow.getCell(3);
if (kcm == null) {
continue;
}
xlsDto.setKcm(getValue(kcm));
HSSFCell cj = hssfRow.getCell(4);
if (cj == null) {
continue;
}
xlsDto.setCj(Float.parseFloat(getValue(cj)));
list.add(xlsDto);
}
}
return list;
}
/**
* 得到Excel表中的值
*
* @param hssfCell
* Excel中的每一個(gè)格子
* @return Excel中每一個(gè)格子中的值
*/
@SuppressWarnings("static-access")
private String getValue(HSSFCell hssfCell) {
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
// 返回布爾類(lèi)型的值
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
// 返回?cái)?shù)值類(lèi)型的值
return String.valueOf(hssfCell.getNumericCellValue());
} else {
// 返回字符串類(lèi)型的值
return String.valueOf(hssfCell.getStringCellValue());
}
}
}
XlsDto2Excel.java類(lèi)
//該類(lèi)主要負(fù)責(zé)向Excel(2003版)中插入數(shù)據(jù)
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class XlsDto2Excel {
/**
*
* @param xls
* XlsDto實(shí)體類(lèi)的一個(gè)對(duì)象
* @throws Exception
* 在導(dǎo)入Excel的過(guò)程中拋出異常
*/
public static void xlsDto2Excel(ListXlsDto xls) throws Exception {
// 獲取總列數(shù)
int CountColumnNum = xls.size();
// 創(chuàng)建Excel文檔
HSSFWorkbook hwb = new HSSFWorkbook();
XlsDto xlsDto = null;
// sheet 對(duì)應(yīng)一個(gè)工作頁(yè)
HSSFSheet sheet = hwb.createSheet("pldrxkxxmb");
HSSFRow firstrow = sheet.createRow(0); // 下標(biāo)為0的行開(kāi)始
HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
String[] names = new String[CountColumnNum];
names[0] = "學(xué)號(hào)";
names[1] = "姓名";
names[2] = "學(xué)院";
names[3] = "課程名";
names[4] = "成績(jī)";
for (int j = 0; j CountColumnNum; j++) {
firstcell[j] = firstrow.createCell(j);
firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
}
for (int i = 0; i xls.size(); i++) {
// 創(chuàng)建一行
HSSFRow row = sheet.createRow(i + 1);
// 得到要插入的每一條記錄
xlsDto = xls.get(i);
for (int colu = 0; colu = 4; colu++) {
// 在一行內(nèi)循環(huán)
HSSFCell xh = row.createCell(0);
xh.setCellValue(xlsDto.getXh());
HSSFCell xm = row.createCell(1);
xm.setCellValue(xlsDto.getXm());
HSSFCell yxsmc = row.createCell(2);
yxsmc.setCellValue(xlsDto.getYxsmc());
HSSFCell kcm = row.createCell(3);
kcm.setCellValue(xlsDto.getKcm());
HSSFCell cj = row.createCell(4);
cj.setCellValue(xlsDto.getCj());
(xlsDto.getMessage());
}
}
// 創(chuàng)建文件輸出流,準(zhǔn)備輸出電子表格
OutputStream out = new FileOutputStream("POI2Excel/pldrxkxxmb.xls");
hwb.write(out);
out.close();
System.out.println("數(shù)據(jù)庫(kù)導(dǎo)出成功");
}
}
XlsDto .java類(lèi)
//該類(lèi)是一個(gè)實(shí)體類(lèi)
public class XlsDto {
/**
* 選課號(hào)
*/
private Integer xkh;
/**
* 學(xué)號(hào)
*/
private String xh;
/**
* 姓名
*/
private String xm;
/**
* 學(xué)院
*/
private String yxsmc;
/**
* 課程號(hào)
*/
private Integer kch;
/**
* 課程名
*/
private String kcm;
/**
* 成績(jī)
*/
private float cj;
public Integer getXkh() {
return xkh;
}
public void setXkh(Integer xkh) {
this.xkh = xkh;
}
public String getXh() {
return xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getYxsmc() {
return yxsmc;
}
public void setYxsmc(String yxsmc) {
this.yxsmc = yxsmc;
}
public Integer getKch() {
return kch;
}
public void setKch(Integer kch) {
this.kch = kch;
}
public String getKcm() {
return kcm;
}
public void setKcm(String kcm) {
this.kcm = kcm;
}
public float getCj() {
return cj;
}
public void setCj(float cj) {
this.cj = cj;
}
}
后臺(tái)輸出:
數(shù)據(jù)庫(kù)導(dǎo)出成功
1.0 hongten 信息技術(shù)學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用基礎(chǔ) 80.0
2.0 王五 信息技術(shù)學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用基礎(chǔ) 81.0
3.0 李勝基 信息技術(shù)學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用基礎(chǔ) 82.0
4.0 五班古 信息技術(shù)學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用基礎(chǔ) 83.0
5.0 蔡詩(shī)蕓 信息技術(shù)學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用基礎(chǔ) 84.0
文章標(biāo)題:表格java代碼 java 表格
網(wǎng)頁(yè)鏈接:http://jinyejixie.com/article32/ddpiisc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、ChatGPT、微信公眾號(hào)、Google、建站公司、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)