共享单车之数据存储-获取工作簿中的数据

news2024/10/6 10:37:07

第1关:获取工作簿中的数据

任务描述

本关任务:获取data.xls文件中的数据。

相关知识

获取工作簿中的信息,我们可以使用Java POIPOI是一个提供APIJava程序对Microsoft Office格式档案读和写的功能)提供的Workbook类来操作。

为了完成本关任务,你需要掌握:如何获取Wookbook的数据。

读取一个Wookbook中数据

读取工作簿中的内容大致分为下列几个步骤:

  • 使用WorkbookFactory新建一个工作簿(Wookbook
 
  1. InputStream resourceAsStream = SaveData.class.getClassLoader().getResourceAsStream("data.xls");//通过类加载器获取本地文件
  2. Workbook workbook = WorkbookFactory.create(resourceAsStream);
  • 获取给定索引处的Sheet对象。
 
  1. Sheet sheet = workbook.getSheetAt(0);//拿到Wookbook中的第一个Sheet

说明:一个Wookbook中可能存在多个Sheet,因此需要指定索引,如下图:

  • 通过Sheet对象获取指定行和行内单元格。
 
  1. Row row = sheet.getRow(1);//首行一般为说明,因此我们直接从第一行进行获取
  2. Cell cell = row.getCell(0);//获取当前行第一个单元格
  • 获取单元格中的值。

上图观察表结构数据trip_id为数字类型,时间为字符类型,在获取数据时我们必须遵循类型规则,对应获取。

 
  1. //1.获取第一行中trip_id列的第一个值(33404951)
  2. double numericCellValue = row.getCell(0).getNumericCellValue();
  3. DecimalFormat formatter = new DecimalFormat("########");//一个#表示一个数字
  4. String trip_id =formatter.format(numericCellValue);//我们需要使用DecimalFormat将数据格式化
  5. //2.获取第一行中开始时间单元格的值
  6. FastDateFormat instance = FastDateFormat.getInstance("MM/dd/yyyy HH:mm");
  7. String beginTimeValue = row.getCell(1).getStringCellValue();
  8. //为了方便后面的数据分析计算我们将需要将时间格式转为时间戳
  9. long begintime = instance.parse(beginTimeValue).getTime();
  10. //3.获取第一行开始经度单元格的值
  11. double start_longitude = row.getCell(7).getNumericCellValue();
  12. DecimalFormat formatter = new DecimalFormat("###.######");//#表示一个数字,不包括0
  13. String longitude = formatter.format(start_longitude);
  • 获取当前sheet中的物理定义行数
  1. //为了完整的将整个Sheet中的数据全部存储,我们需要知道整个Sheet中有多少条数据,然后对其遍历
  2. int rows = sheet.getPhysicalNumberOfRows();

编程要求

在右侧编辑器Begin-End中补充代码,获取data.xls文件中的数据,具体获取以下数据并将结果打印:trip_id、开始时间、结束经度、车辆id

文件数据格式如下:

| trip_id | 开始时间 | 结束时间 | 车辆id | 出发地 | 目的地 | 所在城市 | 开始经度 | 开始纬度 | 结束经度 | 结束纬度 | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | |33404951 | 7/1/2017 0:09| 7/1/2017 0:45 | 5996 | 韩庄村北782米 |韩庄村北782米 |河北省保定市雄县 |39.043732| 116.260139 |39.043732 | 116.260139 | |33463211 | 7/1/2017 1:01| 7/1/2017 11:13 | 6342 | 韩庄村北782米 | | |39.043732| 116.260139 |NA | NA | |33415440 | 7/1/2017 1:59| 7/1/2017 2:12 | 6273 | 擎天矿用材料有限公司北609米 |河北省保定市雄县G45(大广高速) |河北省保定市雄县G45(大广高速) |39.041691|116.235352 |39.044701| 116.252441|

注意:表中有非法数据,我们在获取时为了避免出错或者获取到空的数据,可以使用try-catch将其抛出。

测试说明

平台会对你编写的代码进行测试:

测试输入:无; 预期输出: 骑行id:33404951,开始时间:1498838940000,车辆id:5996,结束经度:39.043732 骑行id:33415440,开始时间:1498845540000,车辆id:6273,结束经度:39.044701

完成代码:

package com.educoder.savedata;

import java.io.InputStream;
import java.text.DecimalFormat;
import org.apache.commons.lang3.time.FastDateFormat;
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.ss.usermodel.WorkbookFactory;


public class SaveWookbook {

	public static void main(String[] args) throws Exception {
        /**********     Begin    **********/
		//1.通过类加载器获取本地文件并新建一个工作簿
        InputStream resourceAsStream = SaveData.class.getClassLoader().getResourceAsStream("data.xls");
        Workbook workbook = WorkbookFactory.create(resourceAsStream);
        
        //2.拿到工作簿中第一个Sheet
        Sheet sheet = workbook.getSheetAt(0);
        
        //3.获取当前Sheet中的行数
        int rows = sheet.getPhysicalNumberOfRows();
        
        //4.对所有有效数据进行遍历并输出(期间无效数据通过异常捕获方式清除)
        for(int n=1;n<rows;n++)
        {
            Row row = sheet.getRow(n);
            //通过异常方式清除格式不准确、数据不存在的无效行
            try{
                DecimalFormat formatter1 = new DecimalFormat("########");
                String trip_id = formatter1.format(row.getCell(0).getNumericCellValue());
                //开始时间
                FastDateFormat instance = FastDateFormat.getInstance("MM/dd/yyyyHH:mm");
                String beginTimeValue = row.getCell(1).getStringCellValue();
                long begintime = instance.parse(beginTimeValue).getTime();
                //车辆id
                int car_id = (int)row.getCell(3).getNumericCellValue();
                //结束经度
                double start_longitude = row.getCell(9).getNumericCellValue();
                DecimalFormat formatter2 = new DecimalFormat("###.######");
                String longitude = formatter2.format(start_longitude);
                System.out.println("骑行id:"+trip_id+",开始时间:"+begintime+",车辆id:"+car_id+",结束经度:"+longitude);
            }catch(Exception e){

            }
        }
        
        
       /******** **    End    ******* ***/
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二十三种设计模式第七篇--适配器模式

适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于 结构型模式&#xff0c;它结合了两个独立接口的功能。这种模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能。 我们生活中…

注意!ChatGPT的Plus账号也会被封禁

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 最近经常看到有人丢个截图&#xff0c;然后悲伤地说&#xff0c;ChatGPT账号被封了。 这不是账号被封&#xff0c;而是所用的代理节点被OpenAI封了&#xff0c;换个节点即可。 这个截图才是账号真正被封的提示&…

LeetCode 1080. 根到叶路径上的不足节点

【LetMeFly】1080.根到叶路径上的不足节点 力扣题目链接&#xff1a;https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths/ 给定一棵二叉树的根 root&#xff0c;请你考虑它所有 从根到叶的路径&#xff1a;从根到任何叶的路径。&#xff08;所谓一个叶子…

使用GPT-4.0编写量化交易策略:方法、案例与参数优化

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 随着人工智能的发展&#xff0c;GPT-4.0已经成为量化交易策略编写的强大工具。在这篇文章中&#xff0c;我们将探讨如何使用GPT-4.0编写量化交易策略&#xff0c;并提供一个实际的案例。我…

Maven基础学习---5、其他核心概念

1、生命周期 1、作用 为了让构建过程自动化完成&#xff0c;Maven设定了三个生命周期。生命周期中的每一个环节对应构建过程中的一个操作。 2、三个生命周期 3、特点 前面三个生命周期彼此都是独立的在任何一个生命周期内部&#xff0c;执行任何一个具体环节的操作&#xff…

ElasticSearch 的DSL查询文档

一、DSL查询文档 本章目标 文本检索&#xff1a;match_all、match、multi_match精确查询&#xff1a;term、range地理坐标查询&#xff1a;geo_distance复合查询&#xff1a;function_score、bool 1. 说明 查询语法&#xff1a; GET /索引库名/_search {"query": {}…

基于C++实现房贷计算器的设计

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本次项目的要求是完成一个房贷计算器的设计&#xff0c;实现商业贷款、公积金贷款和组合贷款的利息计算三种功能。并且使用Qt或其他的界面库设计人机交互界面&#xff0c;要求界面友好方便使用。并且必须使用面向对象的思想进…

NSS周常刷密码(1)

感觉没怎么做密码,就每周上nss随便做点 稍微难点的会分析 [SWPU 2020]happy import gmpy2 from Crypto.Util.number import * import z3c 0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9e e 0x872a335 #q q*p^3 128536731745208998078944182958039785532190189…

ChatGPT 4.0大升级,能替代留学中介吗?

ChatGPT4.0发布了&#xff01; 在之前轰动世界版本的基础上又有了大幅度升级&#xff0c;根据官方介绍&#xff0c;它的输入可以是文字&#xff08;上限2.5万字&#xff09;还可以是图像&#xff0c;是一个超大的多模态模型。 越来越多的人开始好奇这个东西到底能用来做什么&…

CMake Practice 学习笔记三---建立动静态库

任务&#xff1a; 建立一个静态库和动态库&#xff0c;提供HelloFunc函数供其他程序编程使用&#xff0c;HelloFunc向终端输出Hello World字符串。安装头文件与共享库。 1、准备工作 在/backup/cmake目录建立t3目录 mkdir t3建立共享库 cd t3 mkdir lib在t3目录下建立CMak…

【SCI征稿】CCF推荐|Springer旗下2区无线网络类SCI, 2个月左右录用~

一、【期刊简介】 JCR2区无线网络类SCI 【期刊概况】IF: 2.0-3.0&#xff0c;JCR2/3区&#xff0c;中科院4区&#xff1b; 【终审周期】走期刊系统&#xff0c;3个月左右录用; 【检索情况】SCI&EI双检&#xff1b; 【数据库收录年份】1967年&#xff1b; 【自引率】11…

基于最小二乘法的直线拟合原理及C++实现

“ 在数据分析的时候&#xff0c;需要尽可能地排除噪声干扰&#xff0c;以便分析出数据的本质规律。排除噪声干扰的常用手段之一是数据拟合&#xff0c;以直线、抛物线、多次曲线等为数据模型&#xff0c;对数据进行拟合。” 本文我们主要讲基于最小二乘法的直线拟合原理&#…

企业选择CRM系统的三个好处

跟随着全面放开的脚步&#xff0c;国内经济正在强势复苏&#xff0c;每家企业都在抢订单、找客户&#xff0c;想要提高企业竞争力还是要借助CRM客户管理系统&#xff0c;CRM系统客户信息管理的价值有哪些&#xff1f;从哪些方面助力企业发展。 一、高效率的管理线索 1.便捷录…

如何通过软件定义方案轻松实现卫星通信干扰测试?

GNSS信号本身的脆弱性和卫星信号传输中面临的风险一直被人们所关注着&#xff0c;例如干扰和欺骗&#xff0c;而GNSS接收设备也普遍缺乏对各种干扰的抵抗性与稳定性。根据GPS的创始架构师Brad Parkinson的说法&#xff0c;任何GNSS星座正变得越来越容易受到蓄意信号干扰或高级欺…

测试用例+自动化测试 —— 博客系统

目录 一、设计测试用例 二、自动化测试 1、导入依赖 1、登录页面 3、列表页面 4、详情页面 5、写博客页面 6、完善 三、总结 一、设计测试用例 二、自动化测试 使用selenium4 Junit5单元测试框架&#xff0c;来进行简单的自动化测试。 1、导入依赖 创建Maven项目&am…

Apache Flink 文件上传漏洞 (CVE-2020-17518)

文章目录 一、Apache Flink简介二、漏洞简介三、漏洞复现四、上传jar包getshell 一、Apache Flink简介 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任…

不限提问次数,免费无限制使用ChatGPT的手把手详细教程,国内最新免费使用ChatGPT教程

目录 一、使用效果 二、注册使用教程 1.打开Edge浏览器扩展 2.选择Edge浏览器外接程序 3.搜索WeTab 4.进入管理扩展 5.启用扩展 6.进入WeTab新标签页 7.打开Chat AI 8.注册 9.使用 ChatGPT是OpenAI推出的人工智能语言模型&#xff0c;能够通过理解和学习人类的语言来…

IC代理商教你如何通过壳盖辨别翻新二手芯片

老师傅会告诉你看经验看的多了&#xff0c;自然就能区分了。可经验从哪里来呢&#xff1f;ic代理商将从壳盖、定位孔和针脚三个方面来讲&#xff0c;干货满满做好笔记。 壳盖指的是芯片印制的一面&#xff0c;上面有芯片的型号和定位孔&#xff0c;全新的壳盖看着是磨砂的&…

你想要的PDF预览新方式,微信小程序绝对不容错过

前言 随着微信小程序的不断发展和变革&#xff0c;越来越多的功能被开发出来&#xff0c;其中预览 PDF 文件功能也已经成为小程序的常见应用之一。今天&#xff0c;我们将针对微信小程序预览 PDF 这一功能&#xff0c;为大家详细解析和介绍。 实现思路 在小程序界面中添加一个…

Mac苹果电脑杀毒软件CleanMyMac X

CleanMyMac X上手完全没难度。CleanMyMac X拥有非常精美的UI设计&#xff0c;左侧是功能菜单&#xff0c;各个功能板块简洁明了&#xff0c;我想对于小白用户来说上手也是没难度的。 具有强大的防御和恶意程序清除功能。CleanMyMacX不仅是一款Mac清洁软件&#xff0c;也是一款专…