`

poi操作execl(引用)

阅读更多
Jakarta POI 是一套用于访问微软格式文档的Java API。

Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。

下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。

操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。

HSSF对Excel的操作主要是通过下面几个对象实现:
HSSFWorkbook    工作簿对象对应于Excel文件
HSSFSheet       Sheet对象对应于Excel中的Sheet
HSSFRow         行对象表示Sheet中的一行(这个对象在JXL中并没有提供)
HSSFCell        单元格对象

操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子:

//创建HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象
HSSFSheet sheet = wb.createSheet("sheet0");
//创建HSSFRow对象
HSSFRow row = sheet.createRow((short)0);
//创建HSSFCell对象
HSSFCell cell=row.createCell((short)0);
//用来处理中文问题
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置单元格的值
cell.setCellValue("单元格中的中文");
//定义你需要的输出流
OutputStream out = new FileOutputStream("viwo.xls");
//输出Excel
wb.write(out);
out.flush();

HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。
只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。

最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。
http://jakarta.apache.org/poi/hssf/quick-guide.html


一、示例1:




package com.cplatform.contants;

import java.io.FileOutputStream;   
import java.io.IOException;   
import java.util.Date;   

import org.apache.poi.hssf.usermodel.HSSFCell;   
import org.apache.poi.hssf.usermodel.HSSFCellStyle;   
import org.apache.poi.hssf.usermodel.HSSFDataFormat;   
import org.apache.poi.hssf.usermodel.HSSFRow;   
import org.apache.poi.hssf.usermodel.HSSFSheet;   
import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
import org.apache.poi.hssf.util.HSSFColor;   

public class A {   
    /** 
     * HSSFWorkbook excell的文档对象 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell 
     * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader 
     * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式 
     */ 
    public static void main(String[] args) throws IOException {   
        HSSFWorkbook wb = new HSSFWorkbook();   
        // 建立新HSSFWorkbook对象   
        HSSFSheet sheet = wb.createSheet("new sheet");   
        // 建立新的sheet对象   
        // Create a row and put some cells in it.Rows are 0 based.   
        HSSFRow row = sheet.createRow((short) 0);   
        // 建立新行   
        // Create a cell and put a value in it.   
        HSSFCell cell = row.createCell((short) 0);   
        // 建立新cell   
        cell.setCellValue(1);// 设置cell的整数类型的值   
        // Or do it on one line.   
        row.createCell((short) 1).setCellValue(1.2);   
        // 设置cell浮点类型的值   
        row.createCell((short) 2).setCellValue("test");   
        // 设置cell字符类型的值   
        row.createCell((short) 3).setCellValue(true);   
        // 设置cell布尔类型的值   
        HSSFCellStyle cellStyle = wb.createCellStyle();   
        // 建立新的cell样式   
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));   
        // 设置cell样式为定制的日期格式   
        HSSFCell dCell = row.createCell((short) 4);   
        dCell.setCellValue(new Date());   
        // 设置cell为日期类型的值   
        dCell.setCellStyle(cellStyle);   
        // 设置该cell日期的显示格式   
        HSSFCell csCell = row.createCell((short) 5);   
        csCell.setEncoding(HSSFCell.ENCODING_UTF_16);   
        // 设置cell编码解决中文高位字节截断   
        csCell.setCellValue("中文测试_Chinese Words Test");   

        // 设置背景色   
        HSSFCellStyle style = wb.createCellStyle();   
        style   
                .setFillForegroundColor(new HSSFColor.GREY_25_PERCENT()   
                        .getIndex());   
        style   
                .setFillBackgroundColor(new HSSFColor.GREY_25_PERCENT()   
                        .getIndex());   
        style.setFillPattern(HSSFCellStyle.SPARSE_DOTS);   
        HSSFCell cell1 = row.createCell((short) 6);   
        cell1.setCellValue("X");   
        cell1.setCellStyle(style);   

        // 设置背景色   
        HSSFCellStyle style1 = wb.createCellStyle();   
        style1.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT()   
                .getIndex());   
        style1.setFillBackgroundColor(new HSSFColor.GREY_40_PERCENT()   
                .getIndex());   
        style1.setBorderBottom((short) 1);   
        style1.setBorderTop((short) 1);   
        style1.setBorderLeft((short) 1);   
        style1.setBorderRight((short) 1);   
        /** 
         * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么 
         * 你上面设置的前景色和背景色就显示不出来.
         */ 
        style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS);   
        HSSFCell cell11 = row.createCell((short) 7);   
        cell11.setCellValue("X11");   
        cell11.setCellStyle(style1);   

        // 数字格式化   
        HSSFCellStyle st = wb.createCellStyle();   
        // 建立新的cell样式   
        st.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));   
        HSSFCell cell12 = row.createCell((short) 8);   
        cell12.setCellValue((double) 10000000);   
        cell12.setCellStyle(st);  

cell12 .setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断

cell12 .setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串

        row.createCell((short) 9).setCellType(HSSFCell.CELL_TYPE_ERROR);   
        // 建立错误cell   
        // Write the output to a file   
        FileOutputStream fileOut = new FileOutputStream("D:/workbook.xls");   
        wb.write(fileOut);   
        fileOut.close();   
    }   
}

二、示例2:

package com.cplatform.contants;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/** */
/**
* 生成导出Excel文件对象
* 
* @author John.Zhu
*/
public class XLSExport {

// 设置cell编码解决中文高位字节截断
private static short XLS_ENCODING = HSSFWorkbook.ENCODING_UTF_16;

// 定制日期格式
private static String DATE_FORMAT = " m/d/yy "; // "m/d/yy h:mm"

// 定制浮点数格式
private static String NUMBER_FORMAT = " #,##0.00 ";

private String xlsFileName;

private HSSFWorkbook workbook;

private HSSFSheet sheet;

private HSSFRow row;

/** */
/**
* 初始化Excel
* 
* @param fileName
*            导出文件名
*/
public XLSExport(String fileName) {
   this.xlsFileName = fileName;
   this.workbook = new HSSFWorkbook();
   this.sheet = workbook.createSheet();
}

/** */
/**
* 导出Excel文件
* 
* @throws XLSException
*/
public void exportXLS() throws Exception {
   try {
    FileOutputStream fOut = new FileOutputStream(xlsFileName);
    workbook.write(fOut);
    fOut.flush();
    fOut.close();
   }
   catch (FileNotFoundException e) {
    throw new Exception(" 生成导出Excel文件出错! ", e);
   }
   catch (IOException e) {
    throw new Exception(" 写入Excel文件出错! ", e);
   }

}

/** */
/**
* 增加一行
* 
* @param index
*            行号
*/
public void createRow(int index) {
   this.row = this.sheet.createRow(index);
}

/** */
/**
* 设置单元格
* 
* @param index
*            列号
* @param value
*            单元格填充值
*/
public void setCell(int index, String value) {
   HSSFCell cell = this.row.createCell((short) index);
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell.setEncoding(XLS_ENCODING);
   cell.setCellValue(value);
}

/** */
/**
* 设置单元格
* 
* @param index
*            列号
* @param value
*            单元格填充值
*/
public void setCell(int index, Calendar value) {
   HSSFCell cell = this.row.createCell((short) index);
   cell.setEncoding(XLS_ENCODING);
   cell.setCellValue(value.getTime());
   HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式
   cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT)); // 设置cell样式为定制的日期格式
   cell.setCellStyle(cellStyle); // 设置该cell日期的显示格式
}

/** */
/**
* 设置单元格
* 
* @param index
*            列号
* @param value
*            单元格填充值
*/
public void setCell(int index, int value) {
   HSSFCell cell = this.row.createCell((short) index);
   cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
   cell.setCellValue(value);
}

/** */
/**
* 设置单元格
* 
* @param index
*            列号
* @param value
*            单元格填充值
*/
public void setCell(int index, double value) {
   HSSFCell cell = this.row.createCell((short) index);
   cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
   cell.setCellValue(value);
   HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式
   HSSFDataFormat format = workbook.createDataFormat();
   cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); // 设置cell样式为定制的浮点数格式
   cell.setCellStyle(cellStyle); // 设置该cell浮点数的显示格式
}

public static void main(String[] args) {
   System.out.println(" 开始导出Excel文件 ");
   XLSExport e = new XLSExport("d:/test.xls");
   e.createRow(0);
   e.setCell(0, " 编号 ");
   e.setCell(1, " 名称 ");
   e.setCell(2, " 日期 ");
   e.setCell(3, " 金额 ");
   e.createRow(1);
   e.setCell(0, 1);
   e.setCell(1, " 工商银行 ");
   e.setCell(2, Calendar.getInstance());
   e.setCell(3, 111123.99);
   e.createRow(2);
   e.setCell(0, 2);
   e.setCell(1, " 招商银行 ");
   e.setCell(2, Calendar.getInstance());
   e.setCell(3, 222456.88);
   try {
    e.exportXLS();
    System.out.println(" 导出Excel文件[成功] ");
   }
   catch (Exception e1) {
    System.out.println(" 导出Excel文件[失败] ");
    e1.printStackTrace();
   }
}

} 
分享到:
评论

相关推荐

    Apache-poi.zip

    7. **使用示例**:通常,开发者会使用Maven或Gradle等构建工具来管理Apache POI的依赖,但如果提供的是jar包,可以直接在项目中引用,通过实例化相应的类,调用其方法实现文件的读写。 8. **性能优化**:Apache POI...

    java-POI相关jar包

    标题“java-POI相关jar包”表明我们讨论的是与Java POI库相关的Java类库文件,通常这些jar包包含了所有必要的类和资源,使得开发者可以在项目中直接引用,实现对Office文档的操作。 描述中提到的“Java-poi所需的...

    Java操作Excel解决方案.docx

    为了方便地实现Excel的导入导出功能,本文将介绍如何使用Apache POI库来操作Excel文件。Apache POI是一个用于读写Microsoft Office格式文件的Java API,包括Word、Excel等格式。本文将详细介绍如何使用Apache POI...

    C#导出execl表格

    首先,需要在项目中引用Microsoft.Office.Interop.Excel命名空间。以下是一个简单的例子: ```csharp using Excel = Microsoft.Office.Interop.Excel; // 创建Excel实例 Excel.Application excelApp = new Excel....

    JS导入Execl

    ref']`会给出工作表的引用范围,而`worksheet['A1'].v`可以获取单元格A1的值。 对于数据的编辑,SheetJS提供了丰富的API,允许你修改单元格值、添加新行、合并单元格等。修改完成后,可以使用`XLSX.writeFile()`或`...

    Execl级联实现 JAVA实现 可以直接运行

    在Java编程环境中,Excel操作是一项...总的来说,这个项目提供了使用Java和Apache POI进行Excel级联操作的实例,可以帮助开发者了解和掌握相关技术,对于需要处理大量Excel数据或构建复杂数据链路的项目非常有价值。

    Execl导出开发插件

    总结来说,Execl导出开发插件借助NPOI插件,为.NET开发者提供了一种强大的工具,能够方便、灵活地生成和操作Excel文件,从而满足各种业务需求。通过学习和应用NPOI,开发者可以构建自己的数据导出解决方案,提升数据...

    页面html Table表格导出Execl

    但可以通过创建一个`Blob`对象,然后创建一个URL引用,利用`a`标签的`download`属性触发下载。例如: ```javascript let blob = new Blob([excelData], {type: 'application/vnd.openxmlformats-officedocument....

    .NET 5 Execl导入 文件上传,下载Demo!

    NPOI是.NET版本的Apache POI,后者是Java平台上的一个库,用于处理Microsoft Office格式的文件。 - **CoreNPOI的使用**:首先,需要安装`CoreNPOI` NuGet包。接着,可以使用`HSSFWorkbook`(对于旧版的.xls文件)...

    导入Excel并保存到数据库

    在编程环境中,我们需要通过特定库来读取和操作Excel文件。这里提到的文件包括几个与Apache POI相关的jar包,如poi-3.7.jar、poi-ooxml-schemas-3.7.jar等。Apache POI是一个开源项目,它提供了API来读写Microsoft ...

    VC++操作Excel的实例,包括读取写入以及遍历其Sheet

    首先,要使用VC++操作Excel,我们需要引入Microsoft的Office自动化接口,这通常通过引用`#import`指令来完成。例如,我们可能需要引入`libid:00024500-0000-0000-C000-000000000046`(Excel 97-2003)或`libid:000C...

    C#将数据导出到Execl汇总.doc

    三、使用NPOI库导出数据到Excel NPOI是.NET平台下对Apache POI的一个封装,支持读写Excel 97-2003(.xls)和2007以上版本(.xlsx)的文件。以下是使用NPOI导出数据到Excel的示例: 1. 引入NPOI库,通过NuGet安装`...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性...当然,具体的实现代码会涉及更多的细节和具体操作,但以上知识点提供了一个全面的概览。

    POIFS_Browser_1.2.3

    "binary"可能包含了编译后的库文件或者执行文件,可以直接在.NET环境中运行或引用,以便于在开发项目中使用。 对于.NET开发者,特别是使用C#的Windows Forms和ASP.NET开发者,了解和掌握NOPI(可能是.NET版本的...

    c#/vs使用npoi对excel进行简单的操作

    npoi是poi的.net版本,是一个开源的库,可以我们对execl进行一个简单的使用,在这个文件中,我已经实现了对于npoi简单的使用的一些方法的封装,由于我也是近期才有这个需求,可能代码比较稚嫩,但是对于创建excel,...

    java导出图片到excel

    然后,创建一个RichTextString对象,用于保存图片的引用。最后,在Cell中使用setCellType(Row.MIXED)将单元格类型设置为混合,并通过DataValidationHelper和DataValidationConstraint创建一个数据验证对象,指定...

    NPOI.dll用来导入导出EXCEL啊

    它是一个开源项目,为.NET开发者提供了与Microsoft的POI Java库类似的接口,使得在不依赖Microsoft Office的情况下,能够读取、写入以及操作Excel文件。NPOI支持多种格式,包括XLS(老版Excel)和XLSX(新版本的...

    C# 导出excel表格(xls、xlsx两种格式)

    此外,还可以使用其他库,如NPOI(.NET版本的Apache POI),它支持读写xls和xlsx格式,适用于不希望依赖Office或者需要跨平台的场景。 总之,C#提供了多种方式来导出Excel表格,可以根据项目需求和环境选择合适的...

Global site tag (gtag.js) - Google Analytics