首页 > 其他分享 >如何使用XSSFWorkbook读取文本薄?

如何使用XSSFWorkbook读取文本薄?

时间:2024-04-19 19:12:57浏览次数:12  
标签:文件 dataFile return 读取 cell dataRow new 文本 XSSFWorkbook

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18146625
出自【进步*于辰的博客

1、文件兼容类型。

// 兼容文件后缀列表
private static final String FILE_TYPE;
static {
    FILE_TYPE = ".xls/.xlsx/.csv";
}

2、文件检查。

/**
 * 文件有效性检查
 *
 * @param dataFile 数据文件
 * @return  检查结果
 */
public static void checkFile(File dataFile) throws Exception {
    // 文件有效性判断
    if (!dataFile.exists()) {
        throw new Exception("文件不存在");
    }
    if (dataFile.isDirectory()) {
        throw new Exception("不是文件");
    }

    // 检查文件后缀
    String path = dataFile.getAbsolutePath();
    String suffix = path.substring(path.lastIndexOf("."));
    if (FILE_TYPE.indexOf(suffix) == -1) {
        throw new Exception("不是文本薄文件");
    }
}

3、读取文本薄。

/**
 * 读取 excelPath所指的excel文件
 *
 * @param excelPath excel文件路径
 * @param sheetIndex 文本簿索引
 * @return
 */
public static List<Map<String, String>> readExcel(String excelPath, int sheetIndex) throws Exception {
    List<Map<String, String>> dataList = new ArrayList<>();

    File dataFile = new File(excelPath);
    // 检查文件
    checkFile(dataFile);

    XSSFWorkbook workbook = new XSSFWorkbook(dataFile);// 获取数据到工作簿
    if (sheetIndex < 0 || sheetIndex >= workbook.getNumberOfSheets())
        throw new Exception("此文本薄条目不存在");
    XSSFSheet sheet = workbook.getSheetAt(sheetIndex);// 获取第n张表

    XSSFRow titleRow = sheet.getRow(0);// 标题行
    for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {// 数据从第二行开始
        Map<String, String> dataMap = new HashMap<>();

        XSSFRow dataRow = sheet.getRow(i);// 数据行
        if (dataRow == null) // 排除空行(当当行所有列全为空时,此行不存在)
            continue;
        if (isValidRow(dataRow)) // 排除无效行
            continue;

        for (int j = 0; j < dataRow.getPhysicalNumberOfCells(); j++) {
            XSSFCell titleCell = titleRow.getCell(j);// 表头
            XSSFCell dataCell = dataRow.getCell(j);// 数据
            dataMap.put(titleCell.getStringCellValue(), getStringCellValue(dataCell));
        }
        dataList.add(dataMap);
    }

    return dataList;
}

4、判断是否是无效行。

/**
 * 判断数据行是否有效
 *
 * @param dataRow 数据行
 * @return
 */
public static boolean isValidRow (XSSFRow dataRow) {
    boolean isValid = true;

    // 若列无内容,则此列不存在
    XSSFCell cell0 = dataRow.getCell(0);// 若第一列有内容,视为有效
    if (cell0 != null)
        isValid = false;

    return isValid;
}

5、获取单元格数据。

/**
 * 根据cell值类型获取值
 *
 * @param cell 文档列
 * @return
 */
public static String getStringCellValue(XSSFCell cell) {
    if (cell == null) {
        return "";
    }
    if (cell.getCellType() == CellType.NUMERIC) {
        return cell.getNumericCellValue() + "";
    } else {
        return cell.getStringCellValue();
    }
}

本文完结。

标签:文件,dataFile,return,读取,cell,dataRow,new,文本,XSSFWorkbook
From: https://www.cnblogs.com/cnb-yuchen/p/18146625

相关文章

  • reg2inf.exe 是一个 Windows 实用工具,用于将 Windows 注册表文件 (.reg) 转换为 Windo
    reg2inf.exe是一个Windows实用工具,用于将Windows注册表文件(.reg)转换为WindowsINF文件(.inf)。INF文件是一种文本文件,通常用于在Windows操作系统中安装设备驱动程序和配置设置。使用reg2inf.exe工具可以将注册表中的配置转换为INF格式,从而可以在Windows......
  • wangeditor5富文本中的图片点击放大
    放大图片组件img-preview.vue<template> <divclass="preview"@click="onClick"@keydown="onKeydown"> <divclass="preview-img"> <img:src="src"alt/> </div> </div>&l......
  • C语言读取通达信数据
    因为无法事先知道数据的行数,只能通过计算得到,所以数组创建只能通过动态分配内存。一个解决方案是,我只想读取最后1000行,那么数组就可以直接定义大小为1000,然后把文件指针定位到倒数1000行。#include<stdio.h>#include<stdlib.h>structStock{intdate;floatopen......
  • pandas读取sql文件出现:告警UserWarning: pandas only supports SQLAlchemy connectabl
    ​错误原因:导入sql的方式更新了解决方法:importpandasaspdfromsqlalchemyimportcreate_engineMYSQL_HOST='localhost'MYSQL_PORT='3306'MYSQL_USER='root'MYSQL_PASSWORD='123456'MYSQL_DB='cldk_data'engine=......
  • java使用Workbook workbook = new XSSFWorkbook(inputStream);导出数据频繁GC
    由于xlsx底层使用xml存储,占用内存会比较大,官方也意识到这个问题,在3.8版本之后,提供了SXSSFWorkbook来优化写性能原来代码Workbookworkbook= newXSSFWorkbook(inputStream);优化后代码Workbookworkbook= newSXSSFWorkbook(newXSSFWorkbook(inputStream));此处有坑,请往......
  • Python Flask+Pandas读取excel显示到html网页: CSS控制表格样式、表头文字居中
    前言全局说明CSS控制表格样式一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563Pandas安装https://www.cnblogs.com/wutou/p/17811839.htmlPandas官方API说明https://pand......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • delphi中Memo1下拉ListBox1选择完成文本填充
    delphi中Memo1下拉ListBox2选择完成文本填充拖一个Memo1下拉ListBox2到界面上,假设ListBox2,里已加载列名最终效果:Memo1里输入.点号,带出ListBox2,选择好列名,回车,将点号和列名输入到Memo1原位置 ......
  • Python读取和生成excel文件
    在Python中,你可以使用第三方库来读取和生成Excel文件。其中,最常用的库是pandas/openpyxl和xlwt/xlrd。Pandas安装Pandas库:pipinstallpandas要读取Excel文件,你可以使用pandas的read_excel函数。下面是一个示例代码,演示了如何使用pandas读取Excel文件中的数据:importpan......
  • java多线程 读取list--动态读取list
    java多线程读取list--动态读取list的案例 本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情......