`
什么向往
  • 浏览: 81127 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

jxl对Excel的读、写、更新以及插入图片

    博客分类:
  • JXL
阅读更多

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

分享到:
评论

相关推荐

    jxl读写excel数据,输出图片

    在Excel文件中插入图片是JXL的一个高级特性,需要使用`Picture`类。首先,我们需要将图片文件转换为字节数组,然后创建`Picture`对象并添加到工作表。以下是一个例子: ```java byte[] imageData = Files....

    jxl对excel添加水印(含有setWaterMarkImage方法).zip

    `jxl.write.WritableImage`类用于在Excel工作表中插入图像。首先,我们需要将水印图像加载到内存中,然后创建`WritableImage`对象: ```java File watermarkFile = new File("path_to_your_watermark.png"); ...

    关于jxl操作excel说明以及jxl.jar包下载2.6

    JXL支持将图像插入Excel文件,但需要注意,图片必须是BMP格式。使用`Picture`类创建图像对象,然后添加到工作表。 6. **行和列操作**: 可以使用`Row`和`Column`对象来操作Excel的行和列,包括插入、删除、设置...

    java利用jxl生成excel文件

    JXL库还支持合并单元格、插入图片、处理表格样式等功能,提供了丰富的API供开发者使用。 在实际开发中,可以根据业务需求灵活调整上述代码,例如从数据库获取数据,动态生成Excel内容。`writeExcelByJXL`这个文件...

    jxl操作excel文件例子

    5. **处理图片**:JXL库也支持在Excel文件中插入图片。首先需要将图片转换为字节数组,然后使用`WritableImage`类创建一个可写的图像对象,并添加到工作表中。 6. **读写保护与密码**:JXL库提供了设置文件读写权限...

    jxl导出excel

    除了基本的读写功能,jxl还支持合并单元格、插入图片、处理图表等高级特性。对于大型数据集,可以使用流式写入模式以减少内存消耗。 在实际项目中,你可能需要根据业务需求调整上述代码,例如从数据库获取数据,或...

    java读写Excel(JXL)

    在实际开发中,你可能还需要处理更复杂的情况,如合并单元格、插入图片、处理公式等。JXL库提供了丰富的API来应对这些需求。通过阅读和理解源码,你可以更好地理解其内部实现,以便在遇到问题时能快速定位和解决。 ...

    jxl导出Excel

    本文将深入探讨如何使用jxl库导出数据到Excel,以及如何处理字符串转换为图片和日期类的特性。 首先,我们要了解如何使用jxl库创建一个新的Excel工作簿。在Java中,可以创建`Workbook`对象作为Excel文件的基础,...

    jxl操作excel.rar

    JXL库提供了丰富的API,可以对Excel文件进行读、写、修改等操作。下面分别介绍这些操作: **读取Excel文件** 1. 创建一个`Workbook`对象,它是整个Excel文件的容器: ```java Workbook workbook = Workbook....

    JXL导出excel的示例及文档

    - 处理图片:可以将图片插入到Excel工作表中,通过`Picture`类实现。 - 多线程处理:JXL支持并发读写,对于大数据处理有很好的性能。 - 兼容性:JXL能处理不同版本的Excel文件,包括97-2003的.BOOK格式和2007以后...

    excel操作(jxl)

    - 虽然jxl库对图像和图表的支持有限,但它确实支持插入PNG格式的图片到Excel文件中。 - 对于图表,jxl可能无法提供复杂的创建和编辑功能,但可以用于基础的图表操作。 4. **平台兼容性**: - jxl是纯Java实现的...

    JXL 下载 Excel 文档

    - **图片插入**:JXL 提供了插入图片到 Excel 工作表的功能,但需要处理二进制数据并进行适当的转换。 5. **注意事项** - JXL 对较新版本的 Excel 格式(如 .xlsx)支持有限,主要针对 .xls 格式。 - 大文件处理...

    jxl写png图片到Excel里出现黑色区域问题

    标题 "jxl写png图片到Excel里...总的来说,解决“jxl写png图片到Excel里出现黑色区域问题”需要对jxl库有深入的理解,以及对Excel图像处理机制的熟悉。通过调试、代码审查和使用替代方案,通常可以找到解决问题的方法。

    jxl读写excel常见操作搜集整理

    - **图片插入**:`jxl`支持插入图片,但需要注意图片必须是BIFF8格式。 - **行高和列宽**:可以调整行高和列宽以适应数据。 - **条件格式化**:通过`ConditionalFormat`类实现基于特定条件的格式化。 在实际应用中...

    用jxl操作excel实例

    标题中的“用jxl操作excel实例”指的是使用Java Excel API(简称JXL)来处理Microsoft Excel文件的一个实际应用。JXL是一个开源库,允许Java开发者读取、写入和修改Excel电子表格。在这个Spring MVC工程中,JXL被...

    java jxl excel

    5. **处理图像**:JXL库还允许你在Excel工作表中插入图片,这对于报告或者数据分析的应用非常有用。 6. **工作表操作**:你可以创建、重命名、复制和删除Excel工作表。这对于组织大量数据或创建多视图非常方便。 7...

    jxl pdf excel

    在Excel中插入图片是常见的需求,使用jxl库可以实现这个功能。jxl提供了方法来插入JPEG、GIF、PNG等格式的图片到Excel工作表中。这在创建报告或者数据分析时非常有用,可以使数据更加直观易懂。 4. **转换与集成**...

    java jxl操作excel

    JXL也支持将图片插入Excel文件,需要使用`WritableImage`类,并将其添加到指定的单元格。 9. **性能考虑** 对大型Excel文件进行操作时,应注意内存使用。JXL在内存中存储整个工作簿,所以对于非常大的文件,可能...

    jxl解析excel1

    - jxl库对图形和图表的支持有限,只支持PNG格式的图片插入。 - 在处理完Excel文件后,别忘了调用`Workbook.write()`写入数据并关闭文件,以确保数据保存成功。 - 错误处理:在操作过程中,应该捕获并处理可能抛出...

Global site tag (gtag.js) - Google Analytics