您的位置:

Java Excel导入导出详解

一、Excel文件简介

Excel是微软公司开发的一种电子表格程序,多用于商业、财务、科学等各种数据处理。

Excel文件通常以.xls或.xlsx格式存储,其中.xls格式为Excel 97-2003格式文件,后缀名为.xls,而.xlsx格式兼容Excel 2007及以上版本,后缀名为.xlsx。Excel文件能够存储大量的数据,并进行数据的编辑、排序、筛选、统计等操作。

二、Java读取Excel文件

Java读取Excel文件通常使用Apache POI组件,在使用之前需要引入以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>

首先需要创建一个Workbook对象,然后通过它获取Sheet对象,在通过Sheet对象获取Row和Cell对象,最后读取单元格数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("demo.xlsx");
        InputStream is = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(is);
        Sheet sheet = workbook.getSheetAt(0);
        for (Row row : sheet) {
            for (Cell cell : row) {
                System.out.print(cell.getStringCellValue() + "\t");
            }
            System.out.println();
        }
        is.close();
    }
}

该示例中读取了一个名为demo.xlsx的文件,获取第一个Sheet并遍历所有单元格,通过getCellType()方法获取单元格的类型来读取数据。在读取完成后需关闭输入流。

三、Java写入Excel文件

Java写入Excel文件同样需要使用Apache POI组件,在使用之前也需要引入相关依赖。以下示例演示如何创建Excel文件并写入数据:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class WriteExcelDemo {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row titleRow = sheet.createRow(0);
        Cell titleCell = titleRow.createCell(0);
        titleCell.setCellValue("标题");
        Row dataRow = sheet.createRow(1);
        Cell dataCell = dataRow.createCell(0);
        dataCell.setCellValue(new Date().toString());
        OutputStream os = new FileOutputStream("demo.xlsx");
        workbook.write(os);
        os.close();
    }
}

该示例中创建了一个Workbook对象,通过createSheet()方法创建了一个名为Sheet1的Sheet对象,并通过createRow()方法创建了标题行和数据行,再通过setCellValue()方法设置单元格数据,最后通过FileOutputStream将数据写入文件。

四、Java处理Excel文件

Java处理Excel文件还有很多其他的操作,例如合并单元格、设置字体、设置边框等等。以下示例演示了如何将数据导出到Excel文件并设置标题行的样式:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderFormatting;
import org.apache.poi.ss.usermodel.BorderSide;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelDemo {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row titleRow = sheet.createRow(0);
        CellStyle titleStyle = workbook.createCellStyle();
        titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        XSSFFont font = ((XSSFWorkbook) workbook).createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontHeightInPoints((short) 16);
        titleStyle.setFont(font);
        for (int i = 0; i < 3; i++) {
            Cell titleCell = titleRow.createCell(i);
            titleCell.setCellValue("标题" + i);
            titleCell.setCellStyle(titleStyle);
            sheet.setColumnWidth(i, 8000);
        }
        for (int i = 1; i < 4; i++) {
            Row dataRow = sheet.createRow(i);
            for (int j = 0; j < 3; j++) {
                Cell dataCell = dataRow.createCell(j);
                dataCell.setCellValue(new Date().toString());
                sheet.setColumnWidth(j, 6000);
                CellStyle dataStyle = workbook.createCellStyle();
                dataStyle.setBorderTop(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderBottom(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderLeft(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderRight(BorderFormatting.BORDER_THIN);
                dataCell.setCellStyle(dataStyle);
            }
        }
        OutputStream os = new FileOutputStream("demo.xlsx");
        workbook.write(os);
        os.close();
    }
}

该示例中设置了标题行的对齐方式、字体大小、边框样式,并对各列的宽度进行了设置。同时也设置了数据行的边框样式,并在写入文件前关闭了输出流。

五、小结

本文详细介绍了Java读取、写入和处理Excel文件的方式,并给出了相应的代码示例,希望能够对使用Java操作Excel文件的开发者们有所帮助。