Excel_VBA编程

在Excel中,VBA(Visual Basic for Applications)是一种强大的工具,可以用来自动化各种任务。下面介绍一些常用的VBA函数和程序结构:

常用函数

  1. MsgBox:用于显示消息框。

    MsgBox "Hello, World!"
    
  2. InputBox:用于显示输入框,接收用户输入。

    Dim userInput As String
    userInput = InputBox("Enter your name:")
    
  3. Range:用于引用单元格或单元格区域。

    Range("A1").Value = "Hello"
    
  4. Cells:用于引用特定行列的单元格。

    Cells(1, 1).Value = "Hello"
    
  5. Worksheets:用于引用特定工作表。

    Worksheets("Sheet1").Range("A1").Value = "Hello"
    
  6. Application:用于引用Excel应用程序对象。

    Application.Workbooks.Open "C:\Path\To\File.xlsx"
    
  7. If…Then…Else:条件语句。

    If Range("A1").Value = "Hello" ThenMsgBox "Greeting found!"
    ElseMsgBox "Greeting not found."
    End If
    
  8. For Each…Next:循环遍历集合。

    Dim ws As Worksheet
    For Each ws In WorksheetsMsgBox ws.Name
    Next ws
    
  9. For…Next:计数循环。

    Dim i As Integer
    For i = 1 To 10Cells(i, 1).Value = i
    Next i
    
  10. Do…Loop:条件循环。

    Dim i As Integer
    i = 1
    Do While i <= 10Cells(i, 1).Value = ii = i + 1
    Loop
    

程序结构

  1. Sub过程:Sub过程是执行特定任务的一组代码,不返回值。

    Sub SayHello()MsgBox "Hello, World!"
    End Sub
    
  2. Function过程:Function过程类似于Sub过程,但可以返回值。

    Function AddNumbers(a As Integer, b As Integer) As IntegerAddNumbers = a + b
    End Function
    
  3. 模块:模块是VBA代码的容器,可以包含多个Sub和Function过程。

    ' 这是一个模块
    Sub Main()Call SayHelloMsgBox AddNumbers(2, 3)
    End SubSub SayHello()MsgBox "Hello, World!"
    End SubFunction AddNumbers(a As Integer, b As Integer) As IntegerAddNumbers = a + b
    End Function
    
  4. 事件过程:事件过程是响应特定事件的Sub过程,如工作簿打开、单元格改变等。

    Private Sub Workbook_Open()MsgBox "Workbook opened!"
    End SubPrivate Sub Worksheet_Change(ByVal Target As Range)If Target.Address = "$A$1" ThenMsgBox "Cell A1 has changed!"End If
    End Sub
    

示例

下面是一个综合使用上述函数和结构的VBA示例:

Sub ProcessData()' 定义变量Dim ws As WorksheetDim total As Doubletotal = 0' 遍历所有工作表For Each ws In Worksheets' 遍历工作表中的每一行Dim i As IntegerFor i = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row' 将第一列的值累加到总数total = total + ws.Cells(i, 1).ValueNext iNext ws' 显示总数MsgBox "The total is " & total
End Sub

这个例子演示了如何遍历所有工作表,累加每个工作表中第一列的值,并显示总数。

通过熟练掌握这些VBA函数和程序结构,您可以编写强大且灵活的Excel自动化脚本。

创建按钮

在Excel中,可以通过VBA创建一个按钮,并设置它的点击事件以执行特定的操作,比如生成文件并写入内容。下面是详细步骤:

1. 创建按钮

  1. 打开Excel工作簿。
  2. 转到“开发工具”选项卡。如果没有看到“开发工具”选项卡,可以通过“文件” -> “选项” -> “自定义功能区”来启用它。
  3. 在“开发工具”选项卡中,点击“插入”,选择“按钮(窗体控件)”。
  4. 在工作表中绘制一个按钮。
  5. 绘制按钮后,会自动弹出“指定宏”对话框。为按钮创建一个新的宏,命名为ButtonClick,然后点击“确定”。

2. 编写宏代码

在Excel VBA编辑器(按Alt + F11打开)中编写宏代码。以下是一个示例宏,按下按钮后生成一个文件并写入内容:

Sub ButtonClick()' 定义文件路径和名称Dim filePath As StringfilePath = "C:\Path\To\Your\File.txt"' 打开文件以写入Dim fileNum As IntegerfileNum = FreeFileOpen filePath For Output As #fileNum' 写入内容Print #fileNum, "This is the first line."Print #fileNum, "This is the second line."' 关闭文件Close #fileNum' 提示用户文件已生成MsgBox "File has been created at " & filePath
End Sub

3. 连接按钮和宏

  1. 回到Excel工作表,右键点击刚创建的按钮,选择“指定宏”。
  2. 选择ButtonClick宏,然后点击“确定”。

4. 运行宏

现在,当您点击按钮时,宏将会执行,生成一个文件并写入指定内容。

示例解释

  • filePath定义了文件的路径和名称。
  • FreeFile函数用于获取一个未使用的文件编号。
  • Open语句打开指定文件进行输出。
  • Print语句将内容写入文件。
  • Close语句关闭文件。

通过这些步骤,您可以在Excel中创建一个按钮,并在按下按钮时生成文件并写入内容。您可以根据需要修改宏代码,以实现不同的功能和文件格式。

在VBA编程中,DimSub是两个非常重要的关键字,分别用于变量声明和子过程定义。下面详细介绍它们的用法和相关概念。

Dim 关键字

Dim(Dimension 的缩写)用于声明变量。它指定变量的名称和数据类型。变量声明有助于分配内存和提高代码的可读性和维护性。

基本语法
Dim variableName As DataType
示例
Dim i As Integer
Dim name As String
Dim isActive As Boolean
Dim startDate As Date
Dim values() As Double ' 数组声明
变量作用域

变量的作用域取决于它声明的位置:

  1. 局部变量:在过程(Sub或Function)内声明,仅在该过程内有效。

    Sub ExampleSub()Dim localVar As IntegerlocalVar = 10MsgBox localVar
    End Sub
    
  2. 模块级变量:在模块顶部(任何过程外)声明,模块内的所有过程都能访问。

    Dim moduleVar As IntegerSub ExampleSub1()moduleVar = 10
    End SubSub ExampleSub2()MsgBox moduleVar
    End Sub
    
  3. 全局变量:使用Public关键字声明,所有模块中的所有过程都能访问。

    Public globalVar As IntegerSub ExampleSub1()globalVar = 10
    End SubSub ExampleSub2()MsgBox globalVar
    End Sub
    

Sub 关键字

Sub(Subroutine 的缩写)用于定义一个子过程,它是一组执行特定任务的代码块。子过程不返回值。

基本语法
Sub ProcedureName([parameters])' 过程体
End Sub
示例
Sub SayHello()MsgBox "Hello, World!"
End SubSub AddNumbers(a As Integer, b As Integer)MsgBox a + b
End Sub
参数

子过程可以接受参数,参数可以是可选的,也可以是必需的。

Sub GreetUser(name As String)MsgBox "Hello, " & name
End SubSub GreetUserOptional(Optional name As String = "Guest")MsgBox "Hello, " & name
End Sub

示例:结合DimSub

下面是一个结合DimSub的示例,展示如何声明变量并在子过程内使用它们。

Sub ProcessData()' 声明变量Dim i As IntegerDim total As DoubleDim ws As Worksheet' 初始化变量total = 0' 遍历所有工作表For Each ws In Worksheets' 遍历工作表中的每一行For i = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row' 累加第一列的值total = total + ws.Cells(i, 1).ValueNext iNext ws' 显示总数MsgBox "The total is " & total
End Sub

详细示例:结合按钮和自动化任务

我们结合前面的内容,演示一个完整的例子,创建按钮、声明变量、定义子过程,并将第一列的十进制数转换为十六进制数并显示在第二列。

创建按钮并连接宏
  1. 在Excel中创建一个按钮,并命名宏为ButtonClick
编写宏代码
Sub ButtonClick()' 定义变量Dim i As IntegerDim decValue As VariantDim hexValue As StringDim lastRow As Long' 确定第一列中最后一个有数据的单元格行号lastRow = Cells(Rows.Count, 1).End(xlUp).Row' 遍历第一列中的所有行For i = 1 To lastRow' 获取第一列的值decValue = Cells(i, 1).Value' 检查是否是数字If IsNumeric(decValue) Then' 将十进制值转换为十六进制hexValue = WorksheetFunction.Dec2Hex(decValue)' 在第二列中显示对应的十六进制值并加上前缀0xCells(i, 2).Value = "0x" & hexValueElse' 如果不是数字,则清空第二列的值Cells(i, 2).Value = ""End IfNext i
End Sub

通过这些详细的解释和示例,您应该能够理解DimSub的用法,并在VBA编程中灵活运用它们。

数据类型

在VBA中,Dim关键字用于声明变量,可以定义多种数据类型。每种数据类型都有其特定的用途和适用场景。以下是一些常见的数据类型及其使用方法:

常见数据类型

  1. Integer

    • 用于存储整数,范围是 -32,768 到 32,767。
    Dim i As Integer
    i = 12345
    
  2. Long

    • 用于存储较大的整数,范围是 -2,147,483,648 到 2,147,483,647。
    Dim l As Long
    l = 123456789
    
  3. Single

    • 用于存储单精度浮点数。
    Dim s As Single
    s = 123.45
    
  4. Double

    • 用于存储双精度浮点数。
    Dim d As Double
    d = 123456.789
    
  5. Currency

    • 用于存储货币值,精度高达四位小数。
    Dim c As Currency
    c = 123456.78
    
  6. Decimal

    • 用于存储精度更高的数值,适合需要高精度的小数计算。
    Dim dec As Decimal
    dec = 1234567890.123456789
    
  7. String

    • 用于存储文本字符串。
    Dim str As String
    str = "Hello, World!"
    
  8. Boolean

    • 用于存储布尔值(True 或 False)。
    Dim b As Boolean
    b = True
    
  9. Date

    • 用于存储日期和时间。
    Dim dt As Date
    dt = #12/31/2024#
    
  10. Variant

    • 可以存储任何类型的数据,是一种通用的数据类型,但性能较低,建议尽量避免使用。
    Dim v As Variant
    v = "This can be any type"
    
  11. Object

    • 用于存储对象引用。
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
  12. Array

    • 用于存储数组。
    Dim arr(1 To 5) As Integer
    arr(1) = 10
    arr(2) = 20
    '... 继续初始化其他元素
    

使用示例

下面是一个示例宏,展示了如何声明并使用不同的数据类型:

Sub DataTypeExamples()' 整数Dim i As Integeri = 12345MsgBox "Integer: " & i' 长整数Dim l As Longl = 123456789MsgBox "Long: " & l' 单精度浮点数Dim s As Singles = 123.45MsgBox "Single: " & s' 双精度浮点数Dim d As Doubled = 123456.789MsgBox "Double: " & d' 货币Dim c As Currencyc = 123456.78MsgBox "Currency: " & c' 字符串Dim str As Stringstr = "Hello, World!"MsgBox "String: " & str' 布尔值Dim b As Booleanb = TrueMsgBox "Boolean: " & b' 日期Dim dt As Datedt = #12/31/2024#MsgBox "Date: " & dt' VariantDim v As Variantv = "This can be any type"MsgBox "Variant: " & v' 对象Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet1")MsgBox "Worksheet name: " & ws.Name' 数组Dim arr(1 To 5) As Integerarr(1) = 10arr(2) = 20arr(3) = 30arr(4) = 40arr(5) = 50MsgBox "Array element 1: " & arr(1)MsgBox "Array element 2: " & arr(2)
End Sub

注意事项

  1. 精度和范围:选择合适的数据类型可以有效利用内存并提高性能。例如,使用Integer而不是Long来存储较小的整数。
  2. 类型转换:需要时可以使用类型转换函数,例如CIntCLngCSngCDblCStr等。
  3. 对象引用:在处理对象(如工作表、工作簿等)时,记得使用Set关键字。

通过熟练掌握这些数据类型及其用法,您可以编写更高效、易维护的VBA代码。

ThisWorkbook

ThisWorkbook 是 Excel VBA 中的一个对象,代表当前运行的 VBA 代码所在的工作簿。无论代码在哪个工作表模块或普通模块中运行,ThisWorkbook 都始终指向包含该代码的工作簿。使用 ThisWorkbook 可以简化对工作簿的引用和操作,确保代码始终作用于正确的工作簿。

ThisWorkbook 对象的常用操作

1. 访问工作簿属性

ThisWorkbook 可以用来访问工作簿的各种属性,如名称、路径、保存状态等。

Sub WorkbookProperties()Dim wbName As StringDim wbPath As StringDim isSaved As BooleanwbName = ThisWorkbook.NamewbPath = ThisWorkbook.PathisSaved = ThisWorkbook.SavedMsgBox "Workbook Name: " & wbNameMsgBox "Workbook Path: " & wbPathMsgBox "Is Workbook Saved? " & isSaved
End Sub
2. 保存工作簿

可以使用 ThisWorkbook 对象的 SaveSaveAs 方法来保存工作簿。

Sub SaveWorkbook()' 保存当前工作簿ThisWorkbook.Save
End SubSub SaveWorkbookAs()' 保存当前工作簿为新的文件ThisWorkbook.SaveAs "C:\Path\To\NewWorkbook.xlsx"
End Sub
3. 关闭工作簿

使用 Close 方法可以关闭当前工作簿。

Sub CloseWorkbook()' 关闭当前工作簿且不保存更改ThisWorkbook.Close SaveChanges:=False
End Sub
4. 访问工作表

可以通过 ThisWorkbook 访问工作簿中的工作表。

Sub AccessWorksheets()' 激活名为 "Sheet1" 的工作表ThisWorkbook.Worksheets("Sheet1").Activate' 在名为 "Sheet1" 的工作表的 A1 单元格中输入值ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "Hello, World!"
End Sub
5. 事件处理

可以在 ThisWorkbook 模块中编写工作簿级别的事件处理代码。例如,工作簿打开或关闭时执行特定操作。

' 在 ThisWorkbook 模块中
Private Sub Workbook_Open()MsgBox "Welcome to " & ThisWorkbook.Name
End SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)MsgBox "Goodbye from " & ThisWorkbook.Name
End Sub
6. 添加工作表

可以通过 ThisWorkbook 对象添加新的工作表。

Sub AddWorksheet()Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets.Addws.Name = "NewSheet"
End Sub
7. 删除工作表

可以通过 ThisWorkbook 对象删除指定的工作表。

Sub DeleteWorksheet()Application.DisplayAlerts = FalseThisWorkbook.Worksheets("Sheet1").DeleteApplication.DisplayAlerts = True
End Sub
8. 使用自定义属性

可以通过 ThisWorkbook 对象存取工作簿的自定义属性。

Sub SetCustomProperty()ThisWorkbook.CustomDocumentProperties.Add _Name:="MyProperty", _LinkToContent:=False, _Type:=msoPropertyTypeString, _Value:="MyValue"
End SubSub GetCustomProperty()Dim propValue As StringOn Error Resume NextpropValue = ThisWorkbook.CustomDocumentProperties("MyProperty").ValueOn Error GoTo 0MsgBox "Custom Property Value: " & propValue
End Sub

综合示例

下面是一个综合示例,展示了如何在 ThisWorkbook 中执行多个操作:

Sub ComprehensiveExample()' 获取工作簿属性Dim wbName As StringwbName = ThisWorkbook.NameMsgBox "Workbook Name: " & wbName' 保存工作簿ThisWorkbook.Save' 添加新工作表Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets.Addws.Name = "NewSheet"' 在新工作表中输入值ws.Range("A1").Value = "Hello, from NewSheet!"' 访问特定工作表并输入值ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "Hello, from Sheet1!"' 关闭工作簿但不保存' ThisWorkbook.Close SaveChanges:=False
End Sub

通过上述操作,您可以充分利用 ThisWorkbook 对象来管理和操作当前工作簿,从而提高代码的灵活性和稳定性。

WorkSheets

Worksheets 是 Excel VBA 中的一个集合对象,表示工作簿中的所有工作表。它允许您访问、操作和管理工作簿中的工作表。以下是一些常见的 Worksheets 操作及其用法示例。

访问工作表

按名称访问
Sub AccessWorksheetByName()Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet1")ws.Range("A1").Value = "Hello, World!"
End Sub
按索引访问
Sub AccessWorksheetByIndex()Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets(1) ' 访问第一个工作表ws.Range("A1").Value = "Hello, World!"
End Sub

遍历所有工作表

Sub LoopThroughWorksheets()Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsMsgBox "Sheet Name: " & ws.NameNext ws
End Sub

添加和删除工作表

添加工作表
Sub AddNewWorksheet()Dim newSheet As WorksheetSet newSheet = ThisWorkbook.Worksheets.AddnewSheet.Name = "NewSheet"
End Sub
在特定位置添加工作表
Sub AddWorksheetAtSpecificPosition()Dim newSheet As WorksheetSet newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(1))newSheet.Name = "NewSheetAfterFirst"
End Sub
删除工作表
Sub DeleteWorksheet()Application.DisplayAlerts = FalseThisWorkbook.Worksheets("Sheet1").DeleteApplication.DisplayAlerts = True
End Sub

激活和选择工作表

激活工作表
Sub ActivateWorksheet()ThisWorkbook.Worksheets("Sheet1").Activate
End Sub
选择工作表
Sub SelectWorksheet()ThisWorkbook.Worksheets("Sheet1").Select
End Sub

复制工作表

Sub CopyWorksheet()ThisWorkbook.Worksheets("Sheet1").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
End Sub

移动工作表

Sub MoveWorksheet()ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
End Sub

示例:综合使用 Worksheets

下面是一个综合示例,展示如何访问、添加、删除和遍历工作表:

Sub ComprehensiveWorksheetsExample()' 访问第一个工作表并设置值Dim firstSheet As WorksheetSet firstSheet = ThisWorkbook.Worksheets(1)firstSheet.Range("A1").Value = "This is the first sheet"' 添加一个新工作表并设置值Dim newSheet As WorksheetSet newSheet = ThisWorkbook.Worksheets.AddnewSheet.Name = "NewSheet"newSheet.Range("A1").Value = "This is a new sheet"' 遍历所有工作表并显示名称Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsMsgBox "Sheet Name: " & ws.NameNext ws' 删除名为 "NewSheet" 的工作表Application.DisplayAlerts = FalseThisWorkbook.Worksheets("NewSheet").DeleteApplication.DisplayAlerts = True
End Sub

常见错误和注意事项

  1. 确保工作表存在:在访问工作表之前,确保工作表存在,否则会引发错误。例如,使用错误处理程序来检查工作表是否存在。
Function WorksheetExists(sheetName As String) As BooleanOn Error Resume NextWorksheetExists = Not ThisWorkbook.Worksheets(sheetName) Is NothingOn Error GoTo 0
End FunctionSub CheckAndAccessWorksheet()If WorksheetExists("Sheet1") ThenThisWorkbook.Worksheets("Sheet1").ActivateElseMsgBox "Sheet1 does not exist!"End If
End Sub
  1. 处理用户警告:删除工作表时,默认情况下 Excel 会显示警告对话框。可以通过设置 Application.DisplayAlertsFalse 来禁用这些警告。

  2. 命名冲突:添加或重命名工作表时,确保新名称不与现有名称冲突。

通过掌握 Worksheets 对象的各种操作,您可以更有效地管理和操作 Excel 工作簿中的工作表。

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

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

相关文章

【python全栈系列】day07-python数据类型-集合

Python中的集合&#xff08;Set&#xff09;是一个无序的、不包含重复元素的数据结构。它主要用于数学上的集合操作&#xff0c;如并集、交集、差集和对称差集等。集合的基本用途包括去重和关系测试。 1、集合的特性 无序性&#xff1a;集合中的元素是无序的&#xff0c;这意…

gin-vue -admin 初始化安装后 进入 后台首页报错

报错原因&#xff1a; 因为 我是使用的phpstudy 小皮的数据库 默认的是MySam 的引擎 mysql 引擎需要是 innoDB 解决办法 &#xff1a; 在linux 的环境下 配置一个数据库 &#xff0c; 我是用的是vmware 虚拟机

深入理解分布式搜索引擎 ElasticSearch,并能基于 ELK+Kafka 搭建分布式⽇志收集系统

Elasticsearch是一个基于Lucene的分布式、多租户能力的全文搜索引擎。它提供了RESTful web接口和分布式多用户能力的全文搜索引擎&#xff0c;基于Apache许可证发行。以下是对Elasticsearch的深入理解以及如何基于ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;加…

npm缓存深度解析:理解、使用与清除指南

&#x1f31f; npm缓存深度解析&#xff1a;理解、使用与清除指南 npm&#xff08;Node Package Manager&#xff09;是JavaScript编程语言的包管理器&#xff0c;广泛用于Node.js应用程序。它不仅帮助我们安装和管理项目依赖&#xff0c;还拥有一个强大的缓存机制来加速这一过…

[论文笔记] BlendedDataset blend goes out of bounds for list 34 for valid split

报错&#xff1a; Traceback (most recent call last):File "/mnt/cpfs/kexin/dlc_code/qwen2/Pai-Megatron-Patch/examples/qwen2/pretrain_qwen.py", line 211, in <module> (<megatron.core.datasets.gpt_dataset.GPTDataset object at 0x7f491886bf10&…

《昇思25天学习打卡营第8天|CarpeDiem》

《昇思25天学习打卡营第8天|CarpeDiem》 模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 打卡 今天是昇思25天学习打卡营的第8天&#xff0c;终于迎来 模型训练 的部分了&#xff01;&#xff01;&#xff01; 兴奋 发癫 模型训…

SSH远程命令执行漏洞(CVE-2024-6387)验证

0x01、漏洞名称 OpenSSH远程代码执行漏洞 &#xff08;CVE-2024-6387&#xff09; 0x02、漏洞简介 ​ OpenSSH是SSH&#xff08;Secure SHell&#xff09;协议的开源实现&#xff0c;它通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。OpenSSH 广泛用于基于Un…

数据库。

数据库安全性 论述题5’ 编程题10’ sql语言实现权限控制 一、概述 1、不安全因素 &#xff08;1&#xff09;⾮授权对数据库的恶意存取和破坏 &#xff08;2&#xff09;数据库中重要的数据泄露 &#xff08;3&#xff09;安全环境的脆弱性 2、⾃主存取控制⽅法 gr…

【ajax实战06】进行文章发布

本文章目标&#xff1a;收集文章内容&#xff0c;并提交服务器保存 一&#xff1a;基于form-serialize插件收集表单数据 form-serialize插件仅能收集到表单数据&#xff0c;除此之外的数据无法收集到 二&#xff1a;基于axios提交到服务器保存 三&#xff1a;调用alert警告…

基于KMeans的航空公司客户数据聚类分析

&#x1f490;大家好&#xff01;我是码银~&#xff0c;欢迎关注&#x1f490;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 实验目的和要求 会用Python创建Kmeans聚类分析模型使用KMeans模型对航空公司客户价值进行聚类分析会对聚类结果进行分析评价 实…

Linux修炼之路之进程概念,fork函数,进程状态

目录 一&#xff1a;进程概念 二&#xff1a;Linux中的进程概念 三&#xff1a;用getpid(),getppid()获取该进程的PID,PPID 四&#xff1a;用fork()来创建子进程 五&#xff1a;操作系统学科的进程状态 六&#xff1a;Linux中的进程状态 接下来的日子会顺顺利利&#xf…

【区块链+基础设施】深证金融区块链平台 | FISCO BCOS应用案例

作为数据交换密集型行业&#xff0c;资本市场是区块链创新应用的重要领域&#xff0c;区块链技术可以有效解决诸多痛点问题。比 如&#xff0c;针对信息不对称的问题&#xff0c;区块链技术通过将整个企业的经营活动信息上链&#xff0c;有效降低尽调成本&#xff0c;为投融资决…

配置windows环境下独立浏览器爬虫方案【不依赖系统环境与chrome】

引言 由于部署浏览器爬虫的机器浏览器版本不同&#xff0c;同时也不想因为部署了爬虫导致影响系统浏览器数据&#xff0c;以及避免爬虫过程中遇到的chrome与webdriver版本冲突。我决定将特定版本的chrome浏览器与webdriver下载到项目目录内&#xff0c;同时chrome_driver在初始…

我使用 GPT-4o 帮我挑西瓜

在 5 月 15 日&#xff0c;OpenAI 旗下的大模型 GPT-4o 已经发布&#xff0c;那时网络上已经传开&#xff0c; 但很多小伙伴始终没有看到 GPT-4o 的体验选项。 在周五的时候&#xff0c;我组建的 ChatGPT 交流群的伙伴已经发现了 GPT-4o 这个选项了&#xff0c;是在没有充值升…

NSSCTF-Web题目21(文件上传-phar协议、RCE-空格绕过)

目录 [NISACTF 2022]bingdundun~ 1、题目 2、知识点 3、思路 [FSCTF 2023]细狗2.0 4、题目 5、知识点 6、思路 [NISACTF 2022]bingdundun~ 1、题目 2、知识点 文件上传&#xff0c;phar伪协议 3、思路 点击upload&#xff0c;看看 这里提示我们可以上传图片或压缩包&…

应对.Kastaneya勒索病毒:保护您的数据安全

导言&#xff1a; 随着科技的发展&#xff0c;网络安全问题也日益严峻。最近&#xff0c;一种名为.Kastaneya的勒索病毒开始在网络上出现&#xff0c;对用户的计算机和数据造成严重威胁。本文91数据恢复将介绍.Kastaneya勒索病毒的特点及其传播方式&#xff0c;并提供一些有效…

Unity 解包工具(AssetStudio/UtinyRipper)

文章目录 1.UtinyRipper2.AssetStudio 1.UtinyRipper 官方地址&#xff1a; https://github.com/mafaca/UtinyRipper/ 下载步骤&#xff1a; 2.AssetStudio 官方地址&#xff1a; https://github.com/Perfare/AssetStudio 下载步骤&#xff1a;

【HarmonyOS NEXT】鸿蒙多线程Sendable开发

非共享模块在同一线程内只加载一次&#xff0c;在不同线程间会加载多次&#xff0c;单例类也会创建多次&#xff0c;导致数据不共享&#xff0c;在不同的线程内都会产生新的模块对象。 基础概念 Sendable协议 Sendable协议定义了ArkTS的可共享对象体系及其规格约束。符合Sen…

STM32mp157aaa按键中断实验

效果图&#xff1a; 源码&#xff1a; #include "key.h" void hal_key1_rcc_gpio_init() {// 使能GPIOF组RCC->MP_AHB4ENSETR | (0x1 << 5);// 设置引脚位输入模式GPIOF->MODER & (~(0X3 << 18));GPIOF->MODER & (~(0X3 << 16))…

[C++11] 退出清理函数(quick_exit at_quick_exit)

说明&#xff1a;在C11中&#xff0c;quick_exit和at_quick_exit是新增的快速退出功能&#xff0c;用于在程序终止时提供一种快速清理资源的方式。 quick_exit std::quick_exit函数允许程序快速退出&#xff0c;并且可以传递一个退出状态码给操作系统。与std::exit相比&#…