`

Java POI 操作Excel

    博客分类:
  • java
 
阅读更多

apache.org提供了一个项目(poi)专门用于对办公软件的操作。这样大大方便了我们操作和读取其中的内容,用于统计分析。版本为poi-bin-3.7-20101029.zip
Component APIs
Excel (SS=HSSF+XSSF)
Word (HWPF+XWPF)
PowerPoint (HSLF+XSLF)
OpenXML4J (OOXML)
OLE2 Filesystem (POIFS)
OLE2 Document Props (HPSF)
Outlook (HSMF)
Visio (HDGF)
Publisher (HPBF)



在文档中提供了2种不同的写入方法,一个是老代码,一个是新代码。如果你希望能够兼容xls文件和xslx文件,那么建议用新代码。且老代码对office2007的操作不是很好。

代码如下:

  public static void main(String[] args)throws Exception {
  HSSFWorkbook wb = new HSSFWorkbook();
  // create a new sheet 创建一个新表
  HSSFSheet s = wb.createSheet();
  // declare a row object reference 声明一个新行
  HSSFRow r = null;
  // declare a cell object reference 声明一个单元格
  HSSFCell c = null;
  // create 2 cell styles 创建2个单元格样式
  HSSFCellStyle cs = wb.createCellStyle();
  HSSFCellStyle cs2 = wb.createCellStyle();
  HSSFDataFormat df = wb.createDataFormat();

  // create 2 fonts objects 创建2个单元格字体
  HSSFFont f = wb.createFont();
  HSSFFont f2 = wb.createFont();

  // Set font 1 to 12 point type, blue and bold 设置字体类型1到12号,蓝色和粗体
  f.setFontHeightInPoints((short) 12);
  f.setColor( HSSFColor.RED.index );
  f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

  // Set font 2 to 10 point type, red and bold 设置字体类型2到10号,红色和粗体
  f2.setFontHeightInPoints((short) 10);
  f2.setColor( HSSFColor.RED.index);
  f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

  // Set cell style and formatting 设置单元格样式和格式
  cs.setFont(f);
  cs.setDataFormat(df.getFormat("#,##0.0"));

  // Set the other cell style and formatting 设置其他单元格样式和格式
  cs2.setBorderBottom(cs2.BORDER_THIN);
  cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
  cs2.setFont(f2);


  // Define a few rows 定义一个新行
  for(short rownum = (short)0; rownum < 30; rownum++) {
    r = s.createRow(rownum);
   for(short cellnum = (short)0; cellnum < 10; cellnum += 2) {
     c = r.createCell(cellnum);
    HSSFCell c2 = r.createCell(cellnum+1);

    c.setCellValue((double)rownum + (cellnum/10));
    c2.setCellValue(new HSSFRichTextString("Hello! " + cellnum));
   }
  }

  // Save保存
  FileOutputStream out = new FileOutputStream("d://workbook.xls");
  wb.write(out);
  out.close();
         
}

---------------------------------------------------------------------------------------------------------
  
public static void main(String[] args) throws Exception {
  Workbook[] wbs = new Workbook[] { new HSSFWorkbook(),
    new XSSFWorkbook() };
  for (int i = 0; i < wbs.length; i++) {
   Workbook wb = wbs[i];
   CreationHelper createHelper = wb.getCreationHelper();

   // create a new sheet 创建一个新表
   Sheet s = wb.createSheet();
   // declare a row object reference 声明一个对象的引用行
   Row r = null;
   // declare a cell object reference 声明对象的引用单元格
   Cell c = null;
   // create 2 cell styles 创建2单元格样式
   CellStyle cs = wb.createCellStyle();
   CellStyle cs2 = wb.createCellStyle();
   DataFormat df = wb.createDataFormat();

   // create 2 fonts objects 创建2字体对象
   Font f = wb.createFont();
   Font f2 = wb.createFont();

   // Set font 1 to 12 point type, blue and bold 设置字体1至12点类型,蓝色和粗体
   f.setFontHeightInPoints((short) 12);
   f.setColor(IndexedColors.RED.getIndex());
   f.setBoldweight(Font.BOLDWEIGHT_BOLD);

   // Set font 2 to 10 point type, red and bold 设置字体2至10点类型,红色和粗体
   f2.setFontHeightInPoints((short) 10);
   f2.setColor(IndexedColors.RED.getIndex());
   f2.setBoldweight(Font.BOLDWEIGHT_BOLD);

   // Set cell style and formatting 设置单元格样式和格式
   cs.setFont(f);
   cs.setDataFormat(df.getFormat("#,##0.0"));

   // Set the other cell style and formatting 设置其他单元格样式和格式
   cs2.setBorderBottom(cs2.BORDER_THIN);
   cs2.setDataFormat(df.getFormat("text"));
   cs2.setFont(f2);

   // Define a few rows 定义几行
   for (int rownum = 0; rownum < 30; rownum++) {
    r = s.createRow(rownum);
    for (int cellnum = 0; cellnum < 10; cellnum += 2) {
     c = r.createCell(cellnum);
     Cell c2 = r.createCell(cellnum + 1);

     c.setCellValue((double) rownum + (cellnum / 10));
     c2.setCellValue(createHelper.createRichTextString("Hello! "
       + cellnum));
    }
   }

   // Save 保存
   String filename = "d://workbook.xls";
   if (wb instanceof XSSFWorkbook) {
    filename = filename + "x";
   }

   FileOutputStream out = new FileOutputStream(filename);
   wb.write(out);
   out.close();
  }

}
---------------------------------------------------------------------------------------------------------

java读取Excel,同时兼容2003及以前版本和2007版本:

public class PoiReadExcel {

public void readExcel(String filePath) {

try {

Workbook workBook = null;
        try {
        workBook = new XSSFWorkbook(filePath); //支持2007
        } catch (Exception ex) {
        workBook = new HSSFWorkbook(new FileInputStream(filePath)); //支持2003及以前
        }

// 获得Excel中工作表个数
System.out.println("工作表个数 :" + workBook.getNumberOfSheets());

//循环每个工作表
for (int i = 0; i < workBook.getNumberOfSheets(); i++) {
// 创建工作表
Sheet sheet = workBook.getSheetAt(i);

int rows = sheet.getPhysicalNumberOfRows(); // 获得行数
if (rows > 0) {
sheet.getMargin(Sheet.TopMargin);
for (int r = 0; r < rows; r++) { // 行循环
Row row = sheet.getRow(r);
if (row != null) {

int cells = row.getLastCellNum();// 获得列数
for (short c = 0; c < cells; c++) { // 列循环
Cell cell = row.getCell(c);

if (cell != null) {
String value = getValue(cell);
System.out.println("第" + r + "行 " + "第" + c
+ "列:" + value);
}
}
}
}
}

// 查询合并的单元格
for (i = 0; i < sheet.getNumMergedRegions(); i++) {
System.out.println("第" + i + "个合并单元格");
CellRangeAddress region = sheet.getMergedRegion(i);
int row = region.getLastRow() - region.getFirstRow() + 1;
int col = region.getLastColumn() - region.getFirstColumn() + 1;
System.out.println("起始行:" + region.getFirstRow());
System.out.println("起始列:" + region.getFirstColumn());
System.out.println("所占行:" + row);
System.out.println("所占列:" + col);
}
}

} catch (Exception ex) {
ex.printStackTrace();
}
}

public String getValue(Cell cell) {

String value = "";
switch (cell.getCellType()) {

case Cell.CELL_TYPE_NUMERIC: // 数值型
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是date类型则 ,获取该cell的date值
value = DateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else {// 纯数字
value = String.valueOf(cell.getNumericCellValue());
}
break;
/* 此行表示单元格的内容为string类型 */
case Cell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
break;
case Cell.CELL_TYPE_FORMULA:// 公式型
// 读公式计算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getRichStringCellValue().toString();
}
// cell.getCellFormula();读公式
break;
case Cell.CELL_TYPE_BOOLEAN:// 布尔
value = " "+ cell.getBooleanCellValue();
break;
/* 此行表示该单元格值为空 */
case Cell.CELL_TYPE_BLANK: // 空值
value = "";
break;
case Cell.CELL_TYPE_ERROR: // 故障
value = "";
break;
default:
value = cell.getRichStringCellValue().toString();
}

return value;
}

public static void main(String args[]) {

PoiReadExcel im = new PoiReadExcel();

im.readExcel("F:/2003.xls");
//im.readExcel("F:/2007.xlsx");
//im.readExcel("F:/2007.xls"); //2007下保存为2003

}

}
分享到:
评论

相关推荐

    Java Poi 操作excel的API 好用

    二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....

    java poi 操作Excel

    Java POI 是一个开源项目,...通过以上步骤和知识点,你可以使用Java POI库高效地进行Excel操作,无论是读取现有数据还是创建新的Excel文件。记得参考官方文档和示例代码,这将帮助你更好地理解和运用这个强大的库。

    java poi操作excel批量导入导出项目需要的jar包

    Java中的Apache POI库是处理Microsoft Office文档的强大工具,尤其在Excel操作方面。它允许开发者在Java应用程序中创建、修改和读取Excel文件。在进行批量导入和导出Excel数据时,Apache POI是一个非常实用的选择。...

    java poi操作excel小例子

    Java POI 操作 Excel 是一个常见的任务,在许多业务场景中都需要用到,比如数据导入导出、数据分析等。Apache POI 是一个流行的开源库,它允许开发者使用 Java 来读写 Microsoft Office 格式的文件,其中包括 Excel ...

    java_poi实现excel导入导出

    Java POI 的主要特点是可以在 Java 应用程序中读取、写入和操作 Office 文件。 2. Java POI 的组成 Java POI 由多个组件组成,每个组件负责处理不同的 Office 文件格式。以下是 Java POI 的主要组件: * POIFS ...

    java_poi操作excel

    ### Java POI 操作 Excel 的知识点详解 #### 一、POI 介绍及结构说明 **1. Apache POI 简介** - **定义**:Apache POI 是一个由 Apache 软件基金会提供的开源项目,它提供了一组 API,使 Java 程序能够读写 ...

    java poi导出excel

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    java利用poi对excel进行导入导出

    以上就是使用Java POI操作Excel的基本概念和常用方法。实际应用中,你可能需要根据具体需求进行扩展和定制。在"simpleExportExcel"这个示例中,很可能是实现了简单的Excel导出功能,包括创建工作簿、工作表、行和...

    Java POI 生成Excel时显示货币格式

    对于Excel操作,Java POI提供了HSSF(对应.xls文件)和XSSF(对应.xlsx文件)两个组件,分别用于处理不同版本的Excel文件。 ### 二、显示货币格式 在使用Java POI生成Excel时,为了使数据更易读和专业,我们经常...

    Java调用POI组件操作excel

    java poi操作excel的实战文档介绍java poi操作excel的实战文档介绍

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    java poi处理excel数据

    Java POI是Apache软件基金会下的一个开源项目,主要用于读写Microsoft Office格式的文件,特别是Excel。在Java开发中,当你需要处理Excel数据时,POI库是一个强大的工具。本压缩包包含了一些关键资源,帮助你理解和...

    java 通过poi操作excel jar包

    在实际使用中,Java开发者首先需要将对应的JAR包添加到项目的类路径中,然后就可以通过调用Apache POI提供的API来实现Excel操作。例如,创建一个新的Excel文件并写入数据的简单示例代码: ```java import org....

    java使用POI操作excel (支持excel2007)

    Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...

    Java Poi 解析EXCEL数据

    在Java世界中,Poi是解析和操作这些文件的首选工具,尤其在数据导入导出、自动化测试、数据分析等领域应用广泛。 Excel文件通常以.XLS或.XLSX格式存在,其中.XLS是早期版本的二进制格式,而.XLSX则是基于Open XML...

    Java poi操作表格

    **二、使用Java POI操作Excel** 1. **创建Workbook**:首先,你需要创建一个Workbook实例,这可以是HSSFWorkbook或XSSFWorkbook,取决于你要处理的Excel文件类型。 2. **添加Sheet**:然后,向Workbook中添加Sheet...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...

    poi 操作excel模板

    在Java开发中,POI库被广泛用于生成、修改和读取Excel文档。本篇将深入探讨如何利用Apache POI来操作Excel模板,以及如何读取数据并将其填充到新生成的文件中,最终提供下载。 首先,你需要在项目中引入Apache POI...

    Java poi 实现excel导入导出

    在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...

Global site tag (gtag.js) - Google Analytics