我是靠谱客的博主 高兴鸵鸟,最近开发中收集的这篇文章主要介绍2.Java Excel操作读取合并单元格,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/**
	         * 初始化要和表列匹配的数组
	         * @param filePath String
	         * 
	         */
	        void tableInit(){
	        	dataHeader = new String[]{"顺序号","层级","物料编码","物料名称","物料规格","表面处理","材质","用量","子件图号","来源","当前库存"};
	        	tableModel.addColumn(dataHeader[0]);
	        	tableModel.addColumn(dataHeader[1]);
	        	tableModel.addColumn(dataHeader[2]);
	        	tableModel.addColumn(dataHeader[3]);
	        	tableModel.addColumn(dataHeader[4]);
	        	tableModel.addColumn(dataHeader[5]);
	        	tableModel.addColumn(dataHeader[6]);
	        	tableModel.addColumn(dataHeader[7]);
	        	tableModel.addColumn(dataHeader[8]);
	        	tableModel.addColumn(dataHeader[9]);
	        	tableModel.addColumn(dataHeader[10]);
	        	
	            table.setModel(tableModel);
	            tableModel.setRowCount(5);
	    	}

		    /**
	         * 选择导入文件
	         * @param filePath String
	         * 
	         */
	        void btnfile_actionPerformed(ActionEvent e){
	            int filetype = 10;
	            MitPDMFileChooserProxy proxy = new MitPDMFileChooserProxy(filetype);
	            JFileChooser fc = proxy.getFileChooser();
	            fc.setToolTipText("选择导入的文件");
	            fc.setDialogTitle("查找文件");
	            int returnVal = fc.showDialog(this, "打开");
	            if(returnVal == 0){
	                File file = fc.getSelectedFile();
	                String strPath = file.getPath();
	                if(strPath.indexOf(".xlsx") != -1 || strPath.indexOf(".xls") != -1){
	                    textField.setText(strPath);
	                }else 
	                	MitOptionPane.showMessageDialog(this, "不是Excel文件", "错误", 0);
	            }
	        }
	  
	        void btnImport_actionPerformed(ActionEvent e){
	        	importPath = textField.getText().trim();
	        	if((importPath == null || importPath.equals(""))){
	                MitOptionPane.showMessageDialog(this, "请选择要导入的文件!", "数据导入", 1);
	                return;
	            }
	            DlgWaitting waitDialog = new DlgWaitting("正在导入数据......", null, this);
	            OpenWaitThread openWait = new OpenWaitThread(waitDialog);
	            openWait.start();
	            waitDialog.show();
	        	
	        }
	        
	        void btnCancel_actionPerformed(ActionEvent e){
	        	this.dispose();
	        }
	        
	        class OpenWaitThread extends Thread{
	        	
	            DlgWaitting wait;

	            public OpenWaitThread(DlgWaitting wait){
	                this.wait = null;
	                this.wait = wait;
	            }

	            public void run(){
	                try{
	                    Thread.currentThread();
	                    Thread.sleep(1000L);
	                }
	                catch(Exception e) { }
	                try{
	                    importData(wait);
	                }
	                catch(Exception e){
	                    e.printStackTrace();
	                }
	            }
	            
	        }
	        
	        /**
	         * 导入数据
	         * @param wait DlgWaitting
	         * @throws IOException
	         */
	        void importData(DlgWaitting wait) throws IOException{
	        	//要导入的数据列表
	        	ArrayList<String[]> alt = null;
	            try {
	    			alt = getImportData(importPath, wait);
	    		}catch (Exception e) {
	    			e.printStackTrace();
	    			wait.dispose();
	            	MitOptionPane.showMessageDialog(this, "获取文件内数据出错,请检查文件", "错误", 0);
	            	return;
	    		}
	            
	            //如果数据为空则返回
	            if(alt == null){
	    			wait.dispose();
	            	return;
	            }
	            
	            //获取当前系统时间并进行格式化操作
	            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	            Date date = new Date();
	            String nowDate = sdf.format(date);
	            
	            //bom_054表插入设计BOM索引,或者是更新信息
	            String selectSql054 = "select count(*) from Bom_054 where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"'";
	            if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(selectSql054).get(0))[0]) == 0){
	            	String sql54 = "insert into BOM_054(BOMNAME,BOMVAR,BOMSTATE,BOMTYPE,PARTID,PARTVAR,BOMARCHIVER,TOTALBOMBACKUP2,BOMACHIVETIME) values('"
	            			+bomName1+"','A.00','design','0','"+produCode+"','A.00','"+Message.getLoginuserid()+"','"+chName+"','"+nowDate+"')";
	            	if(!SystemSql.getInstance().executeUpdate(sql54)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	            }else {
	            	String sql54 = "update BOM_054 set BOMNAME = '"+bomName1 +"',BOMVAR = 'A.00',BOMMODIFYTIME ='"+nowDate+"'," +
	            			"PARTVAR='A.00',TOTALBOMBACKUP2='"+chName+"' where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"'";
	            	if(!SystemSql.getInstance().executeUpdate(sql54)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
				}
	            
	            //权限设置开始BOMNAME, BOMVER, PERSONID, PRIVILEGEID
	            String seSql31 = "select count(*) from Bom_031 where bomname = '"+bomName1+"' and bomver = 'A.00' and " +
	            		"partid = '"+produCode+"' and partver = 'A.00' and PERSONID = '"+Message.getLoginuserid()+"'";
	            if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(seSql31).get(0))[0]) == 0){
	            	String sql31 = "insert into BOM_031(BOMNAME,BOMVER,PARTID,PARTVER,PERSONID) values('"
	            			+bomName1+"','A.00','"+produCode+"','A.00','"+Message.getLoginuserid()+"')";
	            	if(!SystemSql.getInstance().executeUpdate(sql31)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}	            	
	            }
	            String seSql34 = "select count(*) from Bom_034 where bomname = '"+bomName1+"' and bomver = 'A.00' and " +
	            		"PERSONID = '"+Message.getLoginuserid()+"' and PRIVILEGEID = '2'";
	            if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(seSql34).get(0))[0]) == 0){
	            	String sql34 = "insert into BOM_034(BOMNAME,BOMVER,PERSONID,PRIVILEGEID) values('"
	            			+bomName1+"','A.00','"+Message.getLoginuserid()+"','2')";
	            	if(!SystemSql.getInstance().executeUpdate(sql34)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}	            	
	            }
	            //权限设置结束
	            
	            //bom_017表插入设计BOM根节点,或者是更新信息BOMNAME, SEQNUM, BOMVAR
	            String selectSql017 = "select count(*) from Bom_017 where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"' and SEQNUM = '1'";
	            if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(selectSql017).get(0))[0]) == 0){
	            	String sql017 = "insert into BOM_017(FREZONBOMBACKUP3,PARENTID,FATHERPARTVAR,PARTID,ASSEMBLELEVEL,BOMNAME,PARTVAR,COUNTS,SEQNUM,BOMVAR,CHINANAME,NODETIMESTAMP) " +
	            			"values('0','root','root','"+produCode+"',1,'"+bomName1+"','A.00','"+baseCount+"','1','A.00','"+chName+"','"+nowDate+"')";
	            	//写入数据库出现错误则停止操作并提示
	    			if(!SystemSql.getInstance().executeUpdate(sql017)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	            }else {
	            	String sql017 = "update BOM_017 set PARENTID = 'root',FATHERPARTVAR = 'root',ASSEMBLELEVEL='1',PARTID = '"+produCode+"'" +
	            			",PARTVAR='A.00',CHINANAME='"+chName+"',COUNTS = '"+baseCount+"',FREZONBOMBACKUP3 = '0'" +
	            					" where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"' and SEQNUM = '1'";
	            	//写入数据库出现错误则停止操作并提示
	    			if(!SystemSql.getInstance().executeUpdate(sql017)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	            }
//	            
	    		for(int i = 0; i<alt.size(); i++){
//	    			System.out.println("list2"+Arrays.toString(alt.get(i))+"----位置"+i +"-----长度"+alt.get(i));
	    			String[] s = (String[])alt.get(i);
	    			int row = i + 1;
//	    	        //sql语句:向替代料信息表导入数据
	    			String execSql = null;
	    			String seqnum1 =s[0];
	    			String frezonup3 = "1."+s[0];
	    			String assem1 ;
	    			if (s[2].equals("1")) {
	    				frezonup3 = "1";
	    				assem1 = "2";
	    			}else {
	    				
	    				int temp = Integer.parseInt(s[2])-1;
	    				int temp2 = Integer.parseInt(s[2])+1;
	    				String toTemp2 = String.valueOf(temp2);
	    				for (int j = 0; j < temp; j++) {
	    					seqnum1= seqnum1+".1";							
						}
	    				for (int j = 0; j < temp-1; j++) {
	    					frezonup3= frezonup3+".1";							
						}
//	    				String temp2 = String.valueOf(temp);
//	    				seqnum1 = s[0]+"."+temp2;
//	    				frezonup3 = "1."+s[0];
	    				assem1 = "3";
	    				assem1 = toTemp2;
	    			}
//	            	//sql语句:查询数据库表中是否已有数据
	    			String countSql = "select count(*) from BOM_017 ";
//	    	        //sql语句中可复用的部分PARTVAR
	    	        String sql = "where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"' and SEQNUM = '1."+seqnum1+"'";
//	    	        String sql = "where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"' and SEQNUM = '1."+seqnum1+"' and PARENTID = '"+s[3]+"'";
//	    	        
//	    			//执行语句
	    	        //TODO
	    	        if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(countSql + sql).get(0))[0]) == 0){
	    		        execSql = "insert into Bom_017(PARENTID,PARTID,BOMNAME,COUNTS,SEQNUM,FATHERPARTVAR,BOMVAR,ASSEMBLELEVEL,FREZONBOMBACKUP3,PARTVAR,NODETIMESTAMP) " +
	    		        		"values ('"+produCode+"','"+s[3]+"','"+bomName1+"','"+s[14]+"','1."+seqnum1+"','A.00','A.00','"+assem1+"','"+frezonup3+"','A.00','"+nowDate+"')";
	    	        }else{
	    	        	execSql = "update bom_017 set COUNTS='"+s[14]+"',PARTID = '"+s[3]+"',FATHERPARTVAR=" +
	    	        			"'A.00',ASSEMBLELEVEL='"+assem1+"',FREZONBOMBACKUP3='"+frezonup3+"'" + sql;
	    	        }
	    			
	    			//写入数据库出现错误则停止操作并提示
	    			if(!SystemSql.getInstance().executeUpdate(execSql)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "第"+row+"行写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	    		}
	    		//设计bom附加属性BOMNAME, BOMVAR, SEQNUM
	            String sql094 = "select count(*) from BOM_094 where SEQNUM = '1' and BOMNAME = '"+bomName1+"' and BOMVAR = 'A.00'";
	    		//bom_094表插入设计BOM根节点,或者是更新信息
	            if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(sql094).get(0))[0]) == 0){
	            	String sql94 = "insert into BOM_094(PARTID,PARTVAR,BOMNAME,BOMVAR,SEQNUM,cusid) " +
	            			"values('"+produCode+"','A.00','"+bomName1+"','A.00','1','"+custID+"')";
	            	//写入数据库出现错误则停止操作并提示
	    			if(!SystemSql.getInstance().executeUpdate(sql94)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	            }else {
	            	String sql94 = "update BOM_094 set cusid = '"+custID+"' where SEQNUM = '1' and BOMNAME = '"+bomName1+"' and BOMVAR = 'A.00'";
	            	//写入数据库出现错误则停止操作并提示
	    			if(!SystemSql.getInstance().executeUpdate(sql94)){
	    				wait.dispose();
	    	        	MitOptionPane.showMessageDialog(this, "写入数据库失败,操作终止!", "错误", 0);
	    	        	return;
	    			}
	            }
	    		//导入成功记录写入系统日志
	    		FrmChangeLog_yl.setLogView(
	    	      "设计bom多层Excel导入", //$NON-NLS-1$
	    	      "设计bom多层Excel导入成功。", //$NON-NLS-1$
	    	      FrmChangeLog_yl.BOMMANAGER);

	    		wait.dispose();  		
	    	    MitOptionPane.showMessageDialog(this, (new StringBuilder("导入完成,日志信息位于:")).append(logPath).toString(), "数据导入", 1);

	    	    
	        }
	        
	        /**
	         * 获取要导入的数据
	         * @param fileName String
	         * @param wait DlgWaitting
	         * @return ArrayList
	         * @throws Exception
	         */
	        ArrayList<String[]> getImportData(String fileName, DlgWaitting wait) throws Exception{        
	        	//要返回的导入数据列表
	            ArrayList<String[]> list2 = new ArrayList<String[]>();
	            ArrayList<String[]> list1 = new ArrayList<String[]>();
	            File file = new File(fileName);
	            InputStream input = null;
	            //Excel中对于的行数
	            Row row;
	            int cRow = 1;
	           
	            if(file.exists()){
	                input = new FileInputStream(file);
	                Workbook workbook = ((Workbook) (MitToolKit.isExcel2003(fileName) ? ((Workbook) (new HSSFWorkbook(input))) : ((Workbook) (new XSSFWorkbook(input)))));
	                Sheet sheet = workbook.getSheetAt(0);
	                //用来做物料-替代料重复校验的map
//	        		Map<String, ArrayList<Integer>> map1 = new HashMap<String, ArrayList<Integer>>();
	        		Map<String, ArrayList<Integer>> reNum = new HashMap<String, ArrayList<Integer>>();
	                
	                //读取excel全部信息
	                for (int i = 0; i < sheet.getLastRowNum(); i++) {
	    				row = sheet.getRow(i);
	    				
	    				if (row == null)
	    					continue;
	    				List<String> result = new ArrayList<String>();
	    				for (Cell c : row) {
	    					boolean isMerge = isMergedRegion(sheet, i, c.getColumnIndex());
	    					// 判断是否具有合并单元格
	    					if (isMerge) {
	    						result.add(getMergedRegionValue(sheet, row.getRowNum(), c.getColumnIndex()));
	    					} else {
	    						result.add(getCellValue(c));
	    					}
	    				}
	    				String[] strs1 = result.toArray(new String[result.size()]);
	    				list2.add(strs1);
	    			}
	                
	              
	                if(list2.size()<10 ||list2.get(9).length != 23){
	                	wait.dispose();
	                	MitOptionPane.showMessageDialog(this, "Excel模板格式不正确,请检查", "错误", 0);
	                	return null;
	                }
	              //集合中获取第10个数据,下标为9
	                String columns[] = list2.get(9);
	                String eqColums[] = new String[11];
	                eqColums[0] = columns[0];
	                eqColums[1] = columns[2];
	                eqColums[2] = columns[3];
	                eqColums[3] = columns[4];
	                eqColums[4] = columns[8];
	                eqColums[5] = columns[10];
	                eqColums[6] = columns[12];
	                eqColums[7] = columns[14];
	                eqColums[8] = columns[16];
	                eqColums[9] = columns[20];
	                eqColums[10] = columns[21];
	                
	                //检查Excel中的表头和模板的表头是否一致
	                if(!Arrays.equals(dataHeader, eqColums)){
	                	wait.dispose();
	                	MitOptionPane.showMessageDialog(this, "Excel模板格式不正确,请检查", "错误", 0);
	                	return null;
	                }else {
						System.out.println("格式正确!");
					}
	                
	              //要插入的根件信息(获取表首有用信息)
		            produCode = list2.get(5)[1];
		            chName =  list2.get(5)[5];
		            baseCount = list2.get(6)[5];
	                bomName1 = chName+"【"+produCode+"-"+"A.00"+"】";
	                custID = list2.get(5)[3];
	                
	                //过滤格式正常的数据
	                for (String[] strs1 : list2) {
	                	if (strs1.length==23 && !strs1[0].equals("顺序号") 
	                			&& !strs1[0].equals("") && !strs1[2].equals("") && !strs1[3].equals("") && !strs1[14].equals("") 
	                			&& strs1[0] != null && strs1[2] != null && strs1[3] != null&& strs1[14] != null) {
	                	
	                		strs1[3]=strs1[3].replace(".", "");
                			//判断物料库是否存在该物料
	                    	String strSql1 = "select count(*) from BOM_027 where PARTID = '"+strs1[3]+"' and PARTVAR = 'A.00'";
	                    	if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(strSql1).get(0))[0]) == 0){
	                    		logTxt += "第"+cRow+"行:物料编号“"+strs1[3]+"”不存在或版本不正确;"+"rn";
	                    	}else {
	                    		String seqnum1 ;
	        	    			if (strs1[2].equals("1")) {
	        	    				seqnum1 = strs1[0];
	        	    			}else {
	        	    				int temp = Integer.parseInt(strs1[2])-1;
	        	    				String temp2 = String.valueOf(temp);
	        	    				seqnum1 = strs1[0]+"."+temp2;
	        	    			}
	        	    			//是否存在设计bom物料信息,存在的话是否进行覆盖
		                    	String strSql2 = "select count(*) from BOM_017 where BOMVAR = 'A.00' and BOMNAME = '"+bomName1+"' and SEQNUM = '1."+seqnum1+"'";
		                    	if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(strSql2).get(0))[0]) == 0){
		                    		list1.add(strs1);
		                    	}else {
		                    		if (isPop) {
		                    			DlgRepeat dlgRepeat = new DlgRepeat(this,strs1[3]);
		                    			this.setActiveWnd(dlgRepeat);
		                    			dlgRepeat.show();
		                    			btnTxtGet = dlgRepeat.getBtnTxt();
		                    			if (btnTxtGet.equals("是")) {
		                    				list1.add(strs1);
		                    				System.out.println("是");
		                    			}
		                    			if (btnTxtGet.equals("一律是")) {
		                    				isCoverOK=true;
		                    				isPop=false;
		                    			}
		                    			if (btnTxtGet.equals("一律否")) {
		                    				isPop=false;
		                    				System.out.println("一律否");
		                    			}
		                    			if (btnTxtGet.equals("取消")) {
		                    				isPop=false;
		                    				wait.dispose();
		                            		MitOptionPane.showMessageDialog(this, "操作取消", 1);
		                    				System.out.println("取消");
		                    				return null;
		                    			}
										
									}
		                    		if (isCoverOK) {
		                    			list1.add(strs1);
//		                    			System.out.println("一律是");
									}
								}
//		                    	System.out.println("list2"+Arrays.toString(strs1)+"----位置"+cRow +"-----长度"+strs1.length);
							}
	                    	if (strs1[0]==null || strs1[2]==null || strs1[3]==null || strs1[14]==null 
	                    			||strs1[0].equals("") ||strs1[2].equals("") ||strs1[3].equals("") ||strs1[14].equals("")) {
	                    		logTxt += "第"+cRow+"行有不能为空的数据"+"rn";
							}
	                    	if (!isDouble(strs1[14]) || Double.valueOf(strs1[14]) < 0) {
	                    		logTxt += "第"+cRow+"行:用量“"+strs1[14]+"”不是正数;"+"rn";
							}
//	                    	//用来检验物料-设计BOM料重复的key
//	                    	String key = strs1[3];
//	                    	//保存设计BOM料重复数据出现的行数
//	                    	ArrayList<Integer> rows1 = new ArrayList<Integer>();
//	                    	//判断设计BOM料重复
//	                    	if (map1.containsKey(key)) {
//	                    		rows1 = map1.get(key);
//	                    		rows1.add(cRow);
//	            				map1.put(key, rows1);
//	            				
//	            			} else {
//	            				rows1.add(cRow);
//	            				map1.put(key, rows1);
//
//	            			}
	                    	//用来检验物料-设计BOM料重复的序列+层次号+物料编码
	                    	String key1 = strs1[0]+strs1[2];
	                    	//String key1 = strs1[0]+strs1[2]+strs1[3];
	                    	//保存设计BOM料重复数据出现的行数
	                    	ArrayList<Integer> rows2 = new ArrayList<Integer>();
	                    	//判断设计BOM料重复
	                    	if (reNum.containsKey(key1)) {
	                    		rows2 = reNum.get(key1);
	                    		rows2.add(cRow);
	                    		reNum.put(key1, rows2);
	                    		
	                    	} else {
	                    		rows2.add(cRow);
	                    		reNum.put(key1, rows2);
	                    		
	                    	}
	                	}
	    				cRow++;
	                	
					}
	                isPop = true;
//	                //遍历判断设计BOM料是否重复
//	            	for(Entry<String, ArrayList<Integer>> entry : map1.entrySet()){
//	            		ArrayList<Integer> rows = entry.getValue();
//	            		if(rows.size() > 1){
//	        				logTxt += "数据【物料编码】:【"+entry.getKey()+"】在第"+rows.toString()+"行有重复数据;rn";
	        				System.out.println("数据【物料编码】:【"+entry.getKey()+"】在第"+rows.toString()+"行有重复数据;n");
//	            		}
//	            	}
	            	//遍历判断设计BOM编号是否重复
	            	for(Entry<String, ArrayList<Integer>> entry : reNum.entrySet()){
	            		ArrayList<Integer> rows = entry.getValue();
	            		if(rows.size() > 1){
	            			//logTxt += "数据【顺序号+层次号+物料编码】:【"+entry.getKey()+"】在第"+rows.toString()+"行有重复数据;rn";
	            			logTxt += "数据【顺序号+层次号】:【"+entry.getKey()+"】在第"+rows.toString()+"行有重复数据;rn";
//	            			System.out.println("数据【顺序编号】:【"+entry.getKey()+"】在第"+rows.toString()+"行有重复顺序编号;n");
	            		}
	            	}
	                
	            	//导入表前部分判断分析
	                double tranType = Double.parseDouble(baseCount);
	                
	                if (produCode == null || produCode.equals("")) {
	                	logTxt += "产品编码不能为空rn";
					}
	                if (tranType < 0) {
	                	logTxt += "产品数量错误,不能为:"+tranType+"rn";
					}
	                String strSql1 = "select count(*) from BOM_027 where PARTID = '"+produCode+"' and PARTVAR = 'A.00'";
	            	if(Integer.parseInt(((String[])SystemSql.getInstance().executeQuery(strSql1).get(0))[0]) == 0){
	            		logTxt += "产品编号:“"+produCode+"”不存在或版本不正确;"+"rn";
	            	}
	                
	              //当有错误数据时停止校验返回空数据并弹窗提示
	            	if(!logTxt.equals("")){
	            		logTxt = "设计BOM(单层)导入数据校验失败rn" + logTxt;
	            		createLogFile(importPath);
	            		wait.dispose();
	                	MitOptionPane.showMessageDialog(this, "数据校验失败,日志信息位于:"+logPath, "错误", 0);
	            		return null;
	            	}

	            }
	            if(input != null){
	            	input.close();
	            }
	            
	            //当数据为空时弹窗提示
	            if(list1.size() == 0){
	            	wait.dispose();
	            	MitOptionPane.showMessageDialog(this, "空数据", "提示", 1);
	            	return null;
	            }
	            return list1;
	        }

    
	        /**
	         * 生成日志文件
	         * @param filePath String
	         * 
	         */
	        void createLogFile(String filePath){
	            String path = filePath.substring(0, filePath.lastIndexOf("\"));
	            logPath = (new StringBuilder(String.valueOf(path))).append("\importLog.txt").toString();
	            File logfile = new File(logPath);
	            try{
	                //删除原有日志
	                if(logfile.exists()){
	                	logfile.delete();
	                }
	                logfile.createNewFile();
	                FileWriter writer = new FileWriter(logfile, true);
	                writer.write(logTxt);
	                writer.flush();
	                writer.close();
	            	Desktop.getDesktop().open(logfile);
	            }
	            catch(Exception e){
	                e.printStackTrace();
	            }finally{
	            	//清空日志内容
	                logTxt = "";
	            }
	        }
	        

	    	/**
	    	 * 判断是否为Double类型
	    	 * @param str
	    	 * @return
	    	 */
	    	public static boolean isDouble(String str) {
	    		if(str == null || str.equals("")){
	    			return false;
	    		}
	    		try {
	    			Double.valueOf(str.equals("") ? "0.00" : str);
	    			return true;
	    		} catch (Exception e) {
	    			return false;
	    		}

	    	}
	

	    	/**
	    	 * 获取合并单元格的值
	    	 */
	    	public String getMergedRegionValue(Sheet sheet, int row, int column) {
	    		int sheetMergeCount = sheet.getNumMergedRegions();
	    		for (int i = 0; i < sheetMergeCount; i++) {
	    			CellRangeAddress ca = sheet.getMergedRegion(i);
	    			int firstColumn = ca.getFirstColumn();
	    			int lastColumn = ca.getLastColumn();
	    			int firstRow = ca.getFirstRow();
	    			int lastRow = ca.getLastRow();
	    			if (row >= firstRow && row <= lastRow) {
	    				if (column >= firstColumn && column <= lastColumn) {
	    					Row fRow = sheet.getRow(firstRow);
	    					Cell fCell = fRow.getCell(firstColumn);
	    					return getCellValue(fCell);
	    				}
	    			}
	    		}
	    		return null;
	    	}
	     
	     
	    	/**
	    	 * 判断指定的单元格是否是合并单元格
	    	 * @param row    行下标
	    	 * @param column 列下标
	    	 */
	    	private static boolean isMergedRegion(Sheet sheet, int row, int column) {
	    		int sheetMergeCount = sheet.getNumMergedRegions();
	    		for (int i = 0; i < sheetMergeCount; i++) {
	    			CellRangeAddress range = sheet.getMergedRegion(i);
	    			int firstColumn = range.getFirstColumn();
	    			int lastColumn = range.getLastColumn();
	    			int firstRow = range.getFirstRow();
	    			int lastRow = range.getLastRow();
	    			if (row >= firstRow && row <= lastRow) {
	    				if (column >= firstColumn && column <= lastColumn) {
	    					return true;
	    				}
	    			}
	    		}
	    		return false;
	    	}
	     
	    	/**
	    	 * 获取单元格的值
	    	 */
	    	public static String getCellValue(Cell cell) {
	    		NumberFormat nf;
	            nf = DecimalFormat.getInstance();
	            nf.setMaximumFractionDigits(9);
	    		if (cell == null) {return "";}
	    		if (cell.getCellType() == 1) {
	    			String str;
	    			str = cell.getStringCellValue().trim();
	    			str=str.replaceAll(" ", "");
	    			str=str.replaceAll("\s*", "");
	    			str=str.replaceAll("(\r\n|\r|\n|\n\r)", "");
	    			return str;
	    		}
	    		if (cell.getCellType() == 4) {
	    			return String.valueOf(cell.getBooleanCellValue()).trim();
	    		}
	    		if (cell.getCellType() ==  2) {
	    			return cell.getCellFormula().trim();
	    		}
	    		if (cell.getCellType() ==  0) {
	    			String str;
                  for(str = nf.format(cell.getNumericCellValue()); str.indexOf(",") > -1; str = (new StringBuilder(String.valueOf(str.substring(0, str.indexOf(","))))).append(str.substring(str.indexOf(",") + 1)).toString());
                  return str.endsWith(".0") ? str.split("\.")[0] : str;
	    		}
	    		if(cell.getCellType() == 3){
                	return  cell.getStringCellValue();
                }
	    		return "";
	    	}

最后

以上就是高兴鸵鸟为你收集整理的2.Java Excel操作读取合并单元格的全部内容,希望文章能够帮你解决2.Java Excel操作读取合并单元格所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部