获取Excel部分数据并很据项目要求计算适宜性等级综合指数判断该地区的土壤适宜性

代码运行前请先导入jxl架包,以下代码仅供学习参考:

下图为项目中的Excel:

ExcelTest02类代码如下:

// 读取Excel的类
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ExcelTest02 {
       /*
         *该代码需要先获得excel里面的pH、有机质、氯含量和质地等值
         *然后根据公式IAI(pH)=PH×权重(pH)计算出各个的IAI然后相加
         *根据IAI(总)的值判断该地图土壤是否适宜种植烟草
         */

	static double IAI1;
	static double IAI2;
	static double IAI3;
	static double IAI4;
	static double IAI5;

	public static void main(String args[]) {
		try {
			System.out.println("begini");
			Workbook book = Workbook.getWorkbook(new File("a.xls"));
			// 获得第一个工作表对象
			Sheet sheet = book.getSheet(0);
			// 得到第一列第一行的单元格

			try {
				File file = new File("d:/IAI.txt");
				if (file.exists()) {
					file.delete();
				}
				file.createNewFile();
				BufferedWriter output = new BufferedWriter(new FileWriter(file));

				for (int i = 2; i < 4896; i++) {
					Cell cell1 = sheet.getCell(23, i);// PH
					Cell cell2 = sheet.getCell(24, i);// 有机质
					Cell cell3 = sheet.getCell(33, i);// 氯含量
					Cell cell4 = sheet.getCell(22, i);// 质地

					Cell cell5 = sheet.getCell(4, i);// 省
					Cell cell6 = sheet.getCell(7, i);// 县
					Cell cell7 = sheet.getCell(8, i);// 乡
					Cell cell8 = sheet.getCell(9, i);// 村
					Cell cell9 = sheet.getCell(10, i);// 组

					String ph = cell1.getContents();
					double phWeight = 0.1235;
					computePhValue(TypeConversion(ph), phWeight);

					String youjizhi = cell2.getContents();
					double youjizhiWeight = 0.2075;
					computeYoujizhiValue(TypeConversion(youjizhi),
							youjizhiWeight);

					String lv = cell3.getContents();
					double lvWeight = 0.1112;
					computeLvValue(TypeConversion(lv), lvWeight);

					String zhidi = cell4.getContents();
					double zhidiWeight = 0.3057;
					computeZhidiValue(zhidi, zhidiWeight);

					double houduWeight = 0.2521;
					houdu(houduWeight);

					String sheng = cell5.getContents();
					String xian = cell6.getContents();
					String xiang = cell7.getContents();
					String cun = cell8.getContents();
					String zu = cell9.getContents();

					String shiyixing = null;
					double IAI = IAI1 + IAI2 + IAI3 + IAI4 + IAI5;
					if (IAI < 70.0) {
						shiyixing = "不适宜";
					}
					if (IAI >= 70.0 && IAI < 80.0) {
						shiyixing = "次适宜";
					}
					if (IAI >= 80.0 && IAI < 88.0) {
						shiyixing = "适宜";
					}
					if (IAI >= 88.0) {
						shiyixing = "最适宜";
					}

					System.out.println("第" + (i + 1) + "行"
							+ (IAI1 + IAI2 + IAI3 + IAI4 + IAI5));
					output.write("第" + (i + 1) + "行" + sheng + xian + xiang
							+ cun + zu + "\t" + "IAI:"
							+ (IAI1 + IAI2 + IAI3 + IAI4 + IAI5) + "\t"
							+ shiyixing + "\n");
					output.newLine();
				}
				output.close();
			} catch (Exception ex) {
				System.out.println(ex);
			}
			book.close();
			System.out.println("end");
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	/**
	 *
	 * @param
	 * @return
	 */
	public static double computePhValue(double ph, double phWeight) {
		double result = 0d;
		if (ph == 0) {
			return result;
		}

		if (ph < 4.5) {
			IAI1 = 60.00 * phWeight;
		}
		if (ph == 4.5) {
			IAI1 = 68.75 * phWeight;
		}
		if (ph > 4.5 && ph < 5.0) {
			IAI1 = (30 * ph - 66.25) * phWeight;
		}
		if (ph == 5.0) {
			IAI1 = 83.75 * phWeight;
		}
		if (ph > 5.0 && ph < 5.5) {
			IAI1 = (32.5 * ph - 78.75) * phWeight;
		}
		if (ph == 5.5 || (ph > 5.5 && ph < 6.5) || ph == 6.5) {
			IAI1 = 100 * phWeight;
		}
		if (ph > 6.5 && ph < 7.0) {
			IAI1 = (-16.24 * ph + 205.56) * phWeight;
		}
		if (ph == 7.0) {
			IAI1 = 91.88 * phWeight;
		}
		if (ph > 7.0 && ph < 7.5) {
			IAI1 = (-23.76 * ph + 258.2) * phWeight;
		}
		if (ph == 7.5) {
			IAI1 = 80.00 * phWeight;
		}
		if (ph > 7.5 && ph < 8.0) {
			IAI1 = (-77.14 * ph + 658.55) * phWeight;
		}
		if (ph == 8.0) {
			IAI1 = 41.43 * phWeight;
		}
		if (ph > 8.0) {
			IAI1 = 8.75 * phWeight;
		}
		return result;
	}

	public static double computeYoujizhiValue(double youjizhi,
			double youjizhiWeight) {
		double result = 0d;
		if (youjizhi == 0) {
			return result;
		}

		if (youjizhi < 10) {
			IAI2 = 58.75 * youjizhiWeight;
		}
		if (youjizhi > 10 && youjizhi < 15) {
			IAI2 = (4.37 * youjizhi + 15.05) * youjizhiWeight;
		}
		if (youjizhi == 15) {
			IAI2 = 80.60 * youjizhiWeight;
		}
		if (youjizhi > 15 && youjizhi < 20) {
			IAI2 = (2 * youjizhi + 50.6) * youjizhiWeight;
		}
		if (youjizhi == 20) {
			IAI2 = 90.60 * youjizhiWeight;
		}
		if (youjizhi > 20 && youjizhi < 25) {
			IAI2 = (1.88 * youjizhi + 53) * youjizhiWeight;
		}
		if (youjizhi == 25) {
			IAI2 = 100 * youjizhiWeight;
		}
		if (youjizhi > 25 && youjizhi < 30) {
			IAI2 = (2.12 * youjizhi + 47) * youjizhiWeight;
		}
		if (youjizhi == 30) {
			IAI2 = 89.40 * youjizhiWeight;
		}
		if (youjizhi > 30 && youjizhi < 35) {
			IAI2 = (-2.5 * youjizhi + 164.4) * youjizhiWeight;
		}
		if (youjizhi == 35) {
			IAI2 = 76.90 * youjizhiWeight;
		}
		if (youjizhi > 35 && youjizhi < 40) {
			IAI2 = (-3.38 * youjizhi + 195.2) * youjizhiWeight;
		}
		if (youjizhi == 40) {
			IAI2 = 60.00 * youjizhiWeight;
		}
		if (youjizhi > 40) {
			IAI2 = 48.8 * youjizhiWeight;
		}
		return result;
	}

	public static double computeLvValue(double lv, double lvWeight) {
		double result = 0d;
		if (lv == 0) {
			return result;
		}
		if (lv == 5) {
			IAI3 = 87.50 * lvWeight;
		}
		if (lv > 5 && lv < 10) {
			IAI3 = (2.5 * lv + 75) * lvWeight;
		}
		if (lv == 10) {
			IAI3 = 100 * lvWeight;
		}
		if (lv > 10 && lv < 20) {
			IAI3 = (-0.625 * lv + 106.25) * lvWeight;
		}
		if (lv == 20) {
			IAI3 = 93.75 * lvWeight;
		}
		if (lv > 20 && lv < 30) {
			IAI3 = (-1.625 * lv + 126.25) * lvWeight;
		}
		if (lv == 30) {
			IAI3 = 77.50 * lvWeight;
		}
		if (lv > 30 && lv < 40) {
			IAI3 = (-1.25 * lv + 115) * lvWeight;
		}
		if (lv == 40) {
			IAI3 = 65.00 * lvWeight;
		}
		if (lv > 40 && lv < 50) {
			IAI3 = (-6.5 * lv + 325) * lvWeight;
		}
		if (lv > 50) {
			IAI3 = 0;
		}
		return result;
	}

	public static void computeZhidiValue(String zhidi, double zhidiWeight) {
		if ("沙土".equals(zhidi)) {
			IAI4 = 91.40 * zhidiWeight;
		}
		if ("壤沙土".equals(zhidi)) {
			IAI4 = 100 * zhidiWeight;
		}
		if ("沙壤土".equals(zhidi)) {
			IAI4 = 100 * zhidiWeight;
		}
		if ("壤土".equals(zhidi)) {
			IAI4 = 91.40 * zhidiWeight;
		}
		if ("粉沙壤土".equals(zhidi)) {
			IAI4 = 82.10 * zhidiWeight;
		}
		if ("粘壤土".equals(zhidi)) {
			IAI4 = 72.10 * zhidiWeight;
		}
		if ("粘土".equals(zhidi)) {
			IAI4 = 48.50 * zhidiWeight;
		}
	}

       //由于土层厚度在给出的数据里面并没有,这里选随机数
	public static void houdu(double houduWeight) {
		int len = 5;
		int lens = 5;
		double sum = 0;
		int[] houdu = new int[len];
		double[] IAI5s = new double[lens];

		for (int i = 0; i < len; i++) {
			houdu[i] = (int) (Math.random() * 70 + 20);

			for (int j = 0; j < lens; j++) {
				if (houdu[j] < 20) {
					IAI5s[j] = 32.85 * houduWeight;
				}
				if (houdu[j] > 20 && houdu[j] < 30) {
					IAI5s[j] = (1.855 * houdu[j] - 4.25) * houduWeight;
				}
				if (houdu[j] == 30) {
					IAI5s[j] = 51.40 * houduWeight;
				}
				if (houdu[j] > 30 && houdu[j] < 50) {
					IAI5s[j] = (1.18 * houdu[j] + 16) * houduWeight;
				}
				if (houdu[j] == 50) {
					IAI5s[j] = 75.00 * houduWeight;
				}
				if (houdu[j] > 50 && houdu[j] < 70) {
					IAI5s[j] = (0.715 * houdu[j] + 39.25) * houduWeight;
				}
				if (houdu[j] == 70) {
					IAI5s[j] = 89.30 * houduWeight;
				}
				if (houdu[j] > 70) {
					IAI5s[j] = 100 * houduWeight;
				}
			}
			sum = sum + IAI5s[i];
			IAI5 = sum / 5;
		}
	}

	public static double TypeConversion(String value) {
		double values = 0;
		if (value != "") {
			values = Double.parseDouble(value.trim());
		} else {
			values = 0;
		}
		return values;
	}
}

运行结果如下图所示:

生成的文本内容如下:

注意下:由于没有土层厚度的数据,所以在程序中采用了随机数选取几组数据求平均值,故每次生成的文本内容都不一样

获取Excel部分数据并很据项目要求计算适宜性等级综合指数判断该地区的土壤适宜性,布布扣,bubuko.com

时间: 2024-12-25 13:15:10

获取Excel部分数据并很据项目要求计算适宜性等级综合指数判断该地区的土壤适宜性的相关文章

C# 获取Excel日期数据并与现在时间比较

Excel表中数据: 读取Excel中D1中的数据: DateTime timeNow1 = DateTime.Now;//获取现在时间 DateTime timeNow2;//比较时间 //timediff(timenow1, timenow2, "h"); //读取Excel数据 Excel.Application xapp = new Excel.Application(); string filepath = txt_Excel.Text; Excel.Workbook xbo

php获取excel文件数据

很简单就可以实现,下面为大家简单介绍下 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPExcel.php,两个在同级目录 1 require __DIR__ . './PHPExcel/IOFactory.php'; 2 3 $PHPReader = new \PHPExcel_Reader_Excel2007(); 4 5 //判断文件类型 6 if (!$PHPReader->canRead($filePath)) { 7 $PHPReader = new \PHPExcel

用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量.<s:iterator>标签有一个value属性,用来存放在Action类的方法中存数据的list集合,还有一个id,好像是说指定集合的索引的意思,就是给list集合遍历出来的每个对象加上一个数字标签,反正我是这么理解的,没用过.还有一个很重要,就是var变量,我在s:iterator按ctr

基于BootStrap的initupload()实现Excel上传和获取excel中的数据

简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group"> <button class="btn sbold green" id="" onclick="initUpload('excelFile','/vraxx/rightAxx/upload');"> <span cl

获取Excel数据(或部分数据)并导出成txt文本格式

运行代码前先导入jxl架包,以下代码仅供参考: 测试excel文件(我要获取该excel的内容为省.县.乡.村.组和PH的值): ExcelTest01类代码如下: // 读取Excel的类 import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ExcelT

.net core api项目接收 post、patch 请求 获取不到数据的解决方式

在core 的项目中   发送post 和  patch的请求 ,后端获取不到数据 请求中不添加 contentType :"application/json" 后端  这样是得不到数据的, 查阅资料,发现  推荐 ContentType改为 "application/json" 请求可以通过 但是获取不到数据,如下图 Request  Payload 呵呵.... 将Payload改为标准的json 后台增加一个   FromBody 结果 ,可以get到数据 总

python 获取excel数据 自动登陆

import xlrdimport timeimport unittestfrom selenium import webdriver class u8819(unittest.TestCase): global loginurl global driverpath loginurl = 'http://www.effevo.com' driverpath = 'D:\\chromedriver.exe' userpath = 'D:\\data.xlsx' #获取data.xlsx中的用户数据

自动化接口测试平台:从excel读取数据,传递到request请求中获取不到参数问题

遇到一个问题,将入参的必填参数按照dict格式填入excel表格中,从excel读取数据传递到request请求一直获取不到参数 解决: 1.注意从excel中读取的数据格式为str,传递到request请求的参数格式要求为dict 2.需要将数据反序列化,有以下两种方法: request.post对于参数传入的格式有特殊要求:post请求是我们常说的提交表单,表单的数据内容就是post请求的参数,request实现post请求需设置请求参数data,数据格式 可以为字典.元组.列表和json格

Kettle Excel导入数据到数据库

最近学习大数据的处理,由于项目开发的需要,使用一种简单的方式来将Excel中的数据导入到数据库中,开发使用的kettle工具. kettle工具安装很简单,从官网上下载下来之后,直接解压到制定的盘符下即可(前提是你配置了JAVA的环境变量,path,classpath). 在WINDOWS环境下双击Spoon.bat文件,出现如下图: 点击如图所示的图标,进行本地文件导入的配置 选择红色线框下的选项,点击确定 按照上面的操作,点击确定即可. 直接点击关闭即可. 通过上面两个地方的任意一个都可以创