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

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 工作簿中的工作表。

相关文章:

Excel_VBA编程

在Excel中&#xff0c;VBA&#xff08;Visual Basic for Applications&#xff09;是一种强大的工具&#xff0c;可以用来自动化各种任务。下面介绍一些常用的VBA函数和程序结构&#xff1a; 常用函数 MsgBox&#xff1a;用于显示消息框。 MsgBox "Hello, World!"In…...

Java中的Path类使用详解及最佳实践

Java中的Path类使用详解及最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的Path类&#xff0c;这是Java标准库中用于操作文件…...

生成和查看预定义宏

参考下面的指令 arm-none-eabi-gcc -marcharmv7e-m -dM -E - < /dev/null | grep SYNC这个指令是用来生成和查看预定义宏&#xff08;macros&#xff09;的一种方法。让我们逐步分解和解释这个命令的各个部分&#xff1a; arm-none-eabi-gcc: 这是 ARM 架构下的交叉编译器…...

Redis 7.x 系列【12】数据类型之基数统计(HyperLogLog)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 PFADD2.2 PFCOUNT2.3 PFMERGE 3. 应用场景 1. 概述 基数表示数…...

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型&#xff08;LLM &#xff09;和检索增强生成&#xff08;RAG&#xff09;技术构建&#xff0c;提供开箱即用的数据处理、模型调用等能力&#xff0c;可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…...

基于Java的蛋糕预定系统【附源码+LW】

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法&#xff0c;但这种管理方法存…...

Java框架的原理主要基于以下几个核心

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException&#xff1a;在RMI中&#xff0c;参数或返回值无法被编组的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…...

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…...

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言&#xff0c;熟悉重装系统的方法可以帮助他们解决各种问题&#xff0c;从提高系统速度到修复软件故障。然而具体来讲&#xff0c;笔记本重装系统怎么操作呢&#xff1f;接下来&…...

【高考志愿】计算机

目录 一、专业概述 二、就业方向 三、选择建议 四、注意事项 五、计算机专业学科排名 高考志愿选择计算机专业&#xff0c;无疑是一个充满挑战与机遇的决策。这个专业以其广泛的应用领域、前沿的技术研究和可观的就业前景&#xff0c;吸引了无数考生的目光。 一、专业概述…...

使用ExpandableListView创建可扩展列表

使用ExpandableListView创建可扩展列表 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何使用Android中的ExpandableListView创建可扩展列…...

酒店新零售模式,亚朵酒店众筹模式, 社交新零售商业模式

抓住会员的需求&#xff0c;通过众筹让上万铁杆粉丝成为微股东&#xff01; 作为一家高端酒店&#xff0c;它拥有近2000万会员&#xff0c;这些会员还抢着掏钱帮它开酒店。而且&#xff0c;这家酒店还直接融资了19亿&#xff0c;计划上市。这家酒店在全国开设了1000多家店&…...

2010-2023年 省级、地级市、地市州盟保障性住房面积数据

保障性住房是政府为解决中低收入家庭住房问题而实施的一项重要政策&#xff0c;旨在通过提供限定价格或租金的住房&#xff0c;实现社会公平和稳定。以下是对省级、地级市、地市州盟保障性住房面积数据的介绍&#xff1a; 数据简介 定义&#xff1a;保障性住房包括廉租住房、…...

Java 语言特定指南

Java 语言特定指南 本 Java 入门指南将教您如何使用 Docker 创建一个容器化的 Spring Boot 应用程序。在本模块中&#xff0c;您将学习如何&#xff1a; 使用 Maven 容器化并运行一个 Spring Boot 应用程序设置本地开发环境以将数据库连接到容器、配置调试器&#xff0c;并使…...

国内多个库被 rsc 钉上 Go 耻辱柱。。。

大家好&#xff0c;我是煎鱼。 这还是比较突然的&#xff0c;下午正努力打工。国内社区群里突然就闹腾起来了。 仔细一看&#xff0c;原来是 Go 核心团队负责人 rsc&#xff0c;又冷不丁搞大招 &#x1f605;。他直接把国内好几个知名库给直接钉上了 Go 源码库的耻辱柱上了。 如…...

elasticsearch源码分析-03选举集群状态

选举集群状态 es中存储的数据有一下几种&#xff0c;state元数据、lucene索引文件、translog事务日志 元数据信息可以分为&#xff1a; 集群层面的元信息-对应着metaData数据结构&#xff0c;主要是clusterUUid、settings、templates等索引层面的元信息-对应着indexMetaData数…...

MySQL 重要参数优化

max_connections = 3000 innodb_buffer_pool_size = 8G max_allowed_packet = 32M innodb_file_io_threads = 8 innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M 参数说明 max_connections = 3000 运行MySQL的最大连…...

软件测试之接口测试(Postman/Jmeter)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比如你需要从别的系统来…...

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…...

计算机视觉 图像融合技术概览

在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量。 多视图融合可以提高图像的分辨率,同时恢复场景的 3D 表示。多模态融合结合了来自不同传感器的图像,称为多传感器融…...

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容&#xff0c;内容可能会有错误&#xff0c;另外ensp对电脑兼容性及其挑剔&#xff0c;在使用之前一定要安装好。…...

【安全开发】内网扫描器

文章目录 前言现实现的功能较少后序开发会逐步加入简单漏洞探探测和代理功能。 一、开发过程1.项目结构2.main.go3.core模块3.1 scanner.go3.2 service.go 4.bruteforc4.1 bruteforce.go 二、使用步骤 前言 为什么要写这个&#xff1f; fscna被杀的概率太高&#xff08;哪天二…...

ESP32-C3模组上跑通MQTT(5)

接前一篇文章:ESP32-C3模组上跑通MQTT(4) 本文内容参考: 《ESP32-C3 物联网工程开发实战》 一分钟了解MQTT协议 ESP32 MQTT API指南-CSDN博客 ESP-IDF MQTT 示例入门_mqtt outbox-CSDN博客 ESP32用自签CA进行MQTT的TLS双向认证通信_esp32 mqtt ssl-CSDN博客 特此致谢!…...

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器&#xff0c;也称为LED显示器&#xff0c;或点阵显示器&#xff0c;应用广泛。在…...

设计模式 - Observer Pattern 观察者模式

文章目录 定义观察者模式的实现构成构成UML图 观察者模式的代码实现场景代码实现 总结优点缺点应用场景 其他设计模式文章&#xff1a; 定义 观察者模式是行为型模式的一种&#xff0c;它定义对象间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;它…...

【面试系列】C++ 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

程序猿大战Python——实现简单的图书馆系统操作

步骤1&#xff1a;安装和导入库 首先&#xff0c;确保已经安装了 pymysql 库。如果没有安装&#xff0c;请执行以下命令&#xff1a; pip install pymysql 然后&#xff0c;导入必要的库&#xff1a; import pymysql 步骤2&#xff1a;创建数据库和表的函数 编写一个函数来…...

液体粒子计数器的原理及常见型号选择 lighthouse代理商北京中邦兴业

​液体颗粒计数用于测量液体样品中颗粒的大小和分布。通过用激光二极管照射液体样品并检测散射光来测量颗粒分布和尺寸。散射光的性质与粒子大小的大小有关。液体颗粒计数器可用于批量取样或在线&#xff08;连续监测&#xff09;应用&#xff0c;如水处理厂&#xff0c;或用于…...

Java知识点整理 16 — Spring Bean

在之前的文章 Java知识点整理 8 — Spring 简介 中介绍了 Spring 的两大核心概念 IoC 和 AOP&#xff0c;但对 Spring Bean 的介绍不全面&#xff0c;本文将补充 Spring 中 Bean 的概念。 一. 什么是 Spring Bean 在 Spring 官方文档中&#xff0c;对 bean 的定义为&#xf…...

Nvidia Jetson/RK3588+AI双目立体相机,适合各种割草机器人、扫地机器人、AGV等应用

双目立体视觉是基于视差原理&#xff0c;依据成像设备从不同位置获取的被测物体的图像&#xff0c;匹配对应点的位置偏移&#xff0c;得到视差数据&#xff0c;进而计算物体的空间三维信息。为您带来高图像质量的双目立体相机&#xff0c;具有高分辨率、低功耗、远距离等优点&a…...

springboot使用feign调用不依赖cloud

在使用spring boot调用第三方api中&#xff0c;常用的是okhttp、apache http client等&#xff0c;但是直接使用下来还是有点繁琐&#xff0c;需要手动转换实体。 在springcloud中有个openfeign调用&#xff0c;第一次体验到调用接口还能这么丝滑。注解写道接口上&#xff0c;…...

springboot中使用springboot cache

前言&#xff1a;SpringBoot中使用Cache缓存可以提高对缓存的开发效率 此图片是SpringBootCache常用注解 Springboot Cache中常用注解 第一步&#xff1a;引入依赖 <!--缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId…...

Promise,async/await的运用

一&#xff0c;了解Promise Promise是异步编程的一种解决方案&#xff0c;它是一个对象&#xff0c;可以获取异步操作的消息&#xff0c;它的出现避免了地狱回调。 &#xff08;1&#xff09;Promise的实例有三个状态&#xff1a; Pending&#xff08;进行中&#xff09; Re…...

图论·多源最短路径Floyddijsktra

例题地址 多源最短路径 多个源点多个终点可以使用Floyd算法直接求各源点到终点的最短距离&#xff0c;也可以直接多次使用dijsktra算法求单源点到终点的最短距离 Floyd算法 使用条件 多源最短路径权值正负皆可 核心思想&#xff1a;动态规划 子问题&#xff1a; 设(A,B)…...

微服务 | Springboot整合GateWay+Nacos实现动态路由

1、简介 路由转发 执行过滤器链。 ​ 网关&#xff0c;旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时&#xff0c;基于Filter链的方式提供了网关的基本功能&#xff0c;比如&#xff1a;鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。 基本功能…...

做google SEO 有哪些好用的工具?这12款谷歌SEO工具值得收藏!

1、Google Trends 谷歌旗下一款基于搜索数据推出的一款免费分析工具 外贸人有句老话&#xff0c;七分靠选品&#xff0c;三分靠运营。在你开始做独立站之前&#xff0c;在你不清楚你的行业在Google上面能否有足够的流量时&#xff0c;那么Google Trends则是你最好的工具。 你只…...

【变频调速在锅炉引风机控制中的应用】

变频调速在锅炉引风机控制中的应用 变频器的选型 变频器是利用电力半导体器件的通断作用将工频电源变换为另一种频率的电能控制装置,能宏观对交流异步电机软启动,变频调速,提高运转精度,改变功率因数,过流/过压/过载保护等功能,国内技术较领先的品牌有汇川、欧瑞(原烟台…...

网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>

参考&#xff1a; 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…...

【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号

最近拿到了【Hello 图狗】制作的三调/变更样式符号库&#xff0c;确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02&#xff08;汇总&#xff09;_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病&#xff0c;就是匹配样式之后&#xff0c;…...

tensorflow学习1.3-创建会话,启动会话

tensorflow学习1.3-创建会话&#xff0c;启动会话 会话的由来与作用由来作用 会话的定义与结构定义 用法基本用法上下文管理器执行部分计算图获取多个结果 总结 练习代码报错原因&#xff1a;TensorFlow 2.x中的Eager Execution使用兼容模式来启用SessionEager Execution和计算…...

QT基本对话框(基本对话框、工具盒类、进度条、调色板与电子钟、可扩展对话框、程序启动画面)

此篇文章通过实例介绍基本对话框的用法。首先介绍标准文件对话框&#xff08;QFileDialog&#xff09;、标准颜色对话框&#xff08;QColorDialog&#xff09;、标准字体对话框&#xff08;QFontDialog&#xff09;、标准输入对话框&#xff08;QInputDialog&#xff09;以及标…...

Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具

文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是MySQL的一个分支和替代品。 官网&#xff1a;https://mariadb.com/镜像&#xff…...

qt 可以在一个函数中读一个文件,然后再将内容写入另一个文件中

是的&#xff0c;Qt 允许你在一个函数中读取一个文件的内容&#xff0c;并将这些内容写入到另一个文件中。这可以通过结合使用 QFile 和 QTextStream&#xff08;或 QDataStream&#xff0c;取决于你的具体需求&#xff09;来实现。以下是一个简单的示例&#xff0c;展示了如何…...

Dijkstra算法C代码

一个带权图n个点m条边&#xff0c;求起点到终点的最短距离 先定义一个邻接矩阵graph&#xff0c;graph[i][j]表示从i到j的距离&#xff0c;i到j没有路就表示为无穷 然后定义一个visit数组&#xff0c;visit[i]表示i结点是否被访问 然后定义一个dist数组&#xff0c;dist[i]表…...

P1064 [NOIP2006 提高组] 金明的预算方案

[NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0…...

大型企业组网如何规划网络

大型企业组网是一个复杂的过程&#xff0c;它需要细致的规划和设计&#xff0c;以确保网络能够满足企业的业务需求&#xff0c;同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素&#xff1a; 1. 需求分析 业务需求&#xff1a;与各个业务部门…...

java:aocache的单实例缓存(二)

之前一篇博客《java:aocache的单实例缓存》介绍了aoocache使用注解AoCacheable实现单实例缓存的方式&#xff0c;同时也指出了这种方式的使用限制&#xff0c;就是这个注解定义的构造方法&#xff0c;不能再创建出新实例。 为了更灵活方便的实现单实例。aocache最新版本0.4.0增…...

ElasticSearch安装部署

简介 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;用于实时地存储、检索和分析大数据量。它基于 Apache Lucene 搜索引擎库构建而成&#xff0c;提供了一个强大、稳定且易于扩展的搜索解决方案。 主要特点和用途&#xff1a; 分布式存储和搜索&#xff1a; E…...

数据赋能(132)——开发:数据转换——影响因素、直接作用、主要特征

影响因素 数据转换过程中需要考虑的一些影响因素&#xff1a; 数据格式与结构&#xff1a; 不同系统或应用可能使用不同的数据格式&#xff08;如JSON、XML、CSV等&#xff09;和数据结构&#xff08;如关系型数据库、非关系型数据库等&#xff09;。数据转换需要确保原始数据…...

大数据面试题之Flume

目录 介绍下Flume Flume架构 Flume有哪些Source 说下Flume事务机制 介绍下Flume采集数据的原理&#xff1f;底层实现&#xff1f; Flume如何保证数据的可靠性 Flume传输数据时如何保证数据一致性&#xff08;可靠性&#xff09; Flume拦截器 如何监控消费型Flu…...

使用Python下载并合并HLS视频片段

下载和合并视频片段的实用方法 在日常工作中&#xff0c;我们经常会遇到需要从网上下载视频并将其合并成一个完整视频的需求。本文将介绍如何使用 Python 下载多个视频片段&#xff0c;并使用 ffmpeg 将这些片段合并成一个完整的视频文件。以下是具体步骤和代码实现。 完整代…...

STM32 HAL库里 串口中断回调函数是在怎么被调用的?

跟着正点原子学习的HAL库写串口接收程序的时候一直有困惑&#xff0c;使用HAL_UART_Receive_IT开启接收中断后&#xff0c;为啥处理函数要写在HAL_UART_RxCpltCallback里&#xff0c;中断发生的时候是怎么到这个回调函数里去的&#xff1f; void MX_USART1_UART_Init(void) {h…...

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性&#xff0c;但是真正存储数据的还是主节点和从节点&#xff0c;并且每个节点都存储了全量的数据&#xff0c;此时&#xff0c;如果数据量过大&#xff0c;接近或超出了 主节点 / 从节点机器的物理内存&#xff0c;就…...

Batch Size 不同对evaluation performance的影响

目录 问题描述如果是bugbatch size的设置问题尝试使用GroupNorm解决batchsize不同带来的问题归一化的分类 参考文章 问题描述 深度学习网络训练时&#xff0c;使用较小的batch size训练网络后&#xff0c;如果换用较大的batch size进行evaluation&#xff0c;网络的预测能力会…...

【云原生】服务网格(Istio)如何简化微服务通信

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、微服务架构的兴起 2、Istio&#xff1a;服务网格的佼…...

24款捷豹XFL来袭,优惠超12万,车长5102mm,配三种动力可选

相比德系BBA对手,捷豹虽然拥有纯正的英伦运动血统,但捷豹车型在国内仍属偏小众的群体,为了进一步提升市占表现,捷豹也只能通过大幅优惠的方式吸引消费者。最近,2024款捷豹XFL正式上市,新车虽然拥有39.99—48.79万的指导价,但新车亮相后便进行了破10万的优惠政策,目前入…...

GfK中国联合上海市眼镜行业协会举办高层论坛:探索眼镜市场机遇共筑视觉健

中国与上海市眼镜行业协会联合主办的 “视界之窗:瞰见全球及中国眼镜市场未来”高层论坛5月16日在上海成功举行。本次论坛汇聚了上海市眼病防治中心视光中心、上海健康医学院医学技术学院等三十余家专业机构和协会专家,以及上海三联有限公司、上海依视路光学有限公司、卡尔蔡司…...

电脑显示由于找不到msvcr110.dll 无法继续执行如何处理?最简单的修复msvcr110.dll文件方法

电脑显示由于找不到msvcr110.dll 无法继续执行&#xff1f;当你看到这种提示的时候&#xff0c;请不要紧张&#xff0c;这种是属于dll文件丢失&#xff0c;解决起来还是比较简单的&#xff0c;下面会详细的列明多种找不到msvcr110.dll的解决方法。 一.找不到msvcr110.dll是怎么…...

快团团供货大团长如何打印电子面单?

一、功能说明 快团团打单平台是目前唯一一个服务于快团团团长的打单发货工具&#xff0c;免费提供给团长使用。可帮助团长快速打印面单、分拣包裹、完成发货。 目前快团团打单平台已支持大批量打印快递单、自定义快递面单、自动发货、绑定拼多多电子面单账号等功能&#xff0c…...

构建 Terraform 模块的分步指南

文章目录 一、介绍二、了解 Terraform 模块的基础知识三、Terraform 模块剖析第 1 步&#xff1a;确定可重用组件第 2 步&#xff1a;创建模块结构第 3 步&#xff1a;定义模块的变量第 4 步&#xff1a;编写模块配置第 5 步&#xff1a;提供输出值第 6 步&#xff1a;在配置中…...

Golang协程和通道

文章目录 协程&#xff08;goroutine&#xff09;基本介绍GMP模型协程间共享变量 通道&#xff08;channel&#xff09;基本介绍channel的定义方式channel的读写channel的关闭channel的遍历方式只读/只写channelchannel最佳案例select语句 协程&#xff08;goroutine&#xff0…...