Spring MVC:域对象共享数据

news2024/11/24 15:53:13

Spring MVC

  • 前言
  • 域对象共享数据
    • 使用 ModelAndView 向 request 域对象中共享数据
    • 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
    • 使用 @SesionAttributes 注解向 session 域对象中共享数据
    • 使用 Servlet API 向 application 域对象中共享数据

在这里插入图片描述

前言

在上一章中,谈到处理器 Controller 获取请求参数的实现。那么,在处理器 Controller 处理请求后,下一步是将模型数据通过域对象共享的方式(结果会封装成模型视图 ModelAndView 对象)返回给前端控制器 DispatcherServlet 。

模型数据:Model 层中请求处理后的结果(会返回给处理器 Controller )

在这里插入图片描述

域对象共享数据

域对象共享数据,指在 Spring MVC 应用中,多个 Controller 或 Model 对象可以共享相同的数据。通过共享数据,可以避免重复的数据获取和数据传递,提高程序的性能和可维护性。

在 Spring MVC 中,域对象共享数据可以通过多种方式实现:

  1. 使用 ModelAndView 向 request 域对象中共享数据
  2. 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
  3. 使用 @SesionAttributes 注解向 session 域对象中共享数据
  4. 使用 Servlet API 向 application 域对象中共享数据

使用 ModelAndView 向 request 域对象中共享数据

ModelAndView 对象有 model 和 view 两个属性。model 属性用于向请求域共享数据,而 view 属性用于设置视图。

简单示例:
1.首先进行注入字符串

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class DomainObjectSDDemo {
    @RequestMapping("/mavTest")
    public ModelAndView mavTest(){
        ModelAndView mav = new ModelAndView();
        //1.字符串注入
        mav.addObject("name","admin"); //添加数据模型
        mav.setViewName("DomObjSharedData"); //设置视图
        return mav;
    }
}

创建 DomObjSharedData.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/7/22
  Time: 15:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    name = ${name} <%-- 或者 ${requestScope.name} --%>
</body>
</html>

结果如图:
在这里插入图片描述

2.接着进行注入对象
先创建一个实体类 DomainObject ,定义编号、名字和年龄属性 (下面例子中使用到的对象都是 DomainObject )

package cn.edu.springmvcdemo.model;

public class DomainObject {
    private int id;
    private String name;
    private int age;

    public DomainObject() {
        super();
    }

    public DomainObject(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "DomainObject{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

接着,对象注入

package cn.edu.springmvcdemo.controller;

import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class DomainObjectSDDemo {
    @RequestMapping("/mavTest")
    public ModelAndView mavTest(){
        ModelAndView mav = new ModelAndView();
        //1.字符串注入
        mav.addObject("name","admin"); //添加数据模型

        //2.对象注入
        DomainObject domainObject = new DomainObject();
        domainObject.setId(722);
        domainObject.setName("admin");
        domainObject.setAge(18);
        mav.addObject("admin",domainObject);

        mav.setViewName("DomObjSharedData"); //设置视图
        return mav;
    }
}

然后,DomObjSharedData.jsp 添加获取对象的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    name = ${name} <%-- 或者 ${requestScope.name} --%>
    <br>
    user = ${admin}
</body>
</html>

结果如图:
在这里插入图片描述

3.最后进行注入 list 集合与 map 集合
先在 pom.xml 中添加依赖

<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
  <groupId>org.apache.taglibs</groupId>
  <artifactId>taglibs-standard-impl</artifactId>
  <version>1.2.5</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
<dependency>
  <groupId>org.apache.taglibs</groupId>
  <artifactId>taglibs-standard-spec</artifactId>
  <version>1.2.5</version>
</dependency>

接着,list 集合和 map 集合注入

package cn.edu.springmvcdemo.controller;

import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class DomainObjectSDDemo {
    @RequestMapping("/mavTest")
    public ModelAndView mavTest(){
        ModelAndView mav = new ModelAndView();
        //1.字符串注入
        mav.addObject("name","admin"); //添加数据模型

        //2.对象注入
        DomainObject domainObject1 = new DomainObject();
        domainObject1.setId(722);
        domainObject1.setName("admin");
        domainObject1.setAge(18);
        mav.addObject("admin",domainObject1);

        //3. list 集合注入
        DomainObject domainObject2 = new DomainObject();
        domainObject2.setId(723);
        domainObject2.setName("administrator");
        domainObject2.setAge(20);
        mav.addObject("administrator",domainObject2);

        List<DomainObject> domainObjects = new ArrayList<>();
        domainObjects.add(domainObject1);
        domainObjects.add(domainObject2);
        mav.addObject("domainObjects",domainObjects); //存入 List 类型数据

        //3. map 集合注入
        Map<Integer,DomainObject> map = new HashMap<Integer,DomainObject>();
        map.put(1,domainObject1);
        map.put(2,domainObject2);
        mav.addObject("map",map); //存入 Map 类型数据

        mav.setViewName("DomObjSharedData"); //设置视图
        return mav;
    }
}

然后,DomObjSharedData.jsp 添加获取 list 集合和 map 集合的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
    name = ${name} <%-- 或者 ${requestScope.name} --%>
    <br>
    user = ${admin}
    <br>

    <c:forEach var="domainObject" items="${domainObjects}">
        domainObjects = ${domainObject}<br>
        domainObject_names = ${domainObject.name}<br>
    </c:forEach>
    <br>

    <c:forEach var="map" items="${map}">
        map = ${map}<br>
    </c:forEach>
</body>
</html>

注:这次需要重启 JRebel 才能正常显示

结果如图:
在这里插入图片描述

使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据

使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据是项目开发中相对比较常用的方式。与使用 ModelAndView 相比,更简单便捷些。

简单示例:
在上面案例的基础上,只需在 DomainObjectSDDemo 类中进行修改
1.使用 Map 向 request 域对象中共享数据

package cn.edu.springmvcdemo.controller;

import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;

@Controller
public class DomainObjectSDDemo {
    @RequestMapping("/mvTest1")
    public String mvTest1(Map<String,Object> map){
        //注入字符串
        map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");

        //注入对象
        DomainObject domainObject1 = new DomainObject();
        domainObject1.setId(722);
        domainObject1.setName("admin");
        domainObject1.setAge(18);
        map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);

        //主要区别在于 map.put() 和 mav.addObject(),不一一演示

        return "DomObjSharedData"; /**
                                        对比使用 ModelAndView :
                                        ModelAndView mav = new ModelAndView();
                                        mav.setViewName("DomObjSharedData"); //设置视图
                                        return mav;
                                    **/
    }
}

结果如图:
在这里插入图片描述

2.使用 Model 向 request 域对象中共享数据

@RequestMapping("/mvTest2")
//对比使用 map 的方法参数:Map<String,Object> map
public String mvTest2(Model model){
    //注入字符串
    //对比使用 Map:map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");
    model.addAttribute("name","admin");

    //注入对象
    DomainObject domainObject1 = new DomainObject();
    domainObject1.setId(722);
    domainObject1.setName("admin");
    domainObject1.setAge(18);
    //对比使用 Map:map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);
    model.addAttribute("admin",domainObject1);

    //主要区别在于 model.addAttribute()、map.put() 和 mav.addObject(),不一一演示

    return "DomObjSharedData"; /**
                                     对比使用 ModelAndView :
                                     ModelAndView mav = new ModelAndView();
                                     mav.setViewName("DomObjSharedData"); //设置视图
                                     return mav;
                               **/
}

结果如图:
在这里插入图片描述

3.使用 ModelMap 向 request 域对象中共享数据

@RequestMapping("/mvTest3")
//而 ModelMap 将 model 和 map 综合起来了。即既可以使用 addAttribute() 也可以使用 put()
//方法参数为 ModelMap 
public String mvTest3(ModelMap modelMap){
    modelMap.addAttribute("name","admin"); // 或者 modelMap.put("name","admin");

    DomainObject domainObject1 = new DomainObject();
    domainObject1.setId(722);
    domainObject1.setName("admin");
    domainObject1.setAge(18);
    modelMap.put("admin",domainObject1); // 或者 modelMap.addAttribute("admin",domainObject1);
    return "DomObjSharedData";
}

结果如图:
在这里插入图片描述

总体来讲,向 request 域对象中共享数据的各种方式区别不大,自行根据个人喜好习惯选择使用即可。

使用 @SesionAttributes 注解向 session 域对象中共享数据

使用 @SesionAttributes 注解可以将数据共享到 session 域对象中,同时也共享到 request 域对象中。

@SesionAttributes 注解属性

  • value :通过键来指定共享的值
  • types :通过类型来指定共享的值
//只能用于类级别
//书写格式
@SessionAttributes(value = "xxx",types = "xxx.class")
//或者
@SessionAttributes(value = {"xxx","xxx"...},types = {"xxx.class","xxx.class"...})

简单示例:
使用 @SesionAttributes 注解向 session 域对象中共享数据

package cn.edu.springmvcdemo.controller;

import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

@SessionAttributes(value = {"name","admin"}) //或者 @SessionAttributes(types = {String.class,DomainObject.class})
@Controller
public class DomainObjectSDDemo_SA {
    @RequestMapping("/saTest")
    public String saTest(ModelMap modelMap){
        //字符串注入
        modelMap.put("name","admin");

        //对象注入
        //实体类 DomainObject ,ModelAndView 的示例中已创建
        DomainObject domainObject1 = new DomainObject();
        domainObject1.setId(722);
        domainObject1.setName("admin");
        domainObject1.setAge(18);
        modelMap.put("admin", domainObject1);
        return "DomObjSharedData_SA";
    }
}

创建 DomObjSharedData_SA.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    获取 request 域中的 name : ${requestScope.name} <br>
    获取 session 域中的 name : ${sessionScope.name} <br>
    admin = ${admin}
</body>
</html>

结果如图:
在这里插入图片描述

使用 Servlet API 向 application 域对象中共享数据

使用 Servlet API 可以将数据共享到 application 域对象中。虽然不能同时共享到其他域对象中,但也可以使用 Servlet API 将数据共享到 session 域对象与 request 域对象中。

简单示例:
使用 Servlet API 向 application 域对象、session 域对象与 request 域对象中共享数据

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class DomainObjectSDDemo_SAPI {
    @RequestMapping("/sapiTest")
    public String sapiTest(HttpSession session, HttpServletRequest request){
        //1.向 application 域对象共享数据
        ServletContext application = session.getServletContext();
        application.setAttribute("name", "admin1");

        //2.向 session 域对象共享数据
        session.setAttribute("name","admin2");

        //3.向 request 域对象共享数据
        request.setAttribute("name","admin3");
        return "DomObjSharedData_SAPI";
    }
}

创建 DomObjSharedData_SAPI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    获取 application 域中的 name : ${applicationScope.name} <br>
    获取 session 域中的 name : ${sessionScope.name} <br>
    获取 request 域中的 name : ${requestScope.name}
</body>
</html>

结果如图:
在这里插入图片描述

@ModelAttribute 注解介绍
1.使用 @ModelAttribute 注解在方法上:在执行目标方法前,先从上到下逐一执行有 @ModelAttribute 注解的方法
2.使用 @ModelAttribute 注解在方法的参数上:用于从 Model 、Form 表单或者 URL 请求参数中获取属性值

通常 @ModelAttribute 注解应用在修改对象的某些属性值,而其他属性值不允许修改或保持不变的场景中

简单示例:
创建修改信息的页面 DomObjSharedData_UPDATE.jsp

<%-- 只修改年龄,id 隐藏,名字不允许修改 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h3>信息修改</h3>
    <form action="${pageContext.request.contextPath}/updateTest" method="post">
        <input type="hidden" name="id" value="722" />
        年龄:<input type="text" name="age" />
        <input type="submit" value="修改"/>
    </form>
</body>
</html>

创建成功修改跳转的页面 accessing.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h2>提交成功!</h2>
</body>
</html>

在没有使用 @ModelAttribute 注解前:不作修改的属性值可能为空,或者使用传统的方法修改实现
在这里插入图片描述
在这里插入图片描述

在 Spring MVC 中,提供的 @ModelAttribute 注解也可以实现修改

package cn.edu.springmvcdemo.controller;

import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class DomainObjectSDDemo_MA {
    //先执行有 @ModelAttribute 注解的方法
    @ModelAttribute
    //默认 id 参数赋值为 null ,@RequestParam 注解知识点
    private void getUser(@RequestParam(value = "id",required = false) Integer id, ModelMap modelMap){
        System.out.println("id ==" + id);
        DomainObject domainObject = new DomainObject();
        //通过传递的 id 值匹配数据库中对应的记录,返回一个对应的对象
        //模拟:获取 id 对应的对象属性值
        domainObject.setName("admin");
        domainObject.setAge(18);
        //注入( DomainObject对象,attributeName 规定写为 domainObject )
        modelMap.addAttribute("domainObject",domainObject); //注:attributeName 与对应的对象名字保持一致,首字母改为小写
    }

    //信息修改
    @RequestMapping("/update")
    public String update(){
        return "DomObjSharedData_UPDATE";
    }

    //修改成功
    @RequestMapping("/updateTest")
    public String updateTest(DomainObject domainObject){
        System.out.println("修改后的信息:" + domainObject);
        //信息修改后为:DomainObject{id=722, name='null', age=18},这里 name 为空,直接全部覆盖会把数据库的 name 信息也修改为 null
        //或者
        /**
         * 传统做法:
         * 第一步:通过传递的id值匹配数据库中对应的记录,返回一个对应的对象
         * 第二步:将传递的对象要修改的属性覆盖到从数据库中查询出的对象的属性里
         * 第三步:调用 service 层的修改方法,实现修改
         * 这里思想就是单一对修改的字段进行覆盖。
         * **/

		//使用 @ModelAttribute 注解后,可以直接全部覆盖,省略了传统做法的第一二步,直接调用 service 层的修改方法即可
        return "accessing";
    }
}

注:在注入对象中,关于 attributeName 的命名也可以使用第二种方式。如图:
在这里插入图片描述

测试结果:
1.填写要修改的年龄,点击提交
在这里插入图片描述

2.修改成功,同时没有修改的信息保持不变,而不是为空值
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

发收一体的2.4G射频合封芯片Y62G,内置九齐MCU

宇凡微2.4GHz发收一体合封芯片Y62G是一款高度集成的系统芯片&#xff0c;融合了2.4G芯片G350和微控制器&#xff08;MCU&#xff09;功能&#xff0c;为开发人员提供了更好的设计自由度和成本效益的解决方案。以下是Y62G芯片的主要特点和优势&#xff1a; 高度合封集成 Y62G芯…

细说GNSS模拟器的RTK功能(二)应用实例01 — 硬件和软件设置

在之前的文章中&#xff0c;我们介绍了什么是RTK&#xff0c;接下来我们将为大家展示RTK使用实例&#xff0c;可以通过两种不同的方法来模拟RTCM的使用&#xff0c;一种是基于RTCM插件&#xff0c;另一种是基于多实例来模拟两个同步的射频信号。 RTK插件方法可以帮助没有基础接…

iOS系统下轻松构建自动化数据收集流程

在当今信息爆炸的时代&#xff0c;我们经常需要从各种渠道获取大量的数据。然而&#xff0c;手动收集这些数据不仅耗费时间和精力&#xff0c;还容易出错。幸运的是&#xff0c;在现代科技发展中有两个强大工具可以帮助我们解决这一问题——Python编程语言和iOS设备上预装的Sho…

RPC框架

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行

这个问题的原因是&#xff0c;主机上缺乏VMware安装后没有VMnet1和VMnet8网卡。 所以

2023年超爆火的15款AI设计软件

随着人工智能技术的快速发展&#xff0c;数字插画之外的“泛设计”行业的从业者也开始在AI中逐渐受益。可能很多设计师还停留在“AI设计软件只能做一些动漫风格插画”的认知中&#xff0c;实际上受到行业需求提升的刺激&#xff0c;软件厂商已经开始积极研究并发布更多针对特定…

uni——input的提示语(placeholder)修改样式等

案例说明 操控input的提示语 案例代码 <template><view><view><input type"text" placeholder"请输入内容" :placeholder-class"isDialogHidden?redColor:" /><button click"hideDialog">按钮</…

正中优配:股票k线图入门?

随着股票市场的不断发展&#xff0c;对股民们来说&#xff0c;了解股票行情变得越来越重要。而股票k线图能够帮助股民们更好地调查和剖析股票行情。但关于一些没有相关经历的新手来说&#xff0c;股票k线图可能会带来一些困惑。那么&#xff0c;股票k线图入门应该从哪些方面着手…

蓝牙资讯|2023Q2全球TWS耳机出货量同比增长15%

TechInsights 报告指出&#xff0c;2023 年二季度全球 TWS 耳机出货量同比增长 15%&#xff0c;收益同比增长 5.1%。 苹果仍以 17% 出货量份额和 43% 的收益份额主导 TWS 市场&#xff0c;但来自印度和中国厂商的竞争&#xff0c;使苹果的份额有所下降。 在收益方面&#x…

浏览器是如何验证SSL证书的?

事实上&#xff0c;SSL证书作为目前网站数据安全的第一道防线&#xff0c;已被大部分企业所熟知。然而&#xff0c;这份认知主要是关于SSL证书可以实现网站HTTPS加密保护及身份的可信认证&#xff0c;防止传输数据的泄露或篡改方面&#xff0c;对于浏览器到底是如何验证SSL证书…

python安装wind10

一、下载: 官网:Python Releases for Windows | Python.org 二、安装 双击下载的安装程序文件。这将打开安装向导。安装界面图下方两个框的" Use admin privileges wheninstalling py. exe和” Add python. exe to PATH"都要勾选,一定要勾选!一定要勾选!一定要勾选…

昆明Sectigo dv通配符https证书

Sectigo是近些年发展比较快速的CA认证机构&#xff0c;Sectigo比较重视国际发展&#xff0c;先后成立了亚太审核中心等机构&#xff0c;是一家全球知名的数字证书颁发机构&#xff0c;Sectigo成立几十年来在全球范围内都受到信任。 1.Sectigo旗下的通配符https证书是市场占有率…

商城结算系统_商户结算_商户结算流程_OctShop

商城财务系统是商城比较重要的大系统&#xff0c;主要管理着所有交易、结算、对账、清分、支付等的资金出入&#xff0c;如&#xff1a;商家结算&#xff0c;商家抽成、扫码收款、用户分润与账户余额&#xff0c;用户分润与账户积分&#xff0c;下单支付&#xff0c;订单退款&a…

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

台灯显色指数多少好?挑选护眼台灯需要注意什么

台灯可以说家家必备&#xff01;家中有上学的小孩更是需要一款好台灯&#xff0c;因为看书、写字、做作业都离不开台灯&#xff0c;一款好的台灯不仅会提供明亮的学习环境&#xff0c;而且还能保护视力&#xff0c;预防近视&#xff0c;因此&#xff0c;挑选台灯绝对不可以马虎…

LeetCode 剑指offer 09.用两个栈实现队列

LeetCode 剑指offer 09.用两个栈实现队列 题目描述 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回…

未来十年,AIGC将彻底颠覆内容生产行业

1950年&#xff0c;艾伦图灵提出了著名的“图灵测试”给出了判定机器是否具有“智能”的试验方法。从某种程度上&#xff0c;人工智能从那时起就被赋予了用于内容创作的期许。 经过了半个多世纪的发展&#xff0c;随着数据快速积累、算力性能提升和算法效力增强&#xff0c;我…

Execl+Python

一、读取Execl 1.获取单元格B2到C5区域内的数据 import openpyxlnew_filename data/normal_1000.xlsx wb openpyxl.load_workbook(new_filename) _sheet wb[北京] #根据sheet名字获取内容 for cell_row in _sheet[B2:C5]:for cell in cell_row:print(cell.value)#获取第一…

【Elsevier旗下】中科院1区TOP,影响因子9分+,23天录用!极速见刊!

极速见刊推荐 中科院 1区&#xff08;TOP&#xff09; 出版社&#xff1a;Elsevier 影响因子&#xff1a;IF&#xff08;2022&#xff09;9.0-10.0 期刊分区&#xff1a;JCR1区&#xff0c;中科院1区&#xff08;TOP&#xff09; 检索情况&#xff1a;SCIE 在检&#xff…

【C语言】深度讨论使代码更严谨,更优雅的方式

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将从多个部分探讨如何写出更严谨&#xff0c;更优雅的代码。 &#x1f30f;该文章借鉴《高质量 C/C 编程指南》——…