如何使用Java如何读写Excel?

如何使用Java如何读写Excel?

参考自狂神说java,视频说的很详细,讲述了POI和EasyExcel两种方式。这里只是简单介绍一下POI的使用。EasyExcel参考官方文档,很详细。EasyExcel官方文档
话不多说,直接上代码:

<!--对应2003Excel文件 即后缀名为xls的文件-->
<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>

<!--2007Excel文件,后缀名为xlsx的文件-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>

注意:上述两种依赖,根据需要操作的Excel文件类型,自行选择即可。第一个依赖对应2003版及2003之前的版本,可以操作xls文件。第二个依赖对应2007版及之后的版本。本文的示例代码以操作xls文件为例。

2.写操作代码示例

  • 数据量很少的情况
public void testWriter() throws IOException {
        //创建一个工作簿workbook---可以包含多个工作表--sheet
        Workbook workbook=new HSSFWorkbook();
        //创建工作表
        Sheet sheet = workbook.createSheet("表一");
        //创建行--0表示第一行
        Row row = sheet.createRow(0);
        //创建单元格,0表示第一列
        Cell cell11 = row.createCell(0);
        cell11.setCellValue("观众人数");
        Cell cell12 = row.createCell(1);
        cell12.setCellValue(666);

        //第二行
        Row row2 = sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间xls");
        Cell cell22 = row2.createCell(1);
        cell22.setCellValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                .format(new Date(System.currentTimeMillis())));
        FileOutputStream out=new FileOutputStream("D:\\JavaStudy\\use-excel\\狂神观众表.xls");
        //将数据写入输出流中
        workbook.write(out);
        out.close();

    }
  • 如果要写的数据很多,用循环即可。
   public  void writeBigDataHSSF() throws IOException {
        long start = System.currentTimeMillis();
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("一张普通的表xls");
        Row row=null;
        Cell cell;

        for (int rowNum = 0; rowNum < 65535; rowNum++) {
            row=sheet.createRow(rowNum);
            for (int i = 0; i < 10; i++) {
                cell=row.createCell(i);
                cell.setCellValue(rowNum+"个人觉得你帅");
            }
        }
        FileOutputStream outputStream=new FileOutputStream("D:\\JavaStudy\\use-excel\\bigdata07.xls");
       workbook.write(outputStream);
       outputStream.close();
       long end=System.currentTimeMillis();
        System.out.println("输出成功,花费的时间为:"+(end-start)/1000);
    }

3.读操作的代码示例

 public  void testReadHSSF() throws IOException {
        InputStream inputStream=new FileInputStream("D:\\JavaStudy\\use-excel\\狂神观众表.xls");
        Workbook workbook=new HSSFWorkbook(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        Row row = null;
        Cell cell=null;
        int rowCount = sheet.getPhysicalNumberOfRows();
        int cellCount=0;
        for (int i = 0; i < rowCount; i++) {
             row = sheet.getRow(i);
             cellCount=row.getPhysicalNumberOfCells();
            for (int j = 0; j < cellCount; j++) {
                cell=row.getCell(j);
                //获取单元格中的数据类型
                CellType cellType = cell.getCellType();
                switch (cellType){
                    case STRING:{
                        System.out.print(cell.getStringCellValue());
                        break;}
                    case NUMERIC:{
                        System.out.print(cell.getNumericCellValue());
                        break;}
                    default:
                        System.out.println("default msg");
                        break;
                }
            }
            System.out.println();
        }
        System.out.println();


        inputStream.close();
    }
   

4.Excel单元格相关操作

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.awt.Color;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelTest {
    public static void main(String[] args) {
        //创建工作簿
        XSSFWorkbook workbook=new XSSFWorkbook();
        //设置单元格样式
        XSSFCellStyle cellStyle = workbook.createCellStyle();//创建一个单元格样式对象
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//设置水平对齐方式,这里是 居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//设置垂直对齐
        //设置单元格的背景颜色,其中setFillPattern(),即:设置填充图案。这个必须设置,因为必须先有图案,才会有前景和背景的概念。。。
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//参数是一个枚举类型,此类型只会展示前景颜色,故而不用设置背景颜色
        cellStyle.setFillBackgroundColor(new XSSFColor(Color.BLUE,new DefaultIndexedColorMap()));//因为上一行的配置,此行配置无效,可删
        cellStyle.setFillForegroundColor(new XSSFColor(Color.YELLOW,new DefaultIndexedColorMap()));//前景颜色为黄色
        //字体设置
        Font font=workbook.createFont();//注意:字体不要自己去 new HSSFFont() 或者 new XSSFFont(),要用workbook,这样才是给当前工作簿设置字体
        font.setBold(true);//设置是否加粗
        font.setFontName("楷体");//这里采用楷体
        font.setFontHeightInPoints((short)16);//设置字体的大小 与这个相似的方法有setFontHeight(),该方法设置的大小要除以20
        font.setColor(IndexedColors.RED.index);// 设置颜色
        cellStyle.setFont(font);//将字体添加到单元格样式中去,因为我们要设置的就是单元格的字体
        //创建工作表
        XSSFSheet sheet = workbook.createSheet("测试样式2");
        sheet.addMergedRegion(new CellRangeAddress(0,0,1,2));// 合并第2、3个单元格,此操作不属于单元格内的操作,不需要添加到cellStyle中去
        XSSFRow row = sheet.createRow(0);
        //根据行对象row 创建以下四个单元格对象
        XSSFCell cell0 = row.createCell(0);
        XSSFCell cell1 = row.createCell(1);
        XSSFCell cell2 = row.createCell(2);
        XSSFCell cell3 = row.createCell(3);
        //给单元格对象设值
        cell0.setCellStyle(cellStyle);//设置样式给cell0 这个单元格
        cell0.setCellValue(1111);
        cell1.setCellStyle(cellStyle); //cell1 设置样式
        cell1.setCellValue("张三"); //cell1 cell2 合并,因此只会显示前面的值,即:cell1的值--张三 ,cell2的值 不会展示
        cell2.setCellValue("男");
        cell3.setCellValue("西双版纳");

        try {
            //创建一个文件输出流,参数是:Excel文件的输出地址
            FileOutputStream fos = new FileOutputStream("D:" + File.separator + "upload" + File.separator + "test.xlsx");
            workbook.write(fos);//对象写入流中
            fos.close();//关闭流
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("转化成功");
    }
}

结果如下:
在这里插入图片描述

首先
总结:

  • Workbook—一个接口,对应Excel的工作簿
  • Workbook有如下HSSFWorkbook(操作xls文件)、XSSFWorkbook(操作xlsx文件)、SXSSFWorkbook(操作xlsx,是XSSFWorkbook的增强版)等实现类
  • Sheet代表工作表,一个工作簿有很多个工作表
  • Row代表工作表中的一个行
  • Cell代表单元格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值