poi关于excel文件的操作

Java 使用 POI 对 Excel文件 进行读写操作 Java 使用 POI 对 Excel文件进行读写操作 一、背景 目前正在做一个问卷功能模块,收集完问卷信息后,需要将数据库中的数据导出到Excel数据表中进行留存,因此就学习了在Java中如何对Excel表进行读写操作。经过了解后选择了 POI 技... 阅读详情

poi关于excel文件的操作

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 操作Excel表格的功能类
 */
public class ExcelReader {
	
    private Workbook wb;
    private Sheet sheet;
    private Row row;
    private boolean isXssf = false;
	public ExcelReader(InputStream is) {
    	try {
			wb = WorkbookFactory.create(is);
			if (wb instanceof XSSFWorkbook) {
				isXssf = true; 
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InvalidFormatException e) {
			e.printStackTrace();
		}
	}
    /**
     * 读取Excel表格表头的内容
     */
    public String[] readExcelTitle() {
        sheet = wb.getSheetAt(0);
        row = sheet.getRow(0);
        // 标题总列数
        int colNum = row.getPhysicalNumberOfCells();
        String[] title = new String[colNum];
        for (int i = 0,length=colNum; i < length; i++) {
            //title[i] = getStringCellValue(row.getCell((short) i));
            title[i] = (String) getCellFormatValue1(row.getCell((short) i));
           // String title1=sheet.getRow(0).getCell(1).toString();
        }
        sheet=wb.getSheetAt(0);
        return title;
    }

    /**
     * 读取Excel数据内容
     */
    public Map<Integer, String> readExcelContent() {
        Map<Integer, String> content = new HashMap<Integer, String>();
        String str = "";
        sheet = wb.getSheetAt(0);
        int rowNum = sheet.getLastRowNum();
        row = sheet.getRow(0);
        int colNum = row.getPhysicalNumberOfCells();
        // 正文内容应该从第二行开始,第一行为表头的标题
        for (int i = 1; i <= rowNum; i++) {
            row = sheet.getRow(i);
            int j = 0;
            while (j < colNum) {
                str += getCellFormatValue1(row.getCell((short) j)) + "    ";
                j++;
            }
            content.put(i, str);
            str = "";
        }
        return content;
    }

    /**
     * 获取单元格数据内容为字符串类型的数据
     */
    private String getStringCellValue(HSSFCell cell) {
        String strCell = "";
        switch (cell.getCellType()) {
	        case HSSFCell.CELL_TYPE_STRING:
	            strCell = cell.getStringCellValue();
	            break;
	        case HSSFCell.CELL_TYPE_NUMERIC:
	            strCell = String.valueOf(cell.getNumericCellValue());
	            break;
	        case HSSFCell.CELL_TYPE_BOOLEAN:
	            strCell = String.valueOf(cell.getBooleanCellValue());
	            break;
	        case HSSFCell.CELL_TYPE_BLANK:
	            strCell = "";
	            break;
	        default:
	            strCell = "";
	            break;
        }
        if (strCell.equals("") || strCell == null) {
            return "";
        }
        if (cell == null) {
            return "";
        }
        return strCell;
    }

    /**
     * 获取单元格数据内容为日期类型的数据
     */
    private String getDateCellValue(HSSFCell cell) {
        String result = "";
        try {
            int cellType = cell.getCellType();
            if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
                Date date = cell.getDateCellValue();
                result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
                        + "-" + date.getDate();
            } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
                String date = getStringCellValue(cell);
                result = date.replaceAll("[年月]", "-").replace("日", "").trim();
            } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
                result = "";
            }
        } catch (Exception e) {
            System.out.println("日期格式不正确!");
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 根据HSSFCell类型设置数据
     */
    private String getCellFormatValue(HSSFCell cell) {
        String cellvalue = "";
        if (cell != null) {
            switch (cell.getCellType()) {
	            case HSSFCell.CELL_TYPE_NUMERIC:
	            case HSSFCell.CELL_TYPE_FORMULA: {
	                // 判断当前的cell是否为Date
	                if (HSSFDateUtil.isCellDateFormatted(cell)) {
	                    //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
	                    //cellvalue = cell.getDateCellValue().toLocaleString();
	                    //方法2:这样子的data格式是不带带时分秒的:2011-10-12
	                    Date date = cell.getDateCellValue();
	                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	                    cellvalue = sdf.format(date);
	                }
	                // 如果是纯数字
	                else {
	                    cellvalue = String.valueOf(cell.getNumericCellValue());
	                }
	                break;
	            }
	            // 如果当前Cell的Type为STRIN
	            case HSSFCell.CELL_TYPE_STRING:
	                cellvalue = cell.getRichStringCellValue().getString();
	                break;
	            // 默认的Cell值
	            default:
	                cellvalue = " ";
            }
        } else {
            cellvalue = "";
        }
        return cellvalue;

    }
    public Object getCellFormatValue1(Cell cell) {
 	   Object cellvalue = null;
         if (cell != null) {
             switch (cell.getCellType()) {
             	case Cell.CELL_TYPE_NUMERIC:{
             		cellvalue = cell.getNumericCellValue();
             		String type = (String)getCellFormatValue1(cell.getRow().getCell(cell.getColumnIndex()+1));
             		if("Date".equals(type)){
             			cellvalue = cell.getDateCellValue();
             		}else if("String".equals(type)){
             			Double value = Double.parseDouble(cellvalue.toString());
             			cellvalue=value.longValue()+"";
             		}else if("Long".equals(type)){
             			cellvalue = cell.getNumericCellValue()+"";
             			
             		}else if("Double".equals(type)){
             			cellvalue = cell.getNumericCellValue()+"";
             			
             		}
             		break;
             	}
             	case Cell.CELL_TYPE_FORMULA:{
             		FormulaEvaluator evaluator = null;
             		if(isXssf){
             			evaluator = new XSSFFormulaEvaluator((XSSFWorkbook)cell.getRow().getSheet().getWorkbook());
             		} else {
             			evaluator = new HSSFFormulaEvaluator((HSSFWorkbook)cell.getRow().getSheet().getWorkbook());
             		}
             		cell.setCellFormula(cell.getCellFormula());
             	    Cell cell1 = evaluator.evaluateInCell(cell);
             	    cellvalue = getCellFormatValue1(cell1);
             		break;
             	}
             	case Cell.CELL_TYPE_STRING:{
             		cellvalue = cell.getRichStringCellValue().getString();
    //         		Object  obj = getCellFormatValue(cell.getRow().getCell(cell.getColumnIndex()+1));
  //           		String type = (String)obj;
//             		if( "0".equals(cellvalue) && "String".equals(type)){
//             			cellvalue = "";
//             		}
             		break;
             	}
             	default:
             	return null;
            }
         } 
         return cellvalue;
     }
    public static void main(String[] args) {
        try {
            InputStream is = new FileInputStream("H:\\DESKTOP\\区域科室.xls");
            ExcelReader excelReader = new ExcelReader(is);
            String[] title = excelReader.readExcelTitle();
            System.out.println("获得Excel表格的标题:");
            for (String s : title) {
                System.out.print(s + " ");
            }
            System.out.println("--------------");
            Map<Integer, String> map = excelReader.readExcelContent();
            System.out.println("获得Excel表格的内容:");
            for (int i = 1; i <= map.size(); i++) {
                System.out.println(map.get(i));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}


Java操作Excel之POI:java读写excel文件以及打印设置 Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0.1的jar包,其他版本不确保没有错误。 HSSFCellStyle.VERTICAL_CENTER没有定义的解决办法参考https://blog.youkuaiyun.com/weixin_43209201/... 阅读详情

相关推荐

使用Apache POI实现Java操作Office文件:从Excel、Word到PPT模板写入

Apache POI为Java开发者提供了强大的Office文件操作能力,无论是基础的数据写入,还是复杂的模板定制,都能通过灵活组合API实现。掌握POI的核心组件(XSSF/XWPF/XSLF)和元素定位技巧,可高效解决企业级开发中的文档自动化需求。延伸思考:结合POI-TL等工具可实现更复杂的Word模板引擎,而面对超大数据量Excel处理时,需合理选择HSSF(旧格式)、XSSF(新格式)或SXSSF(流式)方案。建议在实际项目中根据文件格式、数据量和功能复杂度选择最佳实现方式。

免责声明:本资料部分整理自合法网络公开渠道,部分为个人学习积累成果,仅作学习参考、学术交流使用。所收费用仅为资料搜集整理的时间劳务酬劳。版权归原作者及出版方所有,本人不承担相关版权及内容法律责任,若有侵权请告知,即刻删除处理。 2550

poi判断excel单元格内容是否为日期

通过cell.getCellType()拿到单元格的数据类型,CellType是一个枚举类型详情如下,能够看到并没有日期类型的code,poi读取到的日期类型的单元格时会认为是NUMERIC类型,然后,poi提供了HSSFDateUtil.isCellDateFormatted(cell)方法来判断单元格里面的数据是否为日期类型。所以,要判断是否为时间类型的单元格,按如期代码即可。

lizsy的博客 2986

Java中Excel文件操作的POI工具类实现

Apache POI是Java编程语言中用于处理Microsoft Office文档的一个开源库,它提供了读取和写入Microsoft Office格式文件的API。POI之所以受到广泛欢迎,是因为其提供了丰富的功能,从简单的XLS文件到复杂的OOXML格式文件,POI都能高效处理。在Excel中,数字格式不仅仅是用来表示数字,还可以用来显示日期、时间、货币等信息。通过自定义数字格式,开发者可以扩展POI的单元格样式功能,以便在Excel文档中显示这些复杂的格式。// 示例代码:设置自定义数字格式。

weixin_36474966的博客 1017

POI处理Excel中的日期类型的单元格

正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式 if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {          if (HSSFDateUtil.isCellDateFormatted(cell)) {            Date d = cell.getDateCellVa

1592

Apache POI:Java操作Excel文件的利器

Apache POI是一个开源的Java库,广泛应用于读取和修改Microsoft Office格式的文件,尤其是Excel、Word和PowerPoint。它是利用Java处理Microsoft Office文档最流行的库之一,使得在Java应用程序中操作这些文件变得可行。Apache POI提供了一系列的API,允许开发者创建、修改、显示和打印Microsoft Office文档。对于Excel文件,POI支持从Excel 97版本到最新版的所有格式。

weixin_30218749的博客 1357

Java POI实现Excel文件操作指南

在现代软件开发中,处理Excel文件是一种常见需求,尤其是在数据处理和报表生成方面。Java POI是一个开源的Java库,它提供了操作Microsoft Office格式文件的能力,特别是Excel。通过Java POI,开发者可以在Java应用程序中实现对Excel文件的读取、创建、修改和写入。这一章节,我们将从宏观角度介绍Java POI库,为之后深入学习其体系结构和功能打下基础。我们会探讨Java POI处理Excel的核心优势,以及为什么它在处理Office文档中成为开发者的首选。

weixin_32047493的博客 1094

Java POI读取Excel文件中时间日期(date)和数据的方法及示例代码

Java中,使用POI读取Excel文件中时间日期及其它格式的数据的方法,以及相关的示例代码。

ll_sion的博客 6321

基于C#的软PLC梯形图编辑器开发实战

本文详细介绍了基于C#开发软PLC梯形图编辑器的实战过程。文章从核心数据结构设计入手,阐述了如何利用C#的面向对象特性构建梯形图元素模型,并实现了图形编辑、指令表输入、逻辑连接拓扑重建等关键功能。重点剖析了模拟PLC执行引擎的扫描周期与能流传递算法,让梯形图逻辑在PC上“活”起来。最后探讨了定时器指令实现、性能优化及项目集成等进阶内容,为工业自动化软件集成提供了灵活高效的解决方案。

weixin_28314575的博客 404

获取Excel单元格存储日期格式数据

获取Excel单元格存储日期格式数据 在使用java获取Excel单元格中数据时,如果单元格数据为日期格式,直接使用cell.getValue()获取单元格的值,获取到的值为一个数字乱码,可以使用以下方法进行数据格式的转换后,再进行数据的获取。 public String dealCellDate(XssfCell cell){ Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat("

origin_cx的博客 1393

数控弯管机xyz转换ybc的算法_数控弯管机技术的更新和应用.pdf

您所在位置:网站首页 > 海量文档&nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械/模具设计数控弯管机技术的更新和应用.pdf3页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所...

weixin_31493101的博客 1521

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4376

POI Excel导入方法 ,及Date类型的获取方法

public R uploadFile(MultipartFile file){ StringBuilder sb = new StringBuilder(); try{ List<Equipment> equipments = this.importBaseExcel(file); int trueNum = 1; if(equipments != null && equipments.size()>0){ for(Equipment .

monody666的博客 1536

01 高等数学 上下册知识点总结

极限与连续 8个等价无穷小 8个常用泰勒公式 高数复习——多元函数微分学 一、概念 一元函数: 可微<=>可导 △y=A△x+o(△x)dy=AdxA=f′(x)\triangle y=A\triangle x+o(\triangle x)\\dy=Adx\\A=f'(x)△y=A△x+o(△x)dy=AdxA=f′(x) 多元函数: 可微=>可导(可导指两个偏导数存在,反之不成立) 可微=>连续(反之不成立) △z=A△x+B△y+o(p)dz=Adx+BdyA=δzδxdx

qq_44292038的博客 1万+

使用 Apache POI 操作 Excel 文件

有时我们需要再项目中读写 Excel 表格,这时可以使用 Apache POI 库来完成。Apache POI 是由 Apache 提供的 Java API,可以读取和写入 Microsoft Office 系列文件,包括 Excel、Word 和 PowerPoint。本文将介绍如何使用 Apache POI 实现对 Excel 的操作。

damnItHUA的博客 2007

从零到一:基于Matlab的二阶系统时域性能指标计算与可视化实战

本文提供了一份基于Matlab的二阶系统时域性能指标计算与可视化实战指南。通过详细的代码示例,手把手教你如何利用Matlab计算超调量、调节时间等关键指标,并绘制阶跃响应曲线进行可视化分析,帮助控制工程学习者和从业者快速掌握系统性能评估方法。

weixin_29096377的博客 269

ROCm rocr-libhsakmt分析系列9-3: queue的内核创建流程

KFD队列是用户空间与GPU通信的核心机制,通过多种队列类型(计算、DMA、调试等)实现命令流管理。核心数据结构包括描述队列属性的queue_properties、内核调度对象queue、进程级管理器process_queue_manager,以及跨进程设备的qcm_process_device等。这些结构通过ring buffer、doorbell机制和MQD硬件描述符协同工作,支持队列全生命周期管理、资源调度、异常处理和上下文保存/恢复功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2129

EXCEL文件操作之POI demo

可以帮助我们读取外部excel文件 或者把java程序中的数据写入到excel文件中 基本上在excel中可以使用的操作在POI中都可以操作 public class POIdemo { public static void main(String[] args) throws FileNotFoundException, IOException { HSSFWorkbook workb...

weixin_40695328的博客 294

LPDDR6 tdbR2dbR_L cross row技术探讨

LPDDR6 tdbR2dbR_L cross row技术探讨

zilan23的博客 47

JAVA操作Excel文件: Apache POI

JAVA操作Excel

SunnerChen的博客 1万+

筑牢上线前安全防线:安全运维服务中的检测实践与深化

在日益严峻的网络安全形势下,将漏洞扫描、渗透测试和基线核查有机结合的上线前安全检测,是保障信息系统安全、稳定、合规上线的基石。通过专业、严谨、协作的检测实践,乙方安全团队能够有效协助甲方在系统生命周期的起点就构筑起坚固的安全防线,为业务的顺利开展和用户的信任保驾护航,真正实现“安全赋能业务”的价值。这道“守门人”的职责,是数字时代企业稳健前行的不可或缺的保障。专业的安全服务提供商(乙方)需要与甲方(系统所有者/运营方)建立紧密、透明、协作的伙伴关系,实现风险的闭环管理,甚至推动甲方安全能力的长期提升。

huluang的专栏 183

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java—使用POI操作excel文件操作Excel读取案例

做苍穹外卖操作excel提前用的一个小案例

新人小白,请多指教 283

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Apache POI操作Excel文件

Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 maven坐标: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14<

好好学习 274

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java 操作 poi 解析、读取 Excel 文件

生成Excel 我这里是用的POI 的jar包

独行浪子 4174

快速掌握POI操作Excel文件的使用

简介: POI(Apache POI) Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。我们都知道Java是面向对象的思想的一门语言,使用POI不需要想得太过复杂,就是面向对象的思想去创建对象操作Excel文件。 主要使用场景: 将用户的信息导出为Excel表格; 将Excel表格的信息录入到网站数据库里,大大减轻网站录入量。 开发中经常会用到对Excel表格的导入和导出,操作Excel目前比较流行的

GG1bob的博客 359

基于POI框架操作Excel文件

前言 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI的结构如下: HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写Microsoft Word格式档案的功能。 HSLF - 提供读写Microsoft PowerPoint格式档案的功能。 HDGF - 提供读写Microsof

江南好 544

java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件

工作中临时需要对各种订单量进行简单的统计分析,为了方便简单学习了apache poi 对 xlsx 文件的基本操作,简单记录1. 引包org.apache.poipoi-ooxml4.1.22. 创建文件public static void main(String[] args) {// 创建文件,创建工作薄File xlsFile = new File("C:/demo/demo.xlsx");...

weixin_29196891的博客 433
上一篇: dom4j对于xml文件的一些操作
下一篇: spring配置事务application.xml
farmering
博客等级 码龄15年 18粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值