当前位置: 首页 > news >正文

使用 Python 创建多栏 Word 文档 – 详解

目录

引言

一、工具与安装

二、Python 在 Word 中创建简单的多栏布局

三、Python 在 Word 文档的栏间添加分隔线

四、Python 从Word文档的指定位置开启多栏设置

五、Python 为多栏 Word 文档的各栏添加页码


引言

在文档设计中,排版不仅决定了内容的呈现方式,还直接影响读者的阅读体验。多栏布局作为一种经典的排版形式,广泛应用于新闻简报、宣传手册和学术论文等场景。通过合理划分页面空间,多栏文档不仅能够提升视觉美感,还能使信息更加清晰易读。

在本篇博客中,我们将深入探讨如何使用 Python 创建多栏 Word 文档,具体涵盖以下内容:

  • Python 在 Word 中创建简单的多栏布局
  • Python 在 Word 文档的栏间添加分隔线
  • Python 从Word文档的指定位置开启多栏设置
  • Python 为多栏 Word 文档的各栏添加页码

一、工具与安装

要通过 Python 创建多栏 Word 文档,需借助合适的 Word 处理库。本文选用 Spire.Doc for Python 库。

(一)Spire.Doc for Python 库简介

Spire.Doc for Python 是一款独立的库,它能够以编程方式便捷地操作 Word 文档。该库支持创建、读取与编辑多种格式的 Word 文档,如 Doc、Docx、Docm、Dot、Dotx、Dotm 等,且无需依赖微软 Office 或其他额外软件。此外,它还具备将 Word 文档转换为多种文件格式的能力,包括 PDF、RTF、HTML、Text、Image、SVG、ODT、PostScript、PCL 以及 XPS 等。

(二)安装方法

在开始前,需在终端窗口运行以下命令,从 PyPI 安装 Spire.Doc for Python:

pip install Spire.Doc

二、Python 在 Word 中创建简单的多栏布局

要在 Word 文档中创建多栏布局,可以使用 Section.AddColumn() 方法。此方法可依据指定的栏宽与间距向文档的特定节添加栏。

以下 Python 代码展示了如何从头开始创建一个包含三栏的 Word 文档:

from spire.doc import *# 创建一个新的Word文档
doc = Document()
# 添加一个节
section = doc.AddSection()# 设置页面边距(可选设置)
section.PageSetup.Margins.All = 72# 设置页面大小和方向(可选设置)
# section.PageSetup.PageSize = PageSize.A3()
# section.PageSetup.Orientation = PageOrientation.Landscape# 向节中添加3栏,指定栏宽和间距
section.AddColumn(150, 20)
section.AddColumn(150, 20)
section.AddColumn(150, 20)# 指定段落文本内容
text = "在快速发展的时代,知识的获取与技能的提升已成为每个人追求成功的核心要素。无论是职场新人还是资深专业人士,持续学习都是一种不可或缺的能力。通过不断探索新领域、积累实践经验,我们不仅能够应对变化的环境,还能在自己的领域中实现突破。同时,培养良好的思考习惯,关注细节并保持开放的心态,有助于抓住每一个潜在的机会。成功并非一蹴而就,而是一个需要坚持、耐心和努力的过程。每一次的付出,都会成为未来道路上的基石。"# 指定段落文本字体
format = CharacterFormat(doc)
format.FontName = "宋体"
format.FontSize = 11.0# 向节添加一个段落
paragraph = section.AddParagraph()
# 再次向节添加一个段落
paragraph = section.AddParagraph()
# 将文本添加到段落中
textRange = paragraph.AppendText(text)
textRange.ApplyCharacterFormat(format)
# 向段落添加栏分隔符
paragraph.AppendBreak(BreakType.ColumnBreak)
# 向节添加一个段落
paragraph = section.AddParagraph()
# 将文本添加到段落中
textRange = paragraph.AppendText(text)
textRange.ApplyCharacterFormat(format)
# 向段落添加栏分隔符
paragraph.AppendBreak(BreakType.ColumnBreak)
# 向节添加第三个段落
paragraph = section.AddParagraph()
# 将文本添加到段落中
textRange = paragraph.AppendText(text)
textRange.ApplyCharacterFormat(format)# 设置节中段落的水平文本对齐方式,使内容更美观(可选设置)
for para_index in range(section.Paragraphs.Count): section.Paragraphs[para_index].Format.HorizontalAlignment = HorizontalAlignment.Justify# 保存文档
doc.SaveToFile("创建多栏文档.docx", FileFormat.Docx2013)
doc.Close()

Python 创建多栏Word文档

有时,我们可能需要将现有 Word 文档中的文本转换为多栏,而非新建文档。以下 Python 代码展示了如何将现有 Word 文档中的文本转换为两栏:

from spire.doc import *# 打开一个Word文档
doc = Document()
doc.LoadFromFile("AI.docx")# 获取第一个节
section = doc.Sections[0]# 设置页面大小和方向(可选设置)
# section.PageSetup.PageSize = PageSize.A3()
# section.PageSetup.Orientation = PageOrientation.Landscape# 设置节中段落的水平文本对齐方式,使内容更美观(可选设置)
for para_index in range(section.Paragraphs.Count):   section.Paragraphs[para_index].Format.HorizontalAlignment = HorizontalAlignment.Justify# 向节添加一栏,指定栏宽和间距
section.AddColumn(150, 20)# 保存修改后的文档
doc.SaveToFile("转换Word文档内容为多栏.docx", FileFormat.Docx2016)
doc.Close()

Python 转换Word文档的内容为多栏

三、Python 在 Word 文档的栏间添加分隔线

如果希望在 Word 文档的各栏之间添加分隔线,以使内容呈现更规整,可通过将 Section.PageSetup.ColumnsLineBetween 属性设置为 True 来实现。

以下 Python 代码展示了如何在 Word 文档的栏间添加分隔线:

from spire.doc import *# 打开一个Word文档
doc = Document()
doc.LoadFromFile("AI.docx")# 获取第一个节
section = doc.Sections[0]# 设置页面大小和方向(可选设置)
# section.PageSetup.PageSize = PageSize.A3()
# section.PageSetup.Orientation = PageOrientation.Landscape# 设置节中段落的水平文本对齐方式,使内容更美观(可选设置)
for para_index in range(section.Paragraphs.Count):   section.Paragraphs[para_index].Format.HorizontalAlignment = HorizontalAlignment.Justify# 向节添加一栏,指定栏宽和间距
section.AddColumn(150, 30)# 添加栏间分隔线
section.PageSetup.ColumnsLineBetween = True# 保存修改后的文档
doc.SaveToFile("创建带分隔线多栏文档.docx", FileFormat.Docx2016)
doc.Close()

Python 创建带分隔线多栏Word文档

四、Python 从Word文档的指定位置开启多栏设置

如果要在文档的特定位置开启多栏设置,例如在某个特定段落之后,可通过以下步骤来实现:

  1. 插入节分隔符:首先,使用 Paragraph.InsertSectionBreak(SectionBreakType.NoBreak) 方法在指定位置插入新的节分隔符,后续段落内容将移至新节。
  2. 添加栏:运用 Section.AddColumn() 方法向新节添加栏。

通过这种方式,我们能够精准控制文档中栏的起始位置。

以下 Python 代码展示了如何将 Word 文档中特定段落之后的文本转换为两栏:

from spire.doc import *# 打开一个Word文档
doc = Document()
doc.LoadFromFile("AI.docx")# 获取第一个节
section = doc.Sections[0]# 设置页面大小和方向(可选设置)
# section.PageSetup.PageSize = PageSize.A3()
# section.PageSetup.Orientation = PageOrientation.Landscape# 设置节中段落的水平文本对齐方式,使内容更美观(可选设置)
for para_index in range(section.Paragraphs.Count):   section.Paragraphs[para_index].Format.HorizontalAlignment = HorizontalAlignment.Justify# 获取节中的第3个段落
paragraph = section.Paragraphs[2]# 插入节分隔符,将该段落之后的内容移至新节
paragraph.InsertSectionBreak(SectionBreakType.NoBreak)# 向新节添加一栏,指定栏宽和间距
doc.Sections[1].AddColumn(150, 20)# 保存修改后的文档
doc.SaveToFile("在指定位置创建多栏文档.docx", FileFormat.Docx2016)
doc.Close()

Python 在Word文档指定位置创建多栏

五、Python 为多栏 Word 文档的各栏添加页码

在多栏 Word 文档里,倘若各栏分别代表不同的内容板块,又或者需要为每栏单独设定分页规则,那么为每栏添加独立页码就是一项必要的操作。

例如,对于一个两栏布局的 Word 文档,各栏页码规律如下:

  • 栏 1:页码为 1、3、5……(奇数页)
  • 栏 2:页码为 2、4、6……(偶数页)

然而,由于两栏同属一个物理页面,理论上页码显示相同。要实现每栏单独编号,需借助页码域计算页码,并利用表格将页码对齐至指定位置。

以下是为两栏 Word 文档的每栏添加页码的关键步骤:

(一)计算每栏页码

通过分析栏的特点,可推导出:奇数栏页码计算公式为 2 * 当前页码 - 1;偶数栏页码计算公式为 2 * 当前页码;总页码应为 2 * 实际总页数。

在微软 Word 中,{ PAGE } 域用于显示当前页码,{ NUMPAGES } 域用于显示总页数。因此:

  • 栏 1:计算第一栏页码的表达式为 = 2 * { PAGE } - 1
  • 栏 2:计算第二栏页码的表达式为 = 2 * { PAGE }
  • 总页码:计算总页码的表达式为= 2 * { NUMPAGES }

为实现动态计算和显示页码,需使用表达式域。表达式域由Field(域)+FieldMark(域分隔符)+FieldMark(域结束符)组成。页码域(如 {PAGE} 或 { NUMPAGES })可嵌套于表达式域及其分隔符之间。完整的表达式域结构如下:

Field(表达式域)
        +Field(页码域 {PAGE} 或 { NUMPAGES })+FieldMark(页码域的分隔符)+FieldMark(页码域的结束符)
+FieldMark(表达式域的分隔符)+FieldMark(表达式域的结束符)

通过将页码域嵌套于表达式域内,即可为每栏计算并显示独立页码。

(二)使用表格对齐页码

为准确放置与对齐页码,需执行以下操作:

  • 在页脚插入一个无边框的一行两列表格。
  • 将栏 1 页码置于左边单元格,栏 2 页码置于右边单元格。
  • 将两个单元格内的文本均设置为居中对齐,以实现简洁美观的布局。

以下 Python 代码演示了如何实现上述步骤,为两栏 Word 文档的每栏添加独立页码:

from spire.doc import *# 插入FieldMark(域分隔符和域结束符)
def Insert_Field_Mark(document, paragraph, field):# 添加域分隔符separator_field_mark = FieldMark(document, FieldMarkType.FieldSeparator)paragraph.Items.Add(separator_field_mark)# 添加域结束符end_field_mark = FieldMark(document, FieldMarkType.FieldEnd)paragraph.Items.Add(end_field_mark)field.End = end_field_mark# 添加页码
def Add_Page_Number(footer_paragraph, document, direction):# 添加文本footer_paragraph.AppendText("第 ")# 创建表达式域(用于计算和显示当前页码)current_page_field = Field(document)current_page_field.Type = FieldType.FieldExpression# 设置前半部分域代码current_page_field.Code = "=2*"footer_paragraph.Items.Add(current_page_field)# 创建嵌套的PAGE域,用于获取当前页码field_page = Field(document)field_page.Type = FieldType.FieldPagefooter_paragraph.Items.Add(field_page)# 为PAGE域添加域标记(分隔符和结束符)Insert_Field_Mark(document, footer_paragraph, field_page)# 判断是左侧分栏页码还是右侧,如果是左侧,则页码表达式"减一"即"-1"# 左侧分栏页码对应计算表达式是   2*{PAGE}-1# 右侧分栏页码对应计算表达式是   2*{PAGE}# page表示当前页码if direction == "Left":footer_paragraph.AppendText("-1")# 为PAGE域添加域分隔符和域结束符Insert_Field_Mark(document, footer_paragraph, current_page_field)# 添加文本footer_paragraph.AppendText(" 页,共 ")# 创建表达式域(用于计算和显示总页码)total_page_field = Field(document)total_page_field.Type = FieldType.FieldExpression# 设置前半部分域代码total_page_field.Code = "=2*"footer_paragraph.Items.Add(total_page_field)# 创建嵌套的NUMPAGES域,用于获取总页数field_num_pages = Field(document)field_num_pages.Type = FieldType.FieldNumPagesfooter_paragraph.Items.Add(field_num_pages)# 为NUMPAGES域添加域分隔符和域结束符Insert_Field_Mark(document, footer_paragraph, field_num_pages)# 为表达式域添加域分隔符和域结束符Insert_Field_Mark(document, footer_paragraph, total_page_field)# 添加文本footer_paragraph.AppendText(" 页")# 设置页脚段落的字体for i in range(footer_paragraph.ChildObjects.Count):if isinstance(footer_paragraph.ChildObjects[i], TextRange):textRange = footer_paragraph.ChildObjects[i]textRange.CharacterFormat.FontName = "宋体"textRange.CharacterFormat.FontSize = 9.0# 设置页脚段落的文本对齐方式footer_paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center# 打开一个Word文档
doc = Document()
doc.LoadFromFile("AI.docx")
# 获取第一个节
section = doc.Sections[0]# 设置页面大小和方向(可选设置)
# section.PageSetup.PageSize = PageSize.A3()
# section.PageSetup.Orientation = PageOrientation.Landscape# 设置节中段落的水平文本对齐方式,使内容更美观(可选设置)
for para_index in range(section.Paragraphs.Count):   section.Paragraphs[para_index].Format.HorizontalAlignment = HorizontalAlignment.Justify# 添加一栏
section.AddColumn(150, 20)# 清除现有的页脚内容
footer = section.HeadersFooters.Footer
footer.ChildObjects.Clear()# 在页脚插入一个1x2的表格
table = footer.AddTable(False)
table.ResetCells(1, 2)# 为左边栏(栏1)添加页码
Add_Page_Number(table.Rows[0].Cells[0].AddParagraph(), doc, "Left")
# 为右边栏(栏2)添加页码
Add_Page_Number(table.Rows[0].Cells[1].AddParagraph(), doc, "Right")# 保存修改后的文档
doc.SaveToFile("创建带页码多栏文档.docx", FileFormat.Docx)
doc.Close()

Python 给Word文档的各栏添加页码

以上就是使用 Python 创建多栏 Word 文档的全部内容,感谢阅读!

相关文章:

使用 Python 创建多栏 Word 文档 – 详解

目录 引言 一、工具与安装 二、Python 在 Word 中创建简单的多栏布局 三、Python 在 Word 文档的栏间添加分隔线 四、Python 从Word文档的指定位置开启多栏设置 五、Python 为多栏 Word 文档的各栏添加页码 引言 在文档设计中,排版不仅决定了内容的呈现方式&…...

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…...

Mysql的MHA高可用及故障切换

Mysql的MHA高可用及故障切换 MHA主从复制的单点问题配置1. 主从复制2. MHA高可用安装MHA的组件配置无密码认证manager节点配置manager节点上测试启动连接 故障切换模拟恢复 MHA master high availability 建立在主从复制基础之上的故障切换的软件系统。 主从复制的单点问题 …...

【ES6复习笔记】箭头函数(5)

简介 本教程将介绍如何在 JavaScript 中使用箭头函数,包括箭头函数的基本语法、特点以及在实际开发中的应用。通过本教程,你将学会如何使用箭头函数来简化代码,提高代码的可读性和简洁性。 箭头函数的基本语法 箭头函数是 ES6 引入的一种新…...

单片机学习笔记——入门51单片机

一、单片机基础介绍 1.何为单片机 单片机,英文Micro Controller Unit,简称MCU 。内部集成了中央处理器CPU、随机存储器ROM、只读存储器RAM、定时器/计算器、中断系统和IO口等一系列电脑的常用硬件功能 单片机的任务是信息采集(依靠传感器&a…...

Docker Run使用方法及参数详细说明

Docker Run使用方法及参数详细说明 基本语法常用参数使用示例总结Docker Run是Docker中最基本的命令之一,用于创建并启动一个新的容器。通过Docker Run,用户可以基于指定的镜像创建一个容器实例,并且可以配置容器的各种参数,如网络设置、存储选项等。下面将详细介绍Docker …...

面试场景题系列:设计限流器

首先看看使用API限流器的好处。 •预防由拒绝服务攻击(Denial of Service,DoS)引起的资源耗尽问题。大型科技公司发布的所有API几乎都强制执行某种形式的限流操作。例如,推特限制每个用户每3小时最多发300条推文。谷歌文档API的默认限制是每个用户每60秒…...

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 (1)资源介绍 🔅原理图 🔅STS30-DIS-B 🌙引脚分配 🌙通信 🌙时钟拉伸(Clock Stretching) 🌙单次触发模式 🌙温度数据转…...

网狐旗舰版源码搭建概览

简单的列一下: 服务端源码内核源码移动端源码核心移动端源码AI控制工具源码多款子游戏源码前端、管理后台、代理网站源码数据库自建脚本UI工程源码配置工具及二次开发帮助文档 编译环境要求 VS2015 和 Cocos3.10 环境,支持移动端 Android 一键编译&am…...

vue3中使用vuedraggable实现拖拽

包安装方式 yarn add vuedraggablenext npm i -S vuedraggablenext属性说明 如果下面的属性说明未能完全看明&#xff0c;可以看左边的对应的菜单查看详细说明和例子。 完整例子 <template><div class"itxst"><div><draggable:list"s…...

leetcode 7. 整数反转

class Solution { public: int reverse(int x) { long long n0; if(x0) return 0; while(x%100) { xx/10; } while(x!0) { nn*10x%10; xx/10; } if(n<-2147483648||n>2147483647) return 0; return n; } };...

Nginx单向链表 ngx_list_t

目录 基本概述 数据结构 接口描述 具体实现 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx&#xff1a;模块开发与架构解析》 基本概述 Nginx 中的 ngx_list_t 是一个单向链表容器&#xff0c;链表中的每一个节…...

go语言中的字符串详解

目录 字符串的基本特点 1.字符串的不可变性 2.其他基本特点 字符串基本操作 1. 创建字符串 2. 获取字符串长度 3. 字符串拼接 4. 遍历字符串 5. 字符串比较 字符串常用函数 1. 判断子串 2. 查找与索引 3. 字符串替换 4. 分割与连接 5. 修剪字符串 6. 大小写转换…...

Windows脚本清理C盘缓存

方法一&#xff1a;使用power文件.ps1的文件 脚本功能 清理临时文件夹&#xff1a; 当前用户的临时文件夹&#xff08;%Temp%&#xff09;。系统临时文件夹&#xff08;C:\Windows\Temp&#xff09;。 清理 Windows 更新缓存&#xff1a; 删除 Windows 更新下载缓存&#xff0…...

分布式协同 - 分布式事务_2PC 3PC解决方案

文章目录 导图Pre2PC&#xff08;Two-Phase Commit&#xff09;协议准备阶段提交阶段情况 1&#xff1a;只要有一个事务参与者反馈未就绪&#xff08;no ready&#xff09;&#xff0c;事务协调者就会回滚事务情况 2&#xff1a;当所有事务参与者均反馈就绪&#xff08;ready&a…...

永磁同步电机负载估计算法--自适应扩张状态观测器

一、 原理介绍 在线性扩张观测器中&#xff0c;LESO观测器增益ω0 决定了观测器的跟踪速度&#xff0c;ω0 越大&#xff0c;观测器估计精度越高&#xff0c; 抗干扰能力越强&#xff0c;瞬态响应速度加快&#xff0c;过大则会引入高频噪声使系统不稳定。为使观测器在全速域内…...

【HarmonyOS应用开发——ArkTS语言】购物商城的实现【合集】

目录 &#x1f60b;环境配置&#xff1a;华为HarmonyOS开发者 &#x1f4fa;演示效果&#xff1a; &#x1f4d6;实验步骤及方法&#xff1a; 1. 在src/main/ets文件中创建components文件夹并在其中创建Home.ets和HomeProduct.ets文件。​ 2. 在Home.ets文件中定义 Home 组…...

Python二维码生成器qrcode库

要在Python中生成二维码&#xff0c;你可以使用 qrcode 库。这个库非常方便&#xff0c;允许你生成并保存二维码图像。下面是一个简单的示例&#xff0c;展示了如何使用 qrcode 库生成二维码。 首先&#xff0c;你需要安装 qrcode 库。你可以使用 pip 来安装它&#xff1a; s…...

Python:模拟(包含例题:饮料换购 图像模糊 螺旋矩阵)

模拟题&#xff1a;直接按照题目含义模拟即可&#xff0c;一般不涉及算法 注意&#xff1a; 1.读懂题&#xff1a;理清楚题目流程 2.代码和步骤一一对应&#xff1a;变量名&#xff0c;函数名&#xff0c;函数功能 3.提取重复的部分&#xff0c;写成对应的函数&#xff08;…...

git分支与部署环境的关系以及开发规范

一 某金融机构 1.1 分支分类以及作用 1.master master分支为主分支,用于部署生产环境的分支,无论任何时候都要确保master分支的稳定性;master分支由feature及hotfix分支合并,任何时间都不能直接修改代码。目前用于老仿真和老生产,暂时不动。 2.prod 主分支,是master…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

在Zenodo下载文件 用到googlecolab googledrive

方法&#xff1a;Figshare/Zenodo上的数据/文件下载不下来&#xff1f;尝试利用Google Colab &#xff1a;https://zhuanlan.zhihu.com/p/1898503078782674027 参考&#xff1a; 通过Colab&谷歌云下载Figshare数据&#xff0c;超级实用&#xff01;&#xff01;&#xff0…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...