- 浏览: 345766 次
-
文章分类
最新评论
-
luokery:
你把正常的代码放到try里面不就好了, 异常的时候就catch ...
巧用while循环避免执行除了异常处理的的另一个处理机制 -
java_doom:
这个行号根据什么来的 为什么不是连续的?
别拿Hadoop map key当id使 -
mixer_b:
...
写博客的那些事儿 -
flyfx:
谢谢谢谢
java break,continue,return 使用。【借鉴与改编】 -
andilyliao:
比起青鸟 我更鄙视大学。
北大青鸟就让你们这么鄙视吗.
先看代码,挨句解释:
一般遍历使用两种方式,1:得到总的行数和每行的列数,然后循环。2:使用迭代
先看第一种:
- package com.golden.test;
- import java.io.File;
- import java.io.FileInputStream;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- /**
- *
- * @author 崔素强
- *
- */
- public class PoiReadXls2 {
- public static void main(String[] args) {
- File f = new File("c:\\a.xls");
- try {
- FileInputStream is = new FileInputStream(f);
- HSSFWorkbook wbs = new HSSFWorkbook(is);
- HSSFSheet childSheet = wbs.getSheetAt(0);
- // System.out.println(childSheet.getPhysicalNumberOfRows());
- System.out.println("有行数" + childSheet.getLastRowNum());
- for (int j = 0; j < childSheet.getLastRowNum(); j++) {
- HSSFRow row = childSheet.getRow(j);
- // System.out.println(row.getPhysicalNumberOfCells());
- // System.out.println("有列数" + row.getLastCellNum());
- if (null != row) {
- for (int k = 0; k < row.getLastCellNum(); k++) {
- HSSFCell cell = row.getCell(k);
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC: // 数字
- System.out.print(cell.getNumericCellValue()
- + " ");
- break;
- case HSSFCell.CELL_TYPE_STRING: // 字符串
- System.out.print(cell.getStringCellValue()
- + " ");
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
- System.out.println(cell.getBooleanCellValue()
- + " ");
- break;
- case HSSFCell.CELL_TYPE_FORMULA: // 公式
- System.out.print(cell.getCellFormula() + " ");
- break;
- case HSSFCell.CELL_TYPE_BLANK: // 空值
- System.out.println(" ");
- break;
- case HSSFCell.CELL_TYPE_ERROR: // 故障
- System.out.println(" ");
- break;
- default:
- System.out.print("未知类型 ");
- break;
- }
- } else {
- System.out.print("- ");
- }
- }
- }
- System.out.println();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
得到Excel的文件然后读取,这个很简单。关键有两个地方,也许在网上会看到有的这样使用有的那样使用。
System.out.println("有行数" + childSheet.getLastRowNum());
System.out.println(childSheet.getPhysicalNumberOfRows());
System.out.println("有列数" + row.getLastCellNum());
System.out.println(row.getPhysicalNumberOfCells());
如果人都拷贝代码进行使用了,不知道有什么区别。太多的区别不知道,但是有一点我发现了,那就是如果中间各行或者隔列的话getPhysicalNumberOfRows和getPhysicalNumberOfCells就不能读取到所有的行和列了。
再者,一定要对单元格的格式进行判断switch (cell.getCellType()),不同的单元格格式使用不同的方法。最后加上为止类型,以防万一。
而且在数字类型里,又分为了纯数字和时间格式:
- case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- // 如果是date类型则 ,获取该cell的date值
- value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
- } else { // 纯数字
- value = String.valueOf(cell.getNumericCellValue());
- }
还有一种迭代的方法:
- package com.golden.test;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Iterator;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.poifs.filesystem.POIFSFileSystem;
- /**
- *
- * @author 崔素强
- *
- */
- public class PoiReadXls {
- @SuppressWarnings( { "unchecked", "deprecation" })
- public static void main(String[] args) {
- File f = new File("c:\\a.xls");
- try {
- InputStream input = new FileInputStream(f);
- POIFSFileSystem fs = new POIFSFileSystem(input);
- HSSFWorkbook wb = new HSSFWorkbook(fs);
- HSSFSheet sheet = wb.getSheetAt(0);
- Iterator rows = sheet.rowIterator();
- while (rows.hasNext()) {
- HSSFRow row = (HSSFRow) rows.next();
- // System.out.print("行:" + row.getRowNum() + " ");
- Iterator cells = row.cellIterator();
- while (cells.hasNext()) {
- HSSFCell cell = (HSSFCell) cells.next();
- // System.out.println("列:" + cell.getCellNum());
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC: // 数字
- System.out.print(cell.getNumericCellValue() + " ");
- break;
- case HSSFCell.CELL_TYPE_STRING: // 字符串
- System.out.print(cell.getStringCellValue() + " ");
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
- System.out.println(cell.getBooleanCellValue() + " ");
- break;
- case HSSFCell.CELL_TYPE_FORMULA: // 公式
- System.out.print(cell.getCellFormula() + " ");
- break;
- case HSSFCell.CELL_TYPE_BLANK: // 空值
- System.out.println(" ");
- break;
- case HSSFCell.CELL_TYPE_ERROR: // 故障
- System.out.println(" ");
- break;
- default:
- System.out.print("未知类型 ");
- break;
- }
- }
- System.out.println();
- }
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
这种方法,如果数据的紧凑的,使用还是方便的,但是我发现,如果是空行或者是空列,他就会隔过去。具体的自己试试就知道了。
另外,也能看到这里得到Excel文件的方式是通过File,如果要引用到Struts2里,这是很简单的,因为Struts2上传时Action里定义的就是File或者File数组。
发表评论
-
java如何终止线程
2012-04-24 21:38 1093对于线程的终止或者中断,由于java中Thread.stop方 ... -
ubuntu-11.10-server-i386学习笔记-网络基本配置
2012-04-23 22:11 10601. 静态IP地址配置 配置文件路径:/etc/networ ... -
ubuntu-11.10-server-i386学习笔记-Apache安装
2012-04-23 22:11 852第一步:先更新安装包缓存 1.1 sudo apt-get ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器安装
2012-04-23 22:10 1158在安装SVN前,假设你的Apache已经安装好了。 ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器-客户端测试
2012-04-23 22:10 765进入客户端测试之前,您应该确保svn服务器已经正确安装,如果您 ... -
svn服务器搭建经验总结
2012-04-23 22:09 1047从最近几天的实验来看,svn(Subversion versi ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(二)
2012-04-18 13:59 1973上一节贴出了web应用访问生成报告的action ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(一)
2012-04-18 13:59 2160后台主要工作是解析XML定义的标签文件,并 ... -
单例类、final、抽象类
2012-04-15 23:53 1687前些日子一直没写博客,因为病了,所以就耽误了,现在好点了 ... -
怎样在架构中合理的设置request中的Lcoale
2012-04-15 23:51 1319相信很多朋友在做J2EE国际化的时候,很可能遇到这个问题 ... -
一个Java时间工具类
2012-04-14 21:50 1057主要包含了对时间操作的一些工具方法,仅供参考吧! ... -
POI Excel导出,我的又一个模板方法
2012-04-14 21:49 2899下面有源码,下载就可以用,如果因为包的问题,就拷贝我 ... -
Poi 读写Excel 合并ExcelSheet Struts2实现
2012-04-14 21:48 1573网上有许多人在找这样的例子,有多个Excel,要把他们合 ... -
struts2项目中静态html在firefox下乱码的解决
2012-04-13 00:03 1073struts2 项目,通常开 ... -
黑马程序员——Java开发前奏
2012-04-12 23:59 842对于Java,我的一 ... -
《JAVA与模式》之单例模式
2012-04-12 23:58 806在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模 ... -
Java中的String不再纠结
2012-04-12 23:58 1473又是新的一月,又是各种总结,先分享一下java中st ... -
swing绘制了一只直升机
2012-04-12 23:56 3600周末用swing绘制了一只直升机 对swing的的绘制技 ...
相关推荐
本文将围绕“浅谈jxl解析excel ——复制、修改excel表”这一主题,深入探讨JXL库的使用方法和关键知识点。 首先,JXL库提供了丰富的API,使得开发人员可以方便地操作Excel文件的各个部分,如工作表、单元格、样式等...
内容概要:本文详细介绍了如何利用LTspice进行LDO(低压差线性稳压器)电源电路的仿真。首先讲解了如何导入LDO模型并配置仿真环境,接着深入探讨了瞬态分析、相位裕度、电源抑制比(PSRR)等关键仿真的具体步骤和注意事项。文中提供了多个实用的操作技巧,如通过调整补偿电容优化相位裕度,以及使用.step param命令批量测试不同参数的影响。此外,还分享了一些常见的仿真误区及其解决方法,帮助读者更好地理解和掌握LDO的设计与调试。 适合人群:电子工程专业学生、电源电路设计初学者、希望深入了解LDO特性的工程师。 使用场景及目标:适用于希望通过仿真工具提高LDO设计技能的人群。主要目标是掌握LDO的基本工作原理,学会使用LTspice进行各种类型的仿真分析,从而优化电路设计,确保系统的稳定性和性能。 其他说明:文章不仅提供详细的仿真步骤和技术细节,还附带了作者的实际经验和常见问题解决方案,使读者能够在实践中不断改进自己的设计思路。
渝安集团员工职业发展通道设计方案.ppt
内容概要:本文详细介绍了新能源电动汽车中VCU(整车控制器)和BMS(电池管理系统)的HIL(硬件在环)仿真技术。首先阐述了整车建模的基础,包括电池、电机等关键部件的建模要点。接着分别解析了驾驶员模块、仪表模块、BCU整车控制器模块、MCU电机模块、TCU变速箱模块、BMS电池管理模块等多个子模块的功能和实现方式。最后强调了HIL仿真在电动汽车控制系统测试和优化中的重要性,特别是在降低成本和风险方面的作用。 适合人群:从事新能源汽车研发的技术人员,尤其是专注于VCU和BMS领域的工程师。 使用场景及目标:适用于需要深入了解电动汽车控制系统仿真技术的研发团队,在产品开发初期进行系统测试和优化,确保各子系统间的协同工作正常。 其他说明:文中提供了大量代码示例,帮助读者更好地理解和实践相关概念和技术细节。此外,还分享了一些实际项目中的经验和教训,如故障注入测试的具体应用场景等。
如何应对一线人员春节后的离职潮
线性代数
离职面谈表.xls
聚宽对接qmt大礼包,配备需要的全部软件:python3.9版本,qmt模拟安装包,pycharm安装包,talib包
试用期转正表.xls
招聘数据分析.xls
如何让新员工快速融入团队
内容概要:本文详细介绍了并离网逆变器的两种主要控制策略——PQ控制和V/f控制,以及无功能量发生器(SVG)和有源电力滤波器(APF)的仿真模型。对于PQ控制,文章展示了如何将功率指令转化为电流指令,并强调了电网电压定向和限幅处理的重要性。V/f控制则用于离网模式,通过调节电压和频率来维持系统的稳定。SVG主要用于无功补偿,通过实时计算无功需求进行补偿。APF则专注于谐波检测和消除,利用自适应滤波器提高效率。此外,文中还提供了多个实用的小技巧,如仿真步长设置、模式切换时的前馈补偿等。 适合人群:从事电力电子仿真研究的技术人员,尤其是对逆变器控制策略感兴趣的工程师。 使用场景及目标:适用于需要深入理解和实现逆变器控制策略的研究项目,帮助工程师优化仿真模型,提升系统性能,确保仿真结果的准确性。 其他说明:文章不仅提供了详细的代码片段,还分享了许多实践经验,有助于读者避免常见错误,提高仿真成功率。
内容概要:本文详细介绍了如何利用Carsim与Simulink进行联合仿真,通过线性二自由度模型和卡尔曼滤波(KF)来估计车辆的质心侧偏角和横摆角速度。首先搭建了联合仿真框架,Carsim提供车辆状态量,Simulink负责算法处理。文中展示了线性二自由度模型的状态方程及其参数设定,并深入探讨了KF的两种实现方式:S函数编程和Simulink内置模块。对于S函数实现,着重讲解了状态转移矩阵的动态更新以及噪声矩阵Q的调整策略,确保模型能够适应车速变化。而对于内置模块,则指出了其在灵活性方面的不足之处。此外,还讨论了联合仿真的配置要点,如数据接口同步、采样时间和信号处理等问题。 适合人群:从事车辆动力学研究、控制理论应用、自动化控制领域的工程师和技术人员。 使用场景及目标:适用于需要精确估计车辆质心侧偏角和横摆角速度的研究和开发项目,特别是在涉及ESP等主动安全系统的开发过程中。目标是提高估计精度,增强系统的鲁棒性和响应速度。 其他说明:文章提供了详细的代码片段和实践经验分享,帮助读者更好地理解和实施相关技术。建议在实际应用中根据具体需求选择合适的KF实现方式,并注意处理各种边界条件和异常情况。
档案管理[03]
内容概要:本文详细介绍了风电与储能联合调频系统的原理及其优化方法。首先解释了风电输出功率的波动性和对电网频率的影响,提出储能系统作为解决方案。文中展示了如何用Python生成风速数据并构建调频控制系统,重点讨论了PID控制器的设计以及SOC(荷电状态)管理策略。此外,还探讨了调频控制逻辑、硬件在环测试、风电功率预测模型(如LSTM)、调频效果验证方法及储能系统的物理限制等问题。最后强调了模型验证的重要性,提出了异常数据注入测试的方法。 适合人群:从事电力系统自动化、新能源发电及储能技术研发的专业人士,尤其是有一定编程基础的研究人员和技术工程师。 使用场景及目标:适用于需要理解和实施风电与储能联合调频项目的团队。主要目标是提高电网稳定性,减少风电波动带来的负面影响,同时延长储能系统的使用寿命。 其他说明:文中提供了大量实用的Python代码示例,涵盖了从数据生成到控制逻辑实现再到模型验证的全过程。对于希望深入理解风储调频系统的工作机制和技术挑战的人来说,是一份非常有价值的参考资料。
HCIA-Storage V4.5 培训教材 合集
内容概要:本文详细介绍了利用西门子S7-1200系列PLC和博途V15软件平台构建的小车自动往返控制系统。首先进行硬件组态,选择合适的CPU并配置输入输出点位,确保限位开关和急停按钮的有效接入。接着编写梯形图逻辑,实现小车在AB两点间的精确控制,采用定时器互锁机制避免电机损坏。然后设计触摸屏界面,通过WinCC创建动画效果展示小车运动状态,并设置按钮操作实现手动与自动模式切换。最后进行联合仿真实验,解决常见错误如变量地址配置不当等问题,确保系统稳定运行。 适合人群:工业自动化领域的工程师和技术人员,尤其是对PLC编程和HMI设计有一定基础的学习者。 使用场景及目标:适用于需要掌握PLC控制系统设计全流程的专业人士,帮助他们理解如何整合硬件组态、梯形图编程以及HMI开发,最终完成一个完整的自动化工程项目。 其他说明:文中提供了详细的调试经验和技巧,附带74分钟的操作录像资料,有助于读者更好地理解和实践相关知识点。
公司员工关怀工作清单
内容概要:本文详细介绍了如何利用ANSYS/LS-DYNA进行多孔延时起爆和重复起爆的仿真。首先强调了起爆点的时间线控制和材料参数设置的重要性,如使用*INITIAL_DETONATION关键字设定起爆时间和坐标,以及配置JWL方程等材料属性。接着讨论了重复起爆的具体实现方式,包括使用*CONTROL_TERMINATION配合重启动功能,确保起爆点的正确复用。此外,文章还提供了调试技巧,如检查起爆同步性和优化时间步控制,以确保仿真的准确性。最后,分享了一些实际应用中的经验和常见错误,帮助用户更好地理解和掌握这一复杂的技术。 适合人群:从事爆炸力学研究和爆破工程设计的专业人士,尤其是有一定ANSYS/LS-DYNA使用经验的工程师。 使用场景及目标:适用于需要精确控制多个起爆点时间延迟和多次起爆的应用场合,如矿山开采、隧道挖掘等领域的爆破作业仿真。目标是提高爆破效率,减少对周围环境的影响。 其他说明:文中提到的许多技术细节对于初学者来说可能会有一定的难度,因此建议从简单的单孔起爆开始练习,逐步掌握复杂的多孔延时和重复起爆技术。同时,保持良好的注释习惯有助于追踪参数修改历史,便于后续调试和维护。
内容概要:本文档详细介绍了Java面向对象编程的三大核心特性:封装、继承与多态。封装通过访问修饰符限制属性的访问权限,确保数据的安全性和完整性,如Student类中将name和age设为私有属性并通过公共方法进行访问控制。继承使得子类可以复用父类的属性和方法,减少代码冗余,如Dog类继承了Animal类的属性和方法并增加了特有的bark()方法。多态分为编译时多态(方法重载)和运行时多态(方法重写),它允许不同对象以相同接口执行不同的行为,如Shape类及其子类Circle和Rectangle通过重写getArea()方法实现了不同的面积计算逻辑,并在Main类中展示了多态的实际应用。 适合人群:具有Java编程基础的学习者或开发者,特别是对面向对象概念有初步了解但需要深入理解的人群。 使用场景及目标:①掌握Java中封装的实现机制,学会使用访问修饰符保护类成员;②理解继承的概念,能够创建父子类关系并利用继承特性提高代码复用性;③熟悉多态的应用场景,能够在实际项目中运用多态特性实现灵活的对象行为。 阅读建议:本资源侧重于理论讲解与简单示例演示,建议读者在学习过程中结合实际编程练习加深理解,同时注意对比不同特性的应用场景,以便更好地掌握面向对象编程的核心思想。