content = new hashmap();

string str = "";

try {

fs = new poifsfilesystem(is);

wb = new hssfworkbook(fs);

} catch (ioexception e) {

e.printstacktrace();

}

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) {

// 每个单元格的数据内容用"-"分割开,以后需要时用string类的replace()方法还原数据

// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean

// str += getstringcellvalue(row.getcell((short) j)).trim() +

// "-";

str += getcellformatvalue(row.getcell((short) j)).trim() + " ";

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;

}

private string getcellformatvalue(hssfcell cell) {

string cellvalue = "";

if (cell != null) {

// 判断当前cell的type

switch (cell.getcelltype()) {

// 如果当前cell的type为numeric

case hssfcell.cell_type_numeric:

case hssfcell.cell_type_formula: {

// 判断当前的cell是否为date

if (hssfdateutil.iscelldateformatted(cell)) {

// 如果是date类型则,转化为data格式

//方法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 {

// 取得当前cell的数值

cellvalue = string.valueof(cell.getnumericcellvalue());

}

break;

}

// 如果当前cell的type为strin

case hssfcell.cell_type_string:

// 取得当前的cell字符串

cellvalue = cell.getrichstringcellvalue().getstring();

break;

// 默认的cell值

default:

cellvalue = " ";

}

} else {

cellvalue = "";

}

return cellvalue;

}

public static void main(string[] args) {

try {

// 对读取excel表格标题测试

inputstream is = new fileinputstream("d:\\test2.xls");

excelreader excelreader = new excelreader();

string[] title = excelreader.readexceltitle(is);

system.out.println("获得excel表格的标题:");

for (string s : title) {

system.out.print(s + " ");

}

// 对读取excel表格内容测试

inputstream is2 = new fileinputstream("d:\\test2.xls");

mapmap = excelreader.readexcelcontent(is2);

system.out.println("获得excel表格的内容:");

for (int i = 1; i <= map.size(); i++) {

system.out.println(map.get(i));

}

} catch (filenotfoundexception e) {

system.out.println("未找到指定路径的文件!");

e.printstacktrace();

}

}

}

3.总结

因为excel单元格中的内容往往都有一定的格式,比如日期型,数字型,字符串型,因此在读取的时候要进行格式判断,不然会出现错误。常见的就是不能正常读取日期。在代码实例中有一个方法:

getcellformatvalue(hssfcell cell)

往这个方法中传入excel单元格就能识别单元格格式,并转化为正确的格式。

ps:2012-2-23

代码实例中有一段代码:

int colnum = row.getphysicalnumberofcells();

其中的hssfrow.getphysicalnumberofcells();这个方法是用于获取一行中存在的单元格数,poi的官方api中有给出getphysicalnumberofcells方法的解释

java excel poi 包_用java poi包读取Excel单元格相关推荐

  1. python excel 格式刷_巧用格式刷解决合并单元格无法统计问题

    我是谁!我来自哪里!我要去往何处! 好吧,为了能对得起我的名字<阿凯的Excel> 本小编决定每周不少于一篇文章是献给Excel的~ 因为最近有风Python要嵌入Excel,我才想好好学 ...

  2. poi导出excel写入公式_【java poi 写入Excel后读取公式值问题】poi导入excel

    java poi 写入Excel后读取公式值问题 不用改公式,只需要用cell.getNumericCellValue()获取,读出来就是正确的值了,如果你读出来的还有问题,说明你其他的地方写的还有问 ...

  3. java生成平滑散点图_【转载】如何在excel制作散点图平滑线散点图

    散点图和平滑线散点图是科技论文中经常用到的两种图形,两者结合在同一个图形之中,既可以表示某项指标在多个测定时期的原始数据,也能够直观地反映测定指标的平均值.预测值随时间的变化趋势. 例如:某地区施用石 ...

  4. java设置excel单元格格式为百分比_Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)...

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...

  5. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  6. poi读取合并单元格

    poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...

  7. php循环读取excel每个单元格,php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)...

    error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...

  8. Excel如何将工作表按照表内某一单元格命名

    今天跟大家分享一下Excel如何将工作表按照表内某一单元格命名 1.如下图我们想要按照工作表A1单元格内容命名工作表. 2.首先我们点击下图选项(Excel工具箱,百度即可了解详细的下载安装信息,本文 ...

  9. 利用VBA将excel中链接转换为图片形式存放在指定的单元格中

    利用VBA将excel中链接转换为图片形式存放在指定的单元格中 VBA代码如下 Private Declare Function URLDownloadToFile Lib "urlmon& ...

  10. php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)

    error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...

最新文章

  1. 深度好文 — 微服务和API网关限流熔断实现关键逻辑思路
  2. gitlab更改默认Nginx
  3. python多线程处理数据库_在flask框架下利用Python的threading或thread多线程库如何操作数据库?...
  4. 基于Elasticsearch实现搜索推荐
  5. 业务处理速度变慢?且看IT如何成为救世主
  6. cli2弃用了吗 vue_vue cli - 2 升级到 3的问题汇总
  7. Linux-c对一个十六进制数的某一位取反
  8. CS224N刷题——Assignment2.1_TensorflowSoftmax
  9. 【开源分享】微信营销系统(第三方微信平台)github 开源
  10. android扫描局域网中的所有ip,NMAP扫描局域网内在线IP
  11. C/C++获取CPU等硬件信息屏幕截图
  12. ATSHA204A加密芯片
  13. 穿越Java - 基础篇 第三章 面向对象介绍 | 第4节 成员变量和局部变量
  14. HTML5期末大作业:仿悦世界游戏网站设计——仿悦世界游戏官网(6页) HTML+CSS+JavaScript web网页设计实例作业
  15. 300个VB全面控制Excel方法
  16. 基于JAVA健康生活网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  17. 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
  18. StarUML使用说明
  19. 2021-11-3 软件模拟IIC时序,并和EEPROM存储芯片24C02双向通信以及显示功能
  20. win10 创建访客_建立一个访客会很喜欢的网站

热门文章

  1. 10分钟手把手教你用Android手撸一个简易的个人记账App
  2. python 多态app_**python多态
  3. for循环嵌套 正三角和倒三角
  4. slack软件怎么用
  5. 【mysql】--explain命令解析
  6. 移动周刊第 188 期:Android 安全性要点与规范核心详析
  7. 牛客算法周周练11 A.切题之路 签到题
  8. python df删除特定行_pandas.DataFrame删除/选取含有特定数值的行或列实例
  9. SQL注入之floor报错注入
  10. 浅谈屏蔽搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路