使用Apache POI读/写不同的Microsoft Office文件格式

时间:2016-09-27 13:54:53

标签: java maven apache-poi xlsx

如何使用Apache POI在Microsoft Excel电子表格上执行不同的功能?

我试图从我的Spring MVC应用程序生成和更新Excel文件(来自数据库的数据)..

由于

2 个答案:

答案 0 :(得分:1)

  

包含apache poi jar文件

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>
  

阅读Excel文件

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//..
FileInputStream file = new FileInputStream(new File("C:\\test.xls"));

//Get the workbook instance for XLS file 
HSSFWorkbook workbook = new HSSFWorkbook(file);

//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);

//Get iterator to all the rows in current sheet
Iterator<Row> rowIterator = sheet.iterator();

//Get iterator to all cells of current row
Iterator<Cell> cellIterator = row.cellIterator();

我们在上面的代码段中使用的类 HSSFWorkbook HSSFSheet 适用于.xls格式。要使用.xlsx,请使用 XSSFWorkbook XSSFSheet 类。

与HSSF类似,POI也有其他文件格式的不同前缀:

HSSF(可怕的电子表格格式) - 读取和写入Microsoft Excel(XLS)格式文件。

XSSF(XML SpreadSheet格式) - 读取和写入Office Open XML(XLSX)格式文件。

HPSF(可怕的属性集格式) - 从Microsoft Office文件中读取“文档摘要”格式。

HWPF(可怕的字处理器格式) - 旨在读取和写入Microsoft Word 97(DOC)格式文件。

HSLF(可怕的幻灯片布局格式) - Microsoft PowerPoint文件的纯Java实现。

HDGF(可怕的DiaGram格式) - Microsoft Visio二进制文件的初始纯Java实现。

HPBF(可怕的PuBlisher格式) - Microsoft Publisher文件的纯Java实现。

HSMF(可怕的愚蠢邮件格式) - Microsoft Outlook MSG文件的纯Java实现。

DDF(可怕的绘图格式) - 用于解码Microsoft Office绘图格式的包。

  

创建新的Excel文件

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//..
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("FuSsA sheet");
//Create a new row in current sheet
Row row = sheet.createRow(0);
//Create a new cell in current row
Cell cell = row.createCell(0);
//Set value to new value
cell.setCellValue("Slim Shady");
    try {
        FileOutputStream out = 
                new FileOutputStream(new File("C:\\new.xls"));
        workbook.write(out);
        out.close();
        System.out.println("Excel written successfully..");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
  

更新现有Excel文件

try {
            FileInputStream file = new FileInputStream(new File("C:\\update.xls"));

            HSSFWorkbook workbook = new HSSFWorkbook(file);
            HSSFSheet sheet = workbook.getSheetAt(0);
            Cell cell = null;

            //Update the value of cell
            cell = sheet.getRow(1).getCell(2);
            cell.setCellValue(cell.getNumericCellValue() * 2);
            cell = sheet.getRow(2).getCell(2);
            cell.setCellValue(cell.getNumericCellValue() * 2);
            cell = sheet.getRow(3).getCell(2);
            cell.setCellValue(cell.getNumericCellValue() * 2);

            file.close();

            FileOutputStream outFile =new FileOutputStream(new File("C:\\update.xls"));
            workbook.write(outFile);
            outFile.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

有关详细信息,添加公式和向样式添加样式,您可以查看以下链接:Read / Write Excel file in Java using Apache POI

答案 1 :(得分:0)

对于操纵任何细胞或添加配方,您可以使用以下内容:

HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Calculate Simple Interest");

        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("Pricipal Amount (P)");
        header.createCell(1).setCellValue("Rate of Interest (r)");
        header.createCell(2).setCellValue("Tenure (t)");
        header.createCell(3).setCellValue("Interest (P r t)");

        Row dataRow = sheet.createRow(1);
        dataRow.createCell(0).setCellValue(14500d);
        dataRow.createCell(1).setCellValue(9.25);
        dataRow.createCell(2).setCellValue(3d);
        dataRow.createCell(3).setCellFormula("A2*B2*C2");

        try {
            FileOutputStream out = 
                    new FileOutputStream(new File("C:\\formula.xls"));
            workbook.write(out);
            out.close();
            System.out.println("Excel written successfully..");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

为了向单元格添加样式,

you can use: cell.setCellStyle(style);

要向单元格添加背景,您可以使用以下内容:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);