干部任免管理系统(五)开源了一个c#开发的任免审批表转word的程序

前言:

        好久没有写博文了,最近有几位csdn的网友想找过来借鉴开发的管理系统,因为工作调整我已经不在公司管理干部了,整套系统当时本身就是为了方便自己工作捣鼓的,现在也没人用了。牵涉到打架java运行环境,数据库,整合企业微信登录等等,要用起来也不方便,所以干脆就重新把最核心的转换审批表到实体类,然后再转换为word,以及提取简历功能用c#写了winform程序了。

程序开源地址:

干部任免审批报转换为word: 将干部任免审批表批量转换为word格式

首先声明本人不是专业的程序员,代码是比较烂我自己也知道,纯属给大家提供一个解决问题的思路。

程序实现的主要代码:

       一、Lrmx文件解析:

        本质上中组部任免审批表的lrmx文件就是一个xml格式文档,只是后缀为lrmx格式,核心思想就是解析xml文件,让文件中的内容与我们自己所定义的类对应。

        1. 用到的依赖包:

        1.1 Nlog 及 Nlog.from  日志记录用
        1.2  NPOI 用于操作word和excel的。用这个包最大的好处就是你不需要去考虑客户端是否有安装office。
        1.3  System.Xml.XDocument 和   System.Xml.ReaderWriter   xml的解析工具了。

        2.  定义的几个核心实体类

        2.1 最核心的GanBu类
    public  class GanBu{public   String XingMing;   //姓名  1,0,0   1,0,1public String XingBie;  //性别  1,0,2   1,0,3public String ChuShengNianYue;  //出生年月  YYYYMM格式    1,0,4  1,0,5public String MinZu;  //民族     1,1,0   1,1,1public String JiGuan;   //籍贯  1,1,2     1,1,3public String ChuShengDi;// 出生地  1,1,4  1,1,5public String RuDangShiJian;// 入党时间   1,2,0public String CanJiaGongZuoShiJian;//参加工作时间  1,2,2public String JianKangZhuangKuang;//健康状况  1,2,4public String ZhuanYeJiShuZhiWu;//专业技术职务  1,3,0public String ShuXiZhuanYeYouHeZhuanChang;//熟悉专业有何专长   1,3,2public String QuanRiZhiJiaoYu_XueLi;//全日制教育学历       1,4,2public String QuanRiZhiJiaoYu_XueWei;//全日制教育学位 1,4,2public String QuanRiZhiJiaoYu_XueLi_BiYeYuanXiaoXi;//全日制毕业学校   1,4,4public String QuanRiZhiJiaoYu_XueWei_BiYeYuanXiaoXi;//全日制毕业院校专业     1,5,4public String ZaiZhiJiaoYu_XueLi;//在职教育学历   1,6,2public String ZaiZhiJiaoYu_XueWei;//在职教育学位  1,6,2public String ZaiZhiJiaoYu_XueLi_BiYeYuanXiaoXi;//在职教育毕业院校    1,6,4public String ZaiZhiJiaoYu_XueWei_BiYeYuanXiaoXi;//在职教育毕业院校专业  1,7,4public String XianRenZhiWu;//现任职务     1,8,0public String NiRenZhiWu;//拟任职务    1,9,0public String NiMianZhiWu;//拟免职务   1,10,0public List<JianLi> JianLi;  //简历   1,11,0public String JiangChengQingKuang;//奖惩情况    2,0,0public String NianDuKaoHeJieGuo;//年度考核结果    2,1,0public String RenMianLiYou;//任免理由   2,2,0public   List<JiaTingChengYuan> JiaTingChengYuan;//家庭成员   2,4,1  称谓    2   姓名      3  年龄  4  政治面貌  5  工作单位及职务public String ChengBaoDanWei;//承报单位public String JiSuanNianLingShiJian;//计算年龄时间public String TianBiaoShiJian;//填报时间public String TianBiaoRen;//填报人public String ShenFenZheng;//身份证号码public String ZhaoPian;//  照片public String Version;//版本public int NianLing; //年龄}
        2.2  JianLi 类
   public  class JianLi{public String KaiShiNianYue;public String JieSuNianYue;public String JingLi;  //经历}
        2.3  JiaTingChengYuan 类
   public  class JiaTingChengYuan{public String ChengWei;//称谓public String XingMing;//姓名public String ChuShengRiQi;//出生日期  YYYYMMpublic String ZhengZhiMianMao;//政治面貌public String GongZuoDanWeiJiZhiWu;//工作单位及职务public int NianLing; //年龄}

        3  解析lrmx文件过程

        代码就是读取xml文件,将对应的内容解析赋值给GanBu类

        3.1  完整转换为类的代码
 private GanBu LrmxToClass(string filename) {GanBu ganBu = new GanBu();Type type = ganBu.GetType();try {XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(filename);XmlNodeList nl = xmlDoc.DocumentElement.ChildNodes;foreach (XmlNode node in nl){//Debug.WriteLine(node.Name);if (node.Name != "JianLi" && node.Name != "JiaTingChengYuan"){FieldInfo fieldInfo = type.GetField(node.Name);fieldInfo.SetValue(ganBu, node.InnerText);}if (node.Name == "JianLi"){List<JianLi> jianLiList = new List<JianLi>();string jianli = node.InnerText;int rowNums = 0;string[] JianLiArrayTmp = jianli.Split('\n');List<String> JianLiArray = new List<string>();foreach (string s in JianLiArrayTmp){if (s.Replace("\n", "").Replace("\r","").Trim() != ""){JianLiArray.Add(s.Replace("\r",""));}}foreach (string line in JianLiArray){if (line.Trim() != ""){if (!Tools.isStartWithNumber(line.Trim())){jianLiList[rowNums - 1].JingLi = jianLiList[rowNums - 1].JingLi + " " + line.Trim();}else{JianLi jl = new JianLi();String[] partArray = Regex.Split(line, "  ");int tmpNum = 0;String jingli = "";foreach (string s in partArray){if (tmpNum == 0){//第一列分割的用来做时间拆分string[] a = Regex.Split(s, "--|——");if (a.Length == 1){a = Regex.Split(s, "-|—");}jl.KaiShiNianYue = a[0].Trim().Replace(" ","");if (a.Length == 1){jl.JieSuNianYue = "";}else{jl.JieSuNianYue += a[1].Trim().Replace(" ", "");}tmpNum++;}else{jingli += s.Trim();}}jl.JingLi = jingli;jianLiList.Add(jl);rowNums++;}}}ganBu.JianLi = jianLiList;}if (node.Name == "JiaTingChengYuan"){XmlNodeList node2list = node.ChildNodes;List<JiaTingChengYuan> jtcyList = new List<JiaTingChengYuan>();foreach (XmlNode node2 in node2list){JiaTingChengYuan jtcy = new JiaTingChengYuan();XmlNodeList node3List = node2.ChildNodes;Type t2 = jtcy.GetType();foreach (XmlNode node3 in node3List){FieldInfo fi = t2.GetField(node3.Name);fi.SetValue(jtcy, node3.InnerText.Trim());}jtcy.ChuShengRiQi = jtcy.ChuShengRiQi.Trim().Replace("\n", "").Replace("-", "");if (jtcy.ChuShengRiQi.Length == 6 || jtcy.ChuShengRiQi.Length == 8){jtcy.NianLing = Tools.JiSuanNianLing(jtcy.ChuShengRiQi, Tools.NullToEmpty(ganBu.JiSuanNianLingShiJian), Tools.NullToEmpty(ganBu.TianBiaoShiJian));}jtcyList.Add(jtcy);}ganBu.JiaTingChengYuan = jtcyList;}}//20240718 增加身份证提取出生日期if (ganBu.ChuShengNianYue.Length == 6 || ganBu.ChuShengNianYue.Length == 8){ganBu.NianLing = Tools.JiSuanNianLing(ganBu.ChuShengNianYue, Tools.NullToEmpty(ganBu.JiSuanNianLingShiJian), Tools.NullToEmpty(ganBu.TianBiaoShiJian));}else{if (!string.IsNullOrEmpty(ganBu.ShenFenZheng)){ganBu.ChuShengNianYue = Tools.GetDate(ganBu.ShenFenZheng);ganBu.NianLing = Tools.JiSuanNianLing(ganBu.ChuShengNianYue, Tools.NullToEmpty(ganBu.JiSuanNianLingShiJian), Tools.NullToEmpty(ganBu.TianBiaoShiJian));}}logger.Info(filename + "转换为类成功!");return ganBu;}catch(Exception ex){logger.Error(ex.ToString());logger.Error(filename + "转换为类失败!");return ganBu;}}
        3.2 转换过程中一些要点:        

        3.2.1  对于如何处理简历我的实现思路如下: 因为一条简历有可能会分行的,首先把简历的内容按行存到数组中,如果这行的内容不是数字开头(因为一条简历都是以年份开始的)那么这行就不是一条新的简历,而是一条简历分行了。如果再严格点可以取前四位是否为数字。

        3.2.2 对于干部年龄的计算,如果有填写计算年龄时间那么就用该字段取,如果没有取填表时间,如果都没有取当前时间。如果没有填写出生日期,那么看是否有填写身份证号码。

二、 转换为word过程:     

       转换为word的过程采用的是按照模板来进行内容填充,本来想采用占位符替换的方式,发现有些问题,后来决定还是老老实实通过代码来实现。  审批表核心部分内容实际是一个大大表格,那么就可以按照excel单元格填充的思路来做处理了。

        1.  完整代码

  try{GanBu ganBu = LrmxToClass(filename);                 string[]  tmpArr = filename.Split('\\');string newFileName = tmpArr[tmpArr.Length - 1];string filePath = Path.GetDirectoryName(filename);String targetFilePath = ".\\docx\\"  + filePath.Substring(3, filePath.Length - 3) + "\\" +  newFileName.Substring(0,  newFileName.Length -5) + "-任免审批表.docx"; if (File.Exists(targetFilePath)){File.Delete(targetFilePath);}XWPFDocument docx;using (FileStream stream = File.OpenRead(".\\spbmb.docx")){docx = new XWPFDocument(stream);}foreach (XWPFParagraph ph in docx.Paragraphs){foreach (XWPFRun r in ph.Runs){if (r.Text == "填表人:"){r.SetText("填表人:" + ganBu.TianBiaoRen);}}}if (!string.IsNullOrEmpty(ganBu.ZhaoPian.Replace("\r", "").Replace("\n", ""))){XWPFTableCell imageCell = docx.Tables[1].Rows[0].GetTableCells()[6];XWPFParagraph pg = imageCell.Paragraphs[0];XWPFRun run = pg.CreateRun();byte[] b = Convert.FromBase64String(ganBu.ZhaoPian);InputStream sbs = new ByteArrayInputStream(b);run.AddPicture(new ByteArrayInputStream(b), (int)NPOI.SS.UserModel.PictureType.JPEG, "", 363 * 3600, 490 * 3600);}Boolean ifFirst = true;int num = 0;foreach (XWPFTable table in docx.Tables){for (int i = 0; i < table.Rows.Count; i++){for (int j = 0; j < table.Rows[i].GetTableCells().Count; j++){switch (table.Rows[i].GetTableCells()[j].GetText().Trim().Replace(" ", "").Replace("\r\n","")){case "姓名":if (num == 1){table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.XingMing);}break;case "性别":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.XingBie);break;case "出生年月(岁)":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.ChuShengNianYue.Substring(0, 4) + "." + ganBu.ChuShengNianYue.Substring(4, 2) + "(" + ganBu.NianLing + "岁)");break;case "民族":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.MinZu);break;case "籍贯":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.JiGuan);break;case "出生地":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.ChuShengDi);break;case "入党时间":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.RuDangShiJian);break;case "参加工作时间":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.CanJiaGongZuoShiJian);break;case "健康状况":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.JianKangZhuangKuang);break;case "专业技术职务":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.ZhuanYeJiShuZhiWu);break;case "熟悉专业有何专长":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.ShuXiZhuanYeYouHeZhuanChang);break;case "全日制教育":XWPFParagraph pg = table.Rows[i].GetTableCells()[j + 1].Paragraphs[0];XWPFRun run = pg.CreateRun();run.SetText(ganBu.QuanRiZhiJiaoYu_XueLi);run.AddBreak();run.SetText(ganBu.QuanRiZhiJiaoYu_XueWei);break;case "毕业院校系及专业":if (ifFirst){XWPFParagraph pg2 = table.Rows[i].GetTableCells()[j + 1].Paragraphs[0];XWPFRun run2 = pg2.CreateRun();run2.SetText(ganBu.QuanRiZhiJiaoYu_XueLi_BiYeYuanXiaoXi);run2.AddBreak();run2.SetText(ganBu.QuanRiZhiJiaoYu_XueWei_BiYeYuanXiaoXi);ifFirst = false;}else{XWPFParagraph pg3 = table.Rows[i].GetTableCells()[j + 1].Paragraphs[0];XWPFRun run3 = pg3.CreateRun();run3.SetText(ganBu.ZaiZhiJiaoYu_XueLi_BiYeYuanXiaoXi);run3.AddBreak();run3.SetText(ganBu.ZaiZhiJiaoYu_XueWei_BiYeYuanXiaoXi);ifFirst = true;}break;case "在职教育":XWPFParagraph pg4 = table.Rows[i].GetTableCells()[j + 1].Paragraphs[0];XWPFRun run4 = pg4.CreateRun();run4.SetText(ganBu.ZaiZhiJiaoYu_XueLi);run4.AddBreak();run4.SetText(ganBu.ZaiZhiJiaoYu_XueWei);break;case "现任职务":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.XianRenZhiWu);break;case "拟任职务":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.NiRenZhiWu);break;case "拟免职务":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.NiMianZhiWu);break;case "简历":int lastLine = 1;XWPFParagraph pg5 = table.Rows[i].GetTableCells()[j + 1].Paragraphs[0];XWPFRun run5 = pg5.CreateRun();foreach (JianLi jl in ganBu.JianLi){if (lastLine != ganBu.JianLi.Count){if (ifFirst){run5.SetText(jl.KaiShiNianYue + "--" + jl.JieSuNianYue + "  " + jl.JingLi);ifFirst = false;}else{table.Rows[i].GetTableCells()[j + 1].AddParagraph().CreateRun().SetText(jl.KaiShiNianYue + "--" + jl.JieSuNianYue + "  " + jl.JingLi);}lastLine++;}else{table.Rows[i].GetTableCells()[j + 1].AddParagraph().CreateRun().SetText(jl.KaiShiNianYue + "--" + "    " + jl.JieSuNianYue + "    " + jl.JingLi);}}break;case "奖惩情况":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.JiangChengQingKuang);break;case "年核度结考果":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.NianDuKaoHeJieGuo);break;case "任免理由":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.RenMianLiYou);break;case "家庭主要成员及重要社会关系":List<JiaTingChengYuan> jtcyList = ganBu.JiaTingChengYuan;for (int m = 0; m < jtcyList.Count(); m++){XWPFTableRow tr = table.Rows[i + m + 1];tr.GetTableCells()[1].SetText(jtcyList[m].ChengWei);tr.GetTableCells()[2].SetText(jtcyList[m].XingMing);tr.GetTableCells()[3].SetText(jtcyList[m].NianLing.ToString());tr.GetTableCells()[4].SetText(jtcyList[m].ZhengZhiMianMao);tr.GetTableCells()[5].SetText(jtcyList[m].GongZuoDanWeiJiZhiWu);}break;case "呈报单位":table.Rows[i].GetTableCells()[j + 1].SetText(ganBu.ChengBaoDanWei);break;case "行任政免机意关见":table.Rows[i].GetTableCells()[j + 1].SetText(" 同意 " );break;}}}num++;}System.IO.FileStream output = new System.IO.FileStream(targetFilePath, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);//写入文件docx.Write(output);output.Close();output.Dispose();logger.Info(targetFilePath + "文件生成成功!");}catch (Exception ex){logger.Error(filename + "转换不成功");logger.Error(ex.ToString());}

        2 核心思路和注意点

         2.1 需要填充内容位置判断:

            通过遍历表格中的文字内容来判断,填充的位置就是文字所在单元格位置横向+1 了。

        2.2 需要注意点:

                年度考核结果实际在解析模板中对应字符串为 "年核度结考果", 同样的还有行政任免机关意见对应为“行任政免机意关见” ,这个是个坑。

  总结:

        有些点说通了,会发现实现起来就没什么难度了。批量转换以及子目录这些我就不阐述了。 东西写得也比较粗,如果有需要的朋友可以留言给我,一起完善这个软件了。

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

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

相关文章

HP ilo4服务器硬件监控指标解读

随着企业IT架构的复杂化&#xff0c;服务器的稳定性和可靠性成为保障业务连续性的关键因素。HP ilo4作为HP服务器的一个重要组件&#xff0c;提供了强大的远程管理和监控功能。本文将对使用监控易软件通过HP ilo4进行服务器硬件监控的指标进行解读&#xff0c;帮助运维团队更好…

802.11无线网络权威指南(二):无线帧结构

802.11无线网络权威指南&#xff08;二&#xff09;&#xff1a;无线帧结构 无线协议桢的三种类型无线网络帧结构完整帧格式control frameDuration/IDAddressSequence ControlQoS ControlHT Control 字段Frame Body 帧体FCS 校验域 帧细节管理帧控制帧RTS 帧CTS 帧ACK 帧格式PS…

6.1 面向对象技术-面向对象相关概念

大纲 面向对象基本概念 面向对象分析

LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】

【链表】No. 0206 反转链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 库 介绍 cryptocj 是一个安全的密码库&#xff0c;包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件&#xff1a;NA 场景&#xff1a; OHOS&#xff0c; Linux&#xff…

C#使用csvhelper实现csv的操作

新建控制台项目 安装csvhelper 33.0.1 写入csv 新建Foo.cs namespace CsvSut02;public class Foo {public int Id { get; set; }public string Name { get; set; } }批量写入 using System.Globalization; using CsvHelper; using CsvHelper.Configuration;namespace Csv…

Meta发布Llama 3.1模型

Llama 3.1模型 Meta&#xff08;原Facebook&#xff09;开发的一款大型语言模型&#xff08;LLM&#xff09;&#xff0c;该模型在多个方面展现出了强大的性能和广泛的应用潜力。关于Llama 3.1模型的规模与参数&#xff0c;具体概述如下&#xff1a; 一、模型规模 Llama 3.1…

VBA实例-从Excel整理数据到Word

实现目录 功能需求数据结构复制数据到新sheet并分类数据添加序号、日期、时间三列数据添加序号列添加时间列 将名称和类别复制到word文件中将参数5和参数9中的一个复制到word文件中 实例 功能需求 1、将原始数据中不要的数据剔除 2、原始数据中增加序号、日期和时间三列数据&a…

opengl 写一个3D立方体——计算机图形学编程 第4章 管理3D图形数据 笔记

计算机图形学编程&#xff08;使用OpenGL和C&#xff09; 第4章 管理3D图形数据 笔记 数据处理 想要绘制一个对象&#xff0c;它的顶点数据需要发送给顶点着色器。通常会把顶点数据在C端放入 一个缓冲区&#xff0c;并把这个缓冲区和着色器中声明的顶点属性相关联。 初始化立…

【Unity2D 2022:UI】无法拖拽TextMeshPro组件

在预制体Card上挂载了四个Text Mesh Pro组件&#xff0c;分别命名为Name、HP、ATK、Description。 将预制体Card挂载脚本CardDisplay用来在预制体上显示属性&#xff0c;并创建TextMeshPro对象来接收TextMeshPro组件。 using TMPro; using UnityEngine; using UnityEngine.UI;…

leetcode日记(49)旋转链表

其实不难&#xff0c;就是根据kk%len判断需要旋转的位置&#xff0c;再将后半段接在前半段前面就行。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : …

2、springboot3 vue3开发平台-后端-基础数据准备,MybatisPlus整合

文章目录 1. 基础数据准备2. 整合MybatisPlus3. MybatisPlus 配置3.1 数据源配置3.2 mybatis-plus 分页插件配置3.3 mybatis-plus 自动填充3.4 代码生成器 1. 基础数据准备 直接拿前辈做的表结构使用。 /*Navicat Premium Data TransferSource Server : localhost_my…

sql server 连接报错error 40

做个简单的记录,造成40 的原因有很多,你的错误并不一定就是我遇到的这种情况. 错误描述: 首先我在使用ssms 工具连接的时候是可以正常连接的,也能对数据库进行操作. 在使用 ef core 连接 Sql Server 时报错: Microsoft.Data.SqlClient.SqlException (0x80131904): A network-r…

【Linux】从零开始认识多线程 --- 线程互斥

人生有许多事情 正如船后的波纹 总要过后才觉得美的 -- 余光中 线程互斥 1 线程类的封装1.1 框架搭建1.2 线程启动1.3 线程终止1.4 线程等待1.5 运行测试 2 线程互斥2.1 多线程访问的问题2.2 解决办法 --- 锁2.3 从原理角度理解锁 Thanks♪(&#xff65;ω&#xff65;)&am…

后端返回一个图片链接,前端如何实现下载功能?

纯原创文章&#xff0c;转载请说明来源。 一、背景 要实现一个下载功能&#xff0c;后端直接返回了一个图片的地址https://xxxxx/pic.jpg。如果我们直接通过window.open(url, _blank) 的方式去下载这个图片&#xff0c;会发现 Chrome 浏览器会对这个图片进行预览&#xff0c;…

氧气传感器在汽车制氧检测中的应用

在当今汽车工业中&#xff0c;技术的快速发展不仅带来了驾驶安全性和舒适性的显著提升&#xff0c;还为车辆增加了各种智能功能&#xff0c;以应对不同的驾驶环境和需求。氧气传感器作为一种关键的技术装置&#xff0c;在汽车制氧检测系统中的应用&#xff0c;尤其是针对疲劳驾…

DDoS 究竟在攻击什么?

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式&#xff0c;攻击者通过向目标服务端发送大量的请求&#xff0c;使目标服务端无法进行网络连接&#xff0c;无法正常提供服务。 DDoS 攻击通常是由大量的分布在全球各地的 “僵尸” 计算机&#xff08…

npm下载pnpm

一、提供node_global和node_cache的文件夹 若不存在&#xff0c;可自行新建文件夹 二、配置环境变量 配置NODE_PATH变量&#xff1a; 配置Path变量&#xff1a; 三、执行cmd指令 npm config set prefix "D:\Configure\nodejs\node_global" npm config set cache &…

【Python】Facebook开源时间序列数据预测模型Prophet

文章目录 一、简介二、项目的文件解读三、Prophet类主要方法和参数3.1 主要参数3.2 主要方法 四、用法示例 一、简介 Prophet 是由 Facebook 开发的一个开源工具&#xff0c;用于时间序列数据的预测。它特别适用于处理具有强季节性和趋势的时间序列数据&#xff0c;并且对节假…

【数学建模】——【python】实现【最短路径】【最小生成树】【复杂网络分析】

目录 1. 最短路径问题 - 绘制城市间旅行最短路径图 题目描述&#xff1a; 要求&#xff1a; 示例数据&#xff1a; python 代码实现 实现思想&#xff1a; 要点&#xff1a; 2. 最小生成树问题 - Kruskal算法绘制MST 题目描述&#xff1a; 要求&#xff1a; 示例数据…