JAVA读写EXCEL
本文主要向你演示如何使用JavaExcel API来读写Excel文件。关于JavaExcel API,这是一个开源的lib库。其相关的feature如下:
- 支持Excel 95, 97, 2000, XP, 2003 的制表页。
- 可以读写相关的Excel公式 (仅支持Excel 97 及以后版本)
- 可以生成 Excel 2000 格式的xls文件。
- 支持字体,数字和日期格式。
- 支持单元格的阴影,边框和颜色。
- 可以修改已存在的制表页。
- 国际化多语言集。(公式目前支持,英文,法文,西班牙文和德文)
- 支持图表拷贝。
- 支持图片的插入和复制。
- 日志生成可以使用Jakarta Commons Logging, log4j, JDK 1.4 Logger, 等。
- 更多……
- 你可以在这里下载:http://jexcelapi.sourceforge.net/,然后,把jxl.jar加到你的Java的classpath中。
- 下面是两段例程,一段是如何创建Excel,一段是如何读取Excel。
- 创建Excel
-
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
package
writer;
import
java.io.File;
import
java.io.IOException;
import
java.util.Locale;
import
jxl.CellView;
import
jxl.Workbook;
import
jxl.WorkbookSettings;
import
jxl.format.UnderlineStyle;
import
jxl.write.Formula;
import
jxl.write.Label;
import
jxl.write.Number;
import
jxl.write.WritableCellFormat;
import
jxl.write.WritableFont;
import
jxl.write.WritableSheet;
import
jxl.write.WritableWorkbook;
import
jxl.write.WriteException;
import
jxl.write.biff.RowsExceededException;
public
class
WriteExcel {
private
WritableCellFormat timesBoldUnderline;
private
WritableCellFormat times;
private
String inputFile;
public
void
setOutputFile(String inputFile) {
this
.inputFile = inputFile;
}
public
void
write()
throws
IOException, WriteException {
File file =
new
File(inputFile);
WorkbookSettings wbSettings =
new
WorkbookSettings();
wbSettings.setLocale(
new
Locale(
"en"
,
"EN"
));
WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings);
workbook.createSheet(
"Report"
,
0
);
WritableSheet excelSheet = workbook.getSheet(
0
);
createLabel(excelSheet);
createContent(excelSheet);
workbook.write();
workbook.close();
}
private
void
createLabel(WritableSheet sheet)
throws
WriteException {
// Lets create a times font
WritableFont times10pt =
new
WritableFont(WritableFont.TIMES,
10
);
// Define the cell format
times =
new
WritableCellFormat(times10pt);
// Lets automatically wrap the cells
times.setWrap(
true
);
// Create create a bold font with unterlines
WritableFont times10ptBoldUnderline =
new
WritableFont(
WritableFont.TIMES,
10
, WritableFont.BOLD,
false
,
UnderlineStyle.SINGLE);
timesBoldUnderline =
new
WritableCellFormat(times10ptBoldUnderline);
// Lets automatically wrap the cells
timesBoldUnderline.setWrap(
true
);
CellView cv =
new
CellView();
cv.setFormat(times);
cv.setFormat(timesBoldUnderline);
cv.setAutosize(
true
);
// Write a few headers
addCaption(sheet,
0
,
0
,
"Header 1"
);
addCaption(sheet,
1
,
0
,
"This is another header"
);
}
private
void
createContent(WritableSheet sheet)
throws
WriteException,
RowsExceededException {
// Write a few number
for
(
int
i =
1
; i <
10
; i++) {
// First column
addNumber(sheet,
0
, i, i +
10
);
// Second column
addNumber(sheet,
1
, i, i * i);
}
// Lets calculate the sum of it
StringBuffer buf =
new
StringBuffer();
buf.append(
"SUM(A2:A10)"
);
Formula f =
new
Formula(
0
,
10
, buf.toString());
sheet.addCell(f);
buf =
new
StringBuffer();
buf.append(
"SUM(B2:B10)"
);
f =
new
Formula(
1
,
10
, buf.toString());
sheet.addCell(f);
// Now a bit of text
for
(
int
i =
12
; i <
20
; i++) {
// First column
addLabel(sheet,
0
, i,
"Boring text "
+ i);
// Second column
addLabel(sheet,
1
, i,
"Another text"
);
}
}
private
void
addCaption(WritableSheet sheet,
int
column,
int
row, String s)
throws
RowsExceededException, WriteException {
Label label;
label =
new
Label(column, row, s, timesBoldUnderline);
sheet.addCell(label);
}
private
void
addNumber(WritableSheet sheet,
int
column,
int
row,
Integer integer)
throws
WriteException, RowsExceededException {
Number number;
number =
new
Number(column, row, integer, times);
sheet.addCell(number);
}
private
void
addLabel(WritableSheet sheet,
int
column,
int
row, String s)
throws
WriteException, RowsExceededException {
Label label;
label =
new
Label(column, row, s, times);
sheet.addCell(label);
}
public
static
void
main(String[] args)
throws
WriteException, IOException {
WriteExcel test =
new
WriteExcel();
test.setOutputFile(
"c:/temp/lars.xls"
);
test.write();
System.out
.println(
"Please check the result file under c:/temp/lars.xls "
);
}
}
- 读取Excel
-
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
package
reader;
import
java.io.File;
import
java.io.IOException;
import
jxl.Cell;
import
jxl.CellType;
import
jxl.Sheet;
import
jxl.Workbook;
import
jxl.read.biff.BiffException;
public
class
ReadExcel {
private
String inputFile;
public
void
setInputFile(String inputFile) {
this
.inputFile = inputFile;
}
public
void
read()
throws
IOException {
File inputWorkbook =
new
File(inputFile);
Workbook w;
try
{
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(
0
);
// Loop over first 10 column and lines
for
(
int
j =
0
; j < sheet.getColumns(); j++) {
for
(
int
i =
0
; i < sheet.getRows(); i++) {
Cell cell = sheet.getCell(j, i);
CellType type = cell.getType();
if
(cell.getType() == CellType.LABEL) {
System.out.println(
"I got a label "
+ cell.getContents());
}
if
(cell.getType() == CellType.NUMBER) {
System.out.println(
"I got a number "
+ cell.getContents());
}
}
}
}
catch
(BiffException e) {
e.printStackTrace();
}
}
public
static
void
main(String[] args)
throws
IOException {
ReadExcel test =
new
ReadExcel();
test.setInputFile(
"c:/temp/lars.xls"
);
test.read();
}
}