【VB6|第19期】vb6通过COM组件操作Excel

日期:2023年7月3日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


在这里插入图片描述



一、前言

近期帮一个客户做了一个预处理Excel的小工具,就想着总结一下关于 VB6 操作 Excel 的知识。本期主要讲解如何快速去使用 COMComponent Object Model)技术来操作Excel,并且学习一些主要的知识与概念等等,快速构建一套使用该技术的思维习惯。

二、COM技术浅谈

COMComponent Object Model)是一种微软的组件技术,用于在不同的应用程序之间进行通信和交互,其核心概念是将功能独立的代码封装为组件,每个组件具有自己的接口和实现。组件可以被其他应用程序通过 COM 接口调用和使用,实现了组件的复用和跨应用程序的互操作性。

Excel COM 组件是一种用于与 Microsoft Excel 进行交互的组件(现在也可以和新版的 WPS Excel 进行交互)。通过使用 Excel COM 组件,可以通过编程方式自动化 Excel 应用程序,执行各种任务,例如创建、读取、修改和保存 Excel 工作簿、操作工作表、单元格和公式,以及生成报表等。

三、通过COM操作Excel

要使用 Excel COM 组件,我们需要在开发环境中引用 Microsoft Excel Object Library。。在以前电脑必须安装 MS Excel,才可以使用此库;经过测试,现在电脑只安装新版本WPS Excel,也一样可以使用此库。

(3-1)引用 Microsoft Excel Object Library 库

在这里插入图片描述

(3-2)创建、操作以及销毁 三部曲

  1. 创建 Excel COM 组件;
  2. 各种想要的操作,如读值、赋值等操作;
  3. 销毁创建的 Excel COM 组件;

主要的 Excel COM 如下所示:

Excel COM说明
Excel.ApplicationExcel 应用程序的实例
Excel.WorkbookExcel 应用程序中的一个工作簿(Workbook
Excel.SheetsExcel 工作簿中所有的工作表(Worksheet
Excel.WorksheetExcel 工作簿(Workbook)中的一个工作表

示例如下:
在这里插入图片描述

Option Explicit

Private Sub Form_Load()
On Error Resume Next
    '(1)创建
    Dim xlApp As Excel.Application      'Excel COM 组件,Excel 应用程序的实例
    Dim xlBook As Excel.Workbook        'Excel COM 组件,Excel 应用程序中的一个工作簿(Workbook)
    Dim xlSheets As Excel.Sheets        'Excel COM 组件,Excel 工作簿中所有的工作表(Worksheet)
    Dim xlSheet As Excel.Worksheet      'Excel COM 组件,Excel 工作簿(Workbook)中的一个工作表
    'Set xlApp = New Excel.Application              'NO1:前期绑定,实例化对象
    Set xlApp = CreateObject("Excel.Application")   'NO2:后期绑定,实例化对象
    Set xlBook = xlApp.Workbooks.Open(App.Path & "\example.xlsx")
    Set xlSheets = xlBook.Worksheets

    '(2)操作
    xlApp.Visible = False        'Excel 应用程序窗口的可见性控制
    '当 ScreenUpdating = True 时 ,Excel 将显示对工作表的更改;
    '当 ScreenUpdating = False 时,Excel 将在后台执行操作,不显示对工作表的更改,从而提高执行速度。
    xlApp.ScreenUpdating = False 'Excel 应用程序的屏幕更新控制
    
    Set xlSheet = xlSheets(1) ' xlSheets("Sheet1")
    ' 读取单元格的值
    Debug.Print xlSheet.Range("A2").value, xlSheet.Range("B2").value
    ' 写入单元格的值
    xlSheet.Range("A3").value = "李小龙"
    Debug.Print xlSheet.Cells(3, 1).value
    
    xlApp.ScreenUpdating = True

    '(3)销毁
    ' 保存并关闭工作簿
    xlBook.Save     ' 保存Excel文件
    xlBook.Close    ' 关闭Excel文件
    xlApp.Quit      ' 关闭Excel Application对象
    
    ' 释放资源
    Set xlSheet = Nothing
    Set xlSheets = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

补充一点,如果想要更好的兼容性,那么最后生成 exe 的时候,将 Excel COM 全部定义为 object,采用后期绑定的方式,这样就不用纠结 Excel 版本的问题;

四、常见问题的处理方案

(4-1)引用中找不到Excel库的解决方案

如果在引用中找不到Microsoft Excel Object Library库,那么就点选“浏览(B)…”,选择安装的Excel程序,以下以 MS Excel 作为演示:

  • 点击 WIN键,然后输入 excel ,点选 打开文件位置
    在这里插入图片描述

  • 右键 Excel,点选 打开文件位置
    在这里插入图片描述

  • 按住 ctrl,接着右键点选 复制文件地址(A)
    在这里插入图片描述

  • 将地址填入,点击 打开(O)
    在这里插入图片描述

(4-2)只有WPS Excel的电脑运行程序报错的解决方案

在这里插入图片描述
对于上图所示的报错,如果不想安装 MS Excel,那么也可以安装更高版本的 WPS Excel,经过不同电脑测试,此方案可以很完美的解决此问题。

(4-3)程序运行很卡,CPU资源占用很高的解决方案

在这里插入图片描述

如果运行挺久才得到结果,期间CPU可能高达50%,而其它电脑又是正常速度的,那么此类问题的解决方案同(4-2)一致,更新 Excel 应该就可以解决了。


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/130256762

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VB6中实现多线程可以使用ActiveX EXE组件。下面是实现多线程的步骤: 1. 创建一个ActiveX EXE组件。 2. 在组件中创建一个类,该类将作为线程的代码容器。 3. 在类中添加一个公共方法,用于启动线程。该方法应该接受一个参数,该参数将在线程中使用。 4. 在类中添加一个事件,用于向客户端应用程序发送线程消息。 5. 在组件中添加一个公共方法,用于创建类的实例并启动线程。 6. 在客户端应用程序中创建组件的实例,并调用组件的方法来启动线程。 以下是示例代码: 在ActiveX EXE组件中的类代码: ``` Option Explicit Public Event ThreadMessage(ByVal Message As String) Private mData As Variant Public Sub StartThread(Data As Variant) mData = Data Dim hThread As Long hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf ThreadProc, Me, 0&, ByVal 0&) If hThread = 0 Then RaiseEvent ThreadMessage("Failed to start thread.") End If End Sub Private Sub ThreadProc() Do '线程代码 RaiseEvent ThreadMessage("Thread message") Sleep 1000 ' 线程休眠1秒 Loop End Sub ``` 在ActiveX EXE组件中的公共方法代码: ``` Public Function StartThread(Data As Variant) As Object Dim oThread As New ThreadClass Set StartThread = oThread oThread.StartThread Data End Function ``` 在客户端应用程序中的示例代码: ``` Private WithEvents mThread As ThreadClass Private Sub Command1_Click() Set mThread = MyActiveX.StartThread("Thread data") End Sub Private Sub mThread_ThreadMessage(ByVal Message As String) Debug.Print Message End Sub ``` 在上面的代码中,MyActiveX是ActiveX EXE组件的名称,ThreadClass是在组件中创建的类的名称。客户端应用程序可以通过调用StartThread方法来启动线程,并使用ThreadMessage事件接收线程消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值