Java Excel是一开放源码项目,通过它开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件以及插入图片等等。
详细介绍及API查看官方:http://www.andykhan.com/jexcelapi/index.html
ps:读取结束时注意调用close()方法;释放内存
写入结束时先调用write()方法,否则得到的是空Excel,因为先前的操作都是存储在缓存中。具体见代码
一、读取Excel的例子:
注意对数字、日期等不同CellType的读取
/**
* jxl 读取
* @author Michael sun
*/
public class JxlRead {
/**
* 读取 excel 文件
* @param filePath
* @throws Exception
*/
private void readExcel(String filePath) throws Exception {
InputStream is = null;
Workbook workbook = null;
try {
is = new FileInputStream(filePath);
workbook = Workbook.getWorkbook(is);
// sheet row column 下标都是从0开始的
Sheet sheet = workbook.getSheet(0);
int column = sheet.getColumns();
int row = sheet.getRows();
System.out.println("共有" + row + "行," + column + "列数据");
// A1是字符
Cell cellA1 = sheet.getCell(0, 0);
System.out.println("A1 type:" + cellA1.getType());
if (cellA1.getType().equals(CellType.LABEL)) {
System.out.println("A1 content:" + cellA1.getContents());
}
// B1是数字
Cell cellB1 = sheet.getCell(1, 0);
System.out.println("B1 type:" + cellB1.getType());
if (cellB1.getType().equals(CellType.NUMBER)) {
NumberCell numberCell = (NumberCell) cellB1;
double douval = numberCell.getValue();
System.out.println("B1 value:" + douval);
}
// C1是日期
Cell cellC1 = sheet.getCell(2, 0);
System.out.println("C1 type:" + cellC1.getType());
if (cellC1.getType().equals(CellType.DATE)) {
DateCell dateCell = (DateCell) cellC1;
Date date = dateCell.getDate();
System.out.println("C1 date:" + date);
}
// 操作完成时,关闭对象,释放占用的内存空间
workbook.close();
is.close();
} catch (Exception e) {
e.printStackTrace(System.out);
} finally {
if (is != null) {
is.close();
}
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String filePath = "D:\\test\\testjxlread.xls";
JxlRead jxlRead = new JxlRead();
jxlRead.readExcel(filePath);
}
}
excel内容如下:
运行结果:
共有1行,4列数据
A1 type:Label
A1 content:字符
B1 type:Number
B1 value:123.0
C1 type:Date
C1 date:Wed Feb 24 08:00:00 CST 2010
二、写入Excel的例子:
/**
* 写入excel
* @author Michael sun
*/
public class JxlWrite {
/**
* 写入 excel 文件
* @param filePath
* @throws Exception
*/
private void writeExcel(String filePath) throws Exception {
OutputStream os = null;
try {
// 构建Workbook对象
os = new FileOutputStream(filePath);
WritableWorkbook wwb = Workbook.createWorkbook(os);
// 构建Excel sheet
WritableSheet sheet = wwb.createSheet("test write sheet", 0);
// 设置标题格式
WritableFont wfTitle = new jxl.write.WritableFont(
WritableFont.ARIAL, 18, WritableFont.BOLD, true);
WritableCellFormat wcfTitle = new WritableCellFormat(wfTitle);
// 设置水平对齐方式
wcfTitle.setAlignment(Alignment.CENTRE);
// 设置垂直对齐方式
wcfTitle.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置是否自动换行
wcfTitle.setWrap(true);
// 合并A1->C2
sheet.mergeCells(0, 0, 2, 1);
Label titleCell = new Label(0, 0, "Title Cell ", wcfTitle);
sheet.addCell(titleCell);
WritableFont wf = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLUE);
WritableCellFormat wcf = new WritableCellFormat(wf);
// A3
Label labelCell = new Label(0, 2, "Label Cell ");
sheet.addCell(labelCell);
// B3
Label labelCellFmt = new Label(1, 2,
"Label Cell with WritableCellFormat ", wcf);
sheet.addCell(labelCellFmt);
// A4 添加jxl.write.Number对象
jxl.write.Number labelN = new jxl.write.Number(0, 3, 3.1415926);
sheet.addCell(labelN);
// B4 添加Number对象 jxl.write.NumberFormat
NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat wcfN = new WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 3, 3.1415926,
wcfN);
sheet.addCell(labelNF);
// A5 添加jxl.write.Boolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 4, true);
sheet.addCell(labelB);
// A6 添加 jxl.write.DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 5,
new Date());
sheet.addCell(labelDT);
// B6 添加DateTime对象 jxl.write.DateFormat
jxl.write.DateFormat df = new jxl.write.DateFormat(
"yyyy-MM-dd HH:mm:ss");
WritableCellFormat wcfDF = new WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 5,
new Date(), wcfDF);
sheet.addCell(labelDTF);
//先调用write();再调用close();
wwb.write();
wwb.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != os) {
os.close();
}
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String filePath = "D:\\test\\testjxlwrite.xls";
JxlWrite jxlwrite = new JxlWrite();
jxlwrite.writeExcel(filePath);
}
}
运行结果:
ps:添加DateTime对象时 如果没有加格式时,出现1900/1/0 不知啥原因?
三、插入图片
/**
* jxl 插入图片(图像格式只支持png)
* @author Michael sun
*/
public class JxlWriteImg {
/**
*
* @param filePath
*/
private void writeImg(String filePath) throws Exception {
OutputStream os = null;
try {
String imgPath = "d:\\test\\xx.png";
os = new FileOutputStream(filePath);
WritableWorkbook wwb = Workbook.createWorkbook(os);
WritableSheet ws = wwb.createSheet("write img", 0);
File imgFile = new File(imgPath);
// WritableImage(col, row, width, height, imgFile);
WritableImage image = new WritableImage(2, 1, 8, 20, imgFile);
ws.addImage(image);
wwb.write();
wwb.close();
} catch (Exception e) {
System.out.println(e);
} finally {
if (null != os) {
os.close();
}
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String filePath = "D:\\test\\testjxlwriteimg.xls";
JxlWriteImg jxlWriteImg = new JxlWriteImg();
jxlWriteImg.writeImg(filePath);
}
}
运行结果:
四、更新Excel
/**
* jxl 更新excel
* @author Michael sun
*/
public class JxlUpdate {
/**
*
* @param filePath
*/
private void doUpdate(String filePath) {
try {
// 获得原Excel文件
Workbook wb = Workbook.getWorkbook(new File(filePath));
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath),
wb);
// 对第一个工作簿的A1 更新
WritableSheet wsheet0 = wwb.getSheet(0);
WritableCell wc00 = wsheet0.getWritableCell(0, 0);
if (wc00.getType() == CellType.LABEL) {
Label label00 = (Label) wc00;
label00.setString("updata data");
}
// 添加一个工作表
WritableSheet sheet = wwb.createSheet("新增工作簿", 1);
// 写入一些测试数据
sheet.addCell(new Label(0, 0, "test data"));
// 关闭工作薄对象
wwb.write();
wwb.close();
wb.close();
} catch (Exception e) {
System.out.println(e);
}
}
/**
* @param args
*/
public static void main(String[] args) {
String filePath = "D:\\test\\testjxlupdate.xls";
JxlUpdate jxlUpdate = new JxlUpdate();
jxlUpdate.doUpdate(filePath);
}
}
- 大小: 7 KB
- 大小: 18 KB
- 大小: 35.7 KB
分享到:
相关推荐
在Excel文件中插入图片是JXL的一个高级特性,需要使用`Picture`类。首先,我们需要将图片文件转换为字节数组,然后创建`Picture`对象并添加到工作表。以下是一个例子: ```java byte[] imageData = Files....
`jxl.write.WritableImage`类用于在Excel工作表中插入图像。首先,我们需要将水印图像加载到内存中,然后创建`WritableImage`对象: ```java File watermarkFile = new File("path_to_your_watermark.png"); ...
JXL支持将图像插入Excel文件,但需要注意,图片必须是BMP格式。使用`Picture`类创建图像对象,然后添加到工作表。 6. **行和列操作**: 可以使用`Row`和`Column`对象来操作Excel的行和列,包括插入、删除、设置...
JXL库还支持合并单元格、插入图片、处理表格样式等功能,提供了丰富的API供开发者使用。 在实际开发中,可以根据业务需求灵活调整上述代码,例如从数据库获取数据,动态生成Excel内容。`writeExcelByJXL`这个文件...
5. **处理图片**:JXL库也支持在Excel文件中插入图片。首先需要将图片转换为字节数组,然后使用`WritableImage`类创建一个可写的图像对象,并添加到工作表中。 6. **读写保护与密码**:JXL库提供了设置文件读写权限...
除了基本的读写功能,jxl还支持合并单元格、插入图片、处理图表等高级特性。对于大型数据集,可以使用流式写入模式以减少内存消耗。 在实际项目中,你可能需要根据业务需求调整上述代码,例如从数据库获取数据,或...
在实际开发中,你可能还需要处理更复杂的情况,如合并单元格、插入图片、处理公式等。JXL库提供了丰富的API来应对这些需求。通过阅读和理解源码,你可以更好地理解其内部实现,以便在遇到问题时能快速定位和解决。 ...
本文将深入探讨如何使用jxl库导出数据到Excel,以及如何处理字符串转换为图片和日期类的特性。 首先,我们要了解如何使用jxl库创建一个新的Excel工作簿。在Java中,可以创建`Workbook`对象作为Excel文件的基础,...
JXL库提供了丰富的API,可以对Excel文件进行读、写、修改等操作。下面分别介绍这些操作: **读取Excel文件** 1. 创建一个`Workbook`对象,它是整个Excel文件的容器: ```java Workbook workbook = Workbook....
- 处理图片:可以将图片插入到Excel工作表中,通过`Picture`类实现。 - 多线程处理:JXL支持并发读写,对于大数据处理有很好的性能。 - 兼容性:JXL能处理不同版本的Excel文件,包括97-2003的.BOOK格式和2007以后...
- 虽然jxl库对图像和图表的支持有限,但它确实支持插入PNG格式的图片到Excel文件中。 - 对于图表,jxl可能无法提供复杂的创建和编辑功能,但可以用于基础的图表操作。 4. **平台兼容性**: - jxl是纯Java实现的...
- **图片插入**:JXL 提供了插入图片到 Excel 工作表的功能,但需要处理二进制数据并进行适当的转换。 5. **注意事项** - JXL 对较新版本的 Excel 格式(如 .xlsx)支持有限,主要针对 .xls 格式。 - 大文件处理...
标题 "jxl写png图片到Excel里...总的来说,解决“jxl写png图片到Excel里出现黑色区域问题”需要对jxl库有深入的理解,以及对Excel图像处理机制的熟悉。通过调试、代码审查和使用替代方案,通常可以找到解决问题的方法。
- **图片插入**:`jxl`支持插入图片,但需要注意图片必须是BIFF8格式。 - **行高和列宽**:可以调整行高和列宽以适应数据。 - **条件格式化**:通过`ConditionalFormat`类实现基于特定条件的格式化。 在实际应用中...
标题中的“用jxl操作excel实例”指的是使用Java Excel API(简称JXL)来处理Microsoft Excel文件的一个实际应用。JXL是一个开源库,允许Java开发者读取、写入和修改Excel电子表格。在这个Spring MVC工程中,JXL被...
5. **处理图像**:JXL库还允许你在Excel工作表中插入图片,这对于报告或者数据分析的应用非常有用。 6. **工作表操作**:你可以创建、重命名、复制和删除Excel工作表。这对于组织大量数据或创建多视图非常方便。 7...
在Excel中插入图片是常见的需求,使用jxl库可以实现这个功能。jxl提供了方法来插入JPEG、GIF、PNG等格式的图片到Excel工作表中。这在创建报告或者数据分析时非常有用,可以使数据更加直观易懂。 4. **转换与集成**...
JXL也支持将图片插入Excel文件,需要使用`WritableImage`类,并将其添加到指定的单元格。 9. **性能考虑** 对大型Excel文件进行操作时,应注意内存使用。JXL在内存中存储整个工作簿,所以对于非常大的文件,可能...
- jxl库对图形和图表的支持有限,只支持PNG格式的图片插入。 - 在处理完Excel文件后,别忘了调用`Workbook.write()`写入数据并关闭文件,以确保数据保存成功。 - 错误处理:在操作过程中,应该捕获并处理可能抛出...