C# Winfrom实现的肺炎全国疫情实时信息图

运行结果:

5670f079a72c0053a0fd2bcdb328b563.jpeg

using System;
using System.Drawing;
using System.Text;
using NSoup;
using NSoup.Nodes;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Forms;namespace Pneumonia
{public partial class MainForm : DevComponents.DotNetBar.OfficeForm{static string confirmedCount, suspectedCount, deadCount, curedCount, updateTime,dataUpdateTime;static string url = "https://3g.dxy.cn/newh5/view/pneumonia";static int count = 0;static Document doc;public MainForm()
{this.EnableGlass = false;InitializeComponent();this.SizeChanged += new Resize(this).Form1_Resize;  //窗口自适应代码}private void MainForm_Load(object sender, EventArgs e)
{timer1.Enabled = true;timer1.Interval = 1;timer1.Start();WebClient wc = new WebClient();byte[] htmlData = wc.DownloadData(url);string html = Encoding.UTF8.GetString(htmlData);logWrite(html);//将网页内容写入txt文件,以方便查看toolStripStatusLabel1.Text = DateTime.Now.ToString();}private void timer1_Tick(object sender, EventArgs e)
{dataUpdateTime = DateTime.Now.ToString();count++;timer1.Interval = 300000;GetData();lbl1.Text = "☛ 病毒: " + regularMatchStr("getStatisticsService", "virus\":\"(.+?)\",");lbl2.Text = "☛ 传染源: " + regularMatchStr("getStatisticsService", "infectSource\":\"(.+?)\",");lbl3.Text = "☛ 传播途径: " + regularMatchStr("getStatisticsService", "passWay\":\"(.+?)\",");lbl4.Text ="☛ "+regularMatchStr("getStatisticsService", "remark1\":\"(.+?)\",");lbl5.Text ="☛ "+regularMatchStr("getStatisticsService", "remark2\":\"(.+?)\",");Image map =UrlToImage("https://img1.dxycdn.com/2020/0201/450/3394153392393266839-135.png");pictureBox1.Image = map;Image chart = UrlToImage("https://img1.dxycdn.com/2020/0201/693/3394145745204021706-135.png");pictureBox2.Image = chart;updateTimeLbl.Text = "截至 " + updateTime + " 全国数据统计";confirmedLbl.Text = confirmedCount;suspectedLbl.Text = suspectedCount;deadLbl.Text = deadCount;curedLbl.Text = curedCount;}public static void GetData()
{//直接通过url来获取Document对象doc = NSoupClient.Connect(url).Get();//先获取id为artContent的元素,再获取所有的p标签updateTime = ConvertStringToDateTime(regularMatchStr("getStatisticsService", "modifyTime\":(.+?),")).ToString();confirmedCount = regularMatchStr("getStatisticsService", "confirmedCount\":(.+?),");suspectedCount = regularMatchStr("getStatisticsService", "suspectedCount\":(.+?),");deadCount = regularMatchStr("getStatisticsService", "deadCount\":(.+?),");curedCount = regularMatchStr("getStatisticsService", "curedCount\":(.+?),");}#region 下载图片到Imagepublic static Image UrlToImage(string url)
{WebClient mywebclient = new WebClient();byte[] Bytes = mywebclient.DownloadData(url);using (MemoryStream ms = new MemoryStream(Bytes)){Image outputImg = Image.FromStream(ms);return outputImg;}}#endregionpublic static DateTime ConvertStringToDateTime(string timeStamp)
{DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));long lTime = long.Parse(timeStamp + "0000");TimeSpan toNow = new TimeSpan(lTime);return dtStart.Add(toNow);}public static string regularMatchStr(string elementId, string regex)
{Element p = doc.GetElementById(elementId);Regex reg = new Regex(regex, RegexOptions.IgnoreCase);//例如我想提取line中的NAME值Match match = reg.Match(p.Html());string value = match.Groups[1].Value;return value;}public static void logWrite(string Message)
{if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt"))File.Create(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt").Close();string fileName = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt";string content = DateTime.Now.ToLocalTime() + Message + "\r\n";StreamWriter sw = new StreamWriter(fileName, true);sw.Write(content);sw.Close(); sw.Dispose();}private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{if (e.Button == MouseButtons.Left)//判断鼠标的按键            {//点击时判断form是否显示,显示就隐藏,隐藏就显示               if (this.WindowState == FormWindowState.Normal){this.WindowState = FormWindowState.Minimized;this.Hide();}else if (this.WindowState == FormWindowState.Minimized){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}}else if (e.Button == MouseButtons.Right){//右键退出事件                if (MessageBox.Show("是否需要关闭程序?", "提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK)//出错提示                {//关闭窗口                    DialogResult = DialogResult.No;Dispose();Close();}}}private void timer2_Tick(object sender, EventArgs e)
{toolStripStatusLabel1.Text = DateTime.Now.ToString() + "  刷新次数 : " + count + "  最新刷新时间 :" + dataUpdateTime;}private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){// 关闭所有的线程this.Dispose();this.Close();}else{e.Cancel = true;}}private void MainForm_SizeChanged(object sender, EventArgs e)
{//判断是否选择的是最小化按钮if (WindowState == FormWindowState.Minimized){//隐藏任务栏区图标this.ShowInTaskbar = false;//图标显示在托盘区notifyIcon1.Visible = true;}}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){// 关闭所有的线程this.Dispose();this.Close();}}private void 显示ToolStripMenuItem_Click(object sender, EventArgs e){WindowState = FormWindowState.Normal;}}
}

resize类

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Pneumonia
{class Resize{private MainForm _form;public Resize(MainForm form){int count = form.Controls.Count * 2 + 2;float[] factor = new float[count];int i = 0;factor[i++] = form.Size.Width;factor[i++] = form.Size.Height;foreach (Control ctrl in form.Controls){factor[i++] = ctrl.Location.X / (float)form.Size.Width;factor[i++] = ctrl.Location.Y / (float)form.Size.Height;ctrl.Tag = ctrl.Size;}form.Tag = factor;this._form = form;}public void Form1_Resize(object sender, EventArgs e){float[] scale = (float[])this._form.Tag;int i = 2;foreach (Control ctrl in this._form.Controls) //panel的长宽增长到一个固定的值就不会再增长了,原因:Panel的宽和高上限是65535像素(https://blog.csdn.net/dufangfeilong/article/details/41805073?utm_source=blogxgwz5){ctrl.Left = (int)(this._form.Size.Width * scale[i++]);ctrl.Top = (int)(this._form.Size.Height * scale[i++]);ctrl.Width = (int)(this._form.Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);ctrl.Height = (int)(this._form.Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);}}}
}

C# Winform控件自适应窗体大小:方法1(推荐)

参考链接:https://www.cnblogs.com/PER10/p/11541568.html

需求:当窗体尺寸动态改变时,窗体中的各种控件(包括Panel以及Panel中的子控件)可以动态调节自身大小,以适应窗体内容比例。

方法:

第一步,新建一个类,代码如下:

class Resize{private Form _form;public Resize(Form form){int count = form.Controls.Count * 2 + 2;float[] factor = new float[count];int i = 0;factor[i++] = form.Size.Width;factor[i++] = form.Size.Height;foreach (Control ctrl in form.Controls){factor[i++] = ctrl.Location.X / (float)form.Size.Width;factor[i++] = ctrl.Location.Y / (float)form.Size.Height;ctrl.Tag = ctrl.Size;}form.Tag = factor;this._form = form;}public void Form1_Resize(object sender, EventArgs e){float[] scale = (float[])this._form.Tag;int i = 2;foreach (Control ctrl in this._form.Controls) //panel的长宽增长到一个固定的值就不会再增长了,原因:Panel的宽和高上限是65535像素(https://blog.csdn.net/dufangfeilong/article/details/41805073?utm_source=blogxgwz5){ctrl.Left = (int)(this._form.Size.Width * scale[i++]);ctrl.Top = (int)(this._form.Size.Height * scale[i++]);ctrl.Width = (int)(this._form.Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);ctrl.Height = (int)(this._form.Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);}}}第二步,在Form的初始化函数中使用这个类:public Form_StockCount(){InitializeComponent();this.SizeChanged += new Resize(this).Form1_Resize;  //窗口自适应代码}

C# Winform窗体和控件自适应大小:方法2

1.在项目中创建类AutoSizeForm

AutoSizeForm.cs文件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CSharpFormApplication
{class AutoResizeForm{//(1).声明结构,只记录窗体和其控件的初始位置和大小。public struct controlRect{public int Left;public int Top;public int Width;public int Height;}//(2).声明 1个对象//注意这里不能使用控件列表记录 List nCtrl;,因为控件的关联性,记录的始终是当前的大小。//      public List oldCtrl= new List();//这里将西文的大于小于号都过滤掉了,只能改为中文的,使用中要改回西文public List<controlRect> oldCtrl = new List<controlRect>();int ctrlNo = 0;//1;//(3). 创建两个函数//(3.1)记录窗体和其控件的初始位置和大小,public void controllInitializeSize(Control mForm){controlRect cR;cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可AddControl(mForm);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用//this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化//0 - Normalize , 1 - Minimize,2- Maximize}private void AddControl(Control ctl){foreach (Control c in ctl.Controls){  //**放在这里,是先记录控件的子控件,后记录控件本身//if (c.Controls.Count > 0)//    AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用controlRect objCtrl;objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height;oldCtrl.Add(objCtrl);//**放在这里,是先记录控件本身,后记录控件的子控件if (c.Controls.Count > 0)AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用}}//(3.2)控件自适应大小,public void controlAutoSize(Control mForm){if (ctrlNo == 0){ //*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少//*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成controlRect cR;//  cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height;oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可AddControl(mForm);//窗体内其余控件可能嵌套其它控件(比如panel),故单独抽出以便递归调用}float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;//.Height;ctrlNo = 1;//进入=1,第0个为窗体本身,窗体内的控件,从序号1开始AutoScaleControl(mForm, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用}private void AutoScaleControl(Control ctl, float wScale, float hScale){int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;//int ctrlNo = 1;//第1个是窗体自身的 Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始foreach (Control c in ctl.Controls){ //**放在这里,是先缩放控件的子控件,后缩放控件本身//if (c.Controls.Count > 0)//   AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用ctrLeft0 = oldCtrl[ctrlNo].Left;ctrTop0 = oldCtrl[ctrlNo].Top;ctrWidth0 = oldCtrl[ctrlNo].Width;ctrHeight0 = oldCtrl[ctrlNo].Height;//c.Left = (int)((ctrLeft0 - wLeft0) * wScale) + wLeft1;//新旧控件之间的线性比例//c.Top = (int)((ctrTop0 - wTop0) * h) + wTop1;c.Left = (int)((ctrLeft0) * wScale);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加 + wLeft1c.Top = (int)((ctrTop0) * hScale);//c.Width = (int)(ctrWidth0 * wScale);//只与最初的大小相关,所以不能与现在的宽度相乘 (int)(c.Width * w);c.Height = (int)(ctrHeight0 * hScale);//ctrlNo++;//累加序号//**放在这里,是先缩放控件本身,后缩放控件的子控件if (c.Controls.Count > 0)AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用if (ctl is DataGridView){DataGridView dgv = ctl as DataGridView;Cursor.Current = Cursors.WaitCursor;int widths = 0;for (int i = 0; i < dgv.Columns.Count; i++){dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);  // 自动调整列宽  widths += dgv.Columns[i].Width;   // 计算调整列后单元列的宽度和                       }if (widths >= ctl.Size.Width)  // 如果调整列的宽度大于设定列宽  dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;  // 调整列的模式 自动  elsedgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;  // 如果小于 则填充  Cursor.Current = Cursors.Default;}}}}}2.在要自适应大小的Form中自定义全局类对象AutoResizeForm asc = new AutoResizeForm();3.在要自适应大小的Form的load事件和SizeChange事件中执行对象方法private void WidgetAutoResizeForm_Load(object sender, EventArgs e){asc.controllInitializeSize(this);}private void WidgetAutoResizeForm_SizeChanged(object sender, EventArgs e){asc.controlAutoSize(this);}From窗体代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace CSharpFormApplication
{public partial class WidgetAutoResizeForm : Form{AutoResizeForm asc = new AutoResizeForm();public WidgetAutoResizeForm(){InitializeComponent();}private void WidgetAutoResizeForm_Load(object sender, EventArgs e){asc.controllInitializeSize(this);}private void WidgetAutoResizeForm_SizeChanged(object sender, EventArgs e){asc.controlAutoSize(this);}}
}

https://www.cnblogs.com/AmatVictorialCuram/p/5066670.html

WinForm 之 窗口最小化到托盘及右键图标显示菜单

参考链接:https://www.cnblogs.com/xinaixia/p/6216670.html

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#开发AGV地图编辑软件

C#自己开发AGV地图编辑软件&#xff1a; 1、自由添加和删除站点、停车位、小车、运行路径。 2、编辑得地图以XML文件保存。 3、导入编辑好地图的XML文件。 4、程序都是源码&#xff0c;可以直接在此基础上进行二次开发。 下载链接&#xff1a;https://download.csdn.net/d…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…

19个Web前端交互式3D JavaScript框架和库

JavaScript &#xff08;JS&#xff09; 是一种轻量级的解释&#xff08;或即时编译&#xff09;编程语言&#xff0c;是世界上最流行的编程语言。JavaScript 是一种基于原型的多范式、单线程的动态语言&#xff0c;支持面向对象、命令式和声明式&#xff08;例如函数式编程&am…

Spring最新核心高频面试题(持续更新)

1 什么是Spring框架 Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组织和管理应…

OpenAI全新发布文生视频模型:Sora!

OpenAI官网原文链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators#fn-20 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和…

【Vuforia+Unity】AR03-圆柱体物体识别

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 概述 ObjectLink和Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步&#xff1a; 被Observed装饰的类&#xff0c;可以被观察到属性的变化&#xff1b;子组件中ObjectLink装饰器装饰的状…

动态内存管理(下)

动态内存管理&#xff08;上&#xff09;-CSDN博客&#xff08;malloc&#xff0c; realloc&#xff0c; calloc&#xff0c; free函数的用法以及注意事项等知识点&#xff09; 动态内存管理&#xff08;中&#xff09;-CSDN博客&#xff08;常见的内存出错问题) -----------…

Java 学习和实践笔记(15):面向过程和面象对象其实很简单!

学完这一节&#xff0c;才真正明白了什么叫面向对象和面向过程&#xff0c;其实很简单~ 第一个例子&#xff1a;怎样把大象装进冰箱 这个很清楚很容易地可以列出第一步。 第二个例子&#xff1a;怎样制造一台汽车 这个就很难确定哪一步做第一步。 面向过程和面向对象的区别 …

快速学习springsecurity最新版 (版本6.2)---用户认证

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。目前比较主流的是另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富,但是shiro并不简便,这里轻量级安全框架更推荐国产安全框架satokensatoken官网 ​ 一般大型的项目都…

如何在Ubuntu部署Emlog,并将本地博客发布至公网可远程访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题&#xff0c;我觉得很有代表意义。既考察了面试者的基本锁机制运用&#xff0c;也了解了阻塞队列的产生实现原理。先分享出来&#xff0c;以供鉴赏。 面试题&#xff1a;实现一个自定义的阻塞队列&#xff0c…

大数据云计算 - 弹性计算技术全解与实践

文章目录 大数据云计算 - 弹性计算技术全解与实践一、引言弹性&#xff1a;不仅仅是扩展性技术与商业价值 二、基础概念什么是弹性计算&#xff1f;CPU与内存的动态分配与虚拟化的关系 类型公有云与私有云虚拟机、容器与无服务器 优势与挑战优势挑战 实例&#xff1a;Netflix的…

代码随想录算法训练营第二十四天 | 回溯算法理论基础,77. 组合 [回溯篇]

代码随想录算法训练营第二十四天 回溯算法理论基础什么是回溯法回溯法的理解回溯法模板 LeetCode 77.组合题目描述思路参考代码总结优化版本 回溯算法理论基础 文章讲解&#xff1a;代码随想录#回溯算法理论基础 视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇&#…

体验一下UE5.3的Skeletal Editor

UE5.3中增加了蒙皮网格骨架编辑工具&#xff0c;用户无需导出Fbx就可以直接编辑蒙皮网格&#xff0c;支持修改绑定姿势的骨骼位置、修改蒙皮权重、对已蒙皮多边形进行编辑以及对蒙皮网格减免等操作&#xff0c;就来体验一下。 1.加载插件 要使用Skeletal Editor功能&#xff…

Linux第58步_备份busybox生成rootfs根文件系统

备份busybox生成rootfs根文件系统 打开终端 输入“ls回车” 输入“cd linux/回车” 输入“ls回车”&#xff0c;产看“linux”目录下的文件和文件夹 输入“cd nfs/回车”&#xff0c;切换到“nfs”目录 输入“ls回车”&#xff0c;产看“nfs”目录下的文件和文件夹 输入…

Conda管理Python不同版本教程

Conda管理Python不同版本教程 目录 0.前提 1.conda常用命令 2.conda设置国内源&#xff08;以添加清华源为例&#xff0c;阿里云源同样&#xff09; 3.conda管理python库 4.其它 不太推荐 pyenv管理Python不同版本教程&#xff08;本人另一篇博客&#xff0c;姊妹篇&…

力扣 309. 买卖股票的最佳时机含冷冻期

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ C题解&#xff1a;动态规划 状态1&#xff1a;表示持有股票。更新为之前持有股票&#xff08;dp[i-1][0]&#xff09;或者不持有股票且不处于冷冻期后买入&…

【Go语言】Go语言的数据类型

GO 语言的数据类型 Go 语言内置对以下这些基本数据类型的支持&#xff1a; 布尔类型&#xff1a;bool 整型&#xff1a;int8、byte、int16、int、uint、uintptr 等 浮点类型&#xff1a;float32、float64 复数类型&#xff1a;complex64、complex128 字符串&#xff1a;st…

创意办公:专注 ONLYOFFICE,探索办公新境界

一.ONLYOFFICE 介绍 ONLYOFFICE 是一个基于 Web 的办公套件&#xff0c;提供了文档处理、电子表格和演示文稿编辑等功能。它被设计为一个协作工具&#xff0c;支持多人实时协作编辑文档&#xff0c;并且可以在本地部署或者作为云服务使用。 二.ONLYOFFICE 特点和功能 以下是 …