【python VS vba(系列1)】 python和vba读写文件的方式比较 (建设ing)

news2024/11/20 6:19:57

目录

1 前言 : 为什么要做这个系列

2 用VBA 实现 遍历文件夹,读取文件内容,写入文件内容等

2.1 遍历文件夹的文件名

2.1.1 用VBA取得文件名等需要使用 dir mkdir 等类dos的命令

2.1.2 用VBA打开,写入,关闭文件:

2.1.3 看具体代码

2.1.4 下面是运行的效果

2.2 读取文件夹内所有文件内容到指定文件

2.2.1 读取文件夹下多个文件内容

2.2.2 代码

2.2.3 相关函数和语句

2.3  向(已有)文件夹内的多个已有的多个文件写入

2.3.1 代码

2.4   向新建文件夹内的新文件输出

2.4.1 代码

2.5  向新建文件夹内的新文件输出(先判断是否存在此文件夹)

2.5.1 代码

3 '其他操作文件方法,简单了解,比如fso

3 特殊的,EXCEL,是VBA的基本盘 VBA 读写EXCEL

5 用python 读取文件

6 VBA 和python 比较


1 前言 : 为什么要做这个系列

放在第一篇需要先明确下目的

为什么要做这个系列

  • 1 我现在再看之前写的一些VBA或python的学习笔记,有点惨不忍睹的,虽然有些文章还算有用,尤其是解决具体问题的那种,但是那种学习总结的往往很多问题,虽然只要被有些同学顶起来收藏和点赞,我发现了都会尽量改,但总是感觉一言难尽
  • 2 市面上很少有做 python 和VBA对比的,尤其是深入进去每个模块功能进行对比的。原因大概是这几个:VBA太老太弱,python太火太强,真正科班出身的同学很少有看得起VBA的。但是VBA因为附着在EXCEL上,有着强大的生命力,办公人群(多数人不会代码)用的很多,还是需要有人有用VBA的需求,毕竟环境已经集成在office上了。
  • 3 做对比,比较下两种语言的处理方式,也可以比较感性的认识下,后出的语言的牛逼之处在哪,之前写VBA的各种老思路需要更新。
  • 4 做对比,也算是对VBA做个总结吧,听说EXCEL都已经支持python了...

2 用VBA 实现 遍历文件夹,读取文件内容,写入文件内容等

  • 现有文件夹如下
  • 想遍历文件夹里的文件名,文件内容,然后写入其他文件夹
  • 下面是具体的步骤

2.1 遍历文件夹的文件名

  • 这里是要读取的文件夹,代码运行前的效果


 

2.1.1 用VBA取得文件名等需要使用 dir mkdir 等类dos的命令

文件操作函数,类DOS

  • dir:   dir(path1)   和 继续 dir()
  • mkdir:MkDir (path1)  创建文件/文件夹
  • CurDir 函数
  • ChDir path
  • ChDrive 语句
Sub testp1()
    Debug.Print CurDir()
    
    Debug.Print Dir("C:\Users\Administrator\Desktop\ptest1.txt")
    
    ChDir "d:\123"
    Debug.Print CurDir()
    
    ChDrive "d:\"
    Debug.Print CurDir()

    ChDrive "c:\"
    Debug.Print CurDir()
    
    ChDir "C:\Users\Administrator\Desktop"
    Debug.Print CurDir()
End Sub

dir总结

  • 'dir 后面只能用dir,不能 Dir(fp)否则会重置会第一个文件名
  • 'dir获得是文件名,(包含文件名=后缀)像这种  ppp1.txt,但是不包含完整路径
  • '循环dir,会导致ppp1 ppp10 ppp2.txt这种文件名排序,需要注意不是按数字排序的
  • '文件如果没有会自动创建

2.1.2 用VBA打开,写入,关闭文件:

  • open 完整路径 for input/output/append as #别名
  • '关闭文件:close #别名
  • '写入文件内容: print

官方解释

Open pathname For mode [Access access] [lock] As [#] filenumber [Len = reclength]

参数:

1)pathname 必填。 指定文件名的字符串表达式,可包括目录或文件夹和驱动器。

2)mode 必填。 指定文件模式的关键字:Append、Binary、Input、Output 或 Random。 如果未指定,则以 Random 访问模式打开文件。

  1. Input:以输入方式打开,即读取方式。
  2. Output:以输出方式打开,即写入方式。
  3. Append:以追加方式打开,即添加内容到文件末尾。
  4. Binary:以二进制方式打开。
  5. Random:以随机方式打开,如果未指定方式,则以 Random 方式打开文件。

3)access 可选。 指定可对打开的文件执行的操作的关键字:Read、Write 或 Read Write。

4)lock 可选。 指定由其他进程限制在打开的文件上的操作的关键字:共享、锁定读取、锁定写入和锁定读写。

5)filenumber 必填。 一个有效文件号,范围为1到511(含1和511)。 使用FreeFile 函数可获取下一个可用的文件编号。

6)reclength 可选。 小于或等于 32,767(字节)的数。 对于以随机访问模式打开的文件,此值为记录长度。 对于序列文件,此值为缓冲的字符数。

  1. 如果pathname指定的文件不存在,那么在以 Append、Binary、Output 或 Random 模式打开文件时,即会创建它。

  2. 如果文件已由另一个进程打开,并且不允许指定的访问类型,则打开操作将失败,并将发生错误。

  3. 如果mode为Binary,则忽略Len子句。

  4. 在Binary,Input,Random模式中,你可以使用不同的文件号打开文件,而无需先关闭文件。 在 Append 和 Output 模式中,必须先关闭该文件,然后才能用不同文件号打开它。

2.1.3 看具体代码

'指定读取文件夹的路径内的 多个文字名字
Sub print1001()

    '指定输出路径
    path1 = "C:\Users\Administrator\Desktop\ptest1.txt"
    
    fp = "C:\Users\Administrator\Desktop\ppp\*.*"
    fn = Dir(fp)
    
    '打印文件夹内的文件名
    Do While fn <> ""
       'VBE调试窗口输出
       Debug.Print fn
       
       '向文件输出
       Open path1 For Append As #2
            Print #2, fn
       Close #2
       fn = Dir
    Loop
    Debug.Print "文件夹内的文件名已经遍历完毕,并且已经追加写入了" & path1 & "内"
    MsgBox ("文件夹内的文件名已经遍历完毕,并且已经追加写入了" & path1 & "内")
End Sub


'dir总结
'总结1:'dir 后面只能用dir,不能 Dir(fp)否则会重置会第一个文件名
'总结2:'dir获得是文件名,(包含文件名=后缀)像这种  ppp1.txt,但是不包含完整路径
'总结3:循环dir,会导致ppp1 ppp10 ppp2.txt这种文件名排序,需要注意不是按数字排序的
'总结4:'文件如果没有会自动创建, output, input
'Append、Binary、Input、Output 或 Random。 如果未指定,则以 Random 访问模式打开文件。

'打开文件:open 完整路径 for input/output/append as #别名
'关闭文件:close #别名
'写入文件内容: print

2.1.4 下面是运行的效果

2.2 读取文件夹内所有文件内容到指定文件

  • 要把下面文件夹里每个文件的内容都读到一个指定的文件内去

 

2.2.1 读取文件夹下多个文件内容

  • 要读取的文件,打开时用input即可
  1. '用lof(别名文件号) 判断长度,可以直接 lof(1)-10 取部分内容
  2. '用eof(1)判断是否到文件结尾
  • 要写入的文件,使用append
  1. 每次找循环里的下一个文件 path3 = path2 & "\" & fn
  2. input函数(长度,别名)
  3. '需要input函数,可用变量暂存内容=input(长度,别名)
  4. 用中间变量,倒一下内容
  5.             curr1 = input(LOF(1), #1)
                Print #2, curr1

2.2.2 代码

'读取文件夹内的每个文件内容到另外一个指定的txt里
Sub print1002()
    '指定输出路径
    path1 = "C:\Users\Administrator\Desktop\ptest1.txt"

    '指定读取文件夹的路径
    fp = "C:\Users\Administrator\Desktop\ppp\*.*"
    fn = Dir(fp)
    path2 = "C:\Users\Administrator\Desktop\ppp"
    
    
    '打印文件夹内的文件名
    Open path1 For Append As #2
    Do While fn <> ""
       'VBE调试窗口输出
       Debug.Print fn
       
       '向文件输出
       path3 = path2 & "\" & fn
       Open path3 For Input As #1
       Do While Not EOF(1)
            curr1 = input(LOF(1), #1)
            Print #2, curr1
       Loop
       Close #1
       fn = Dir
    Loop
    Close #2
End Sub

'读取文件,打开时用input即可
'用lof(别名文件号) 判断长度,可以直接 lof(1)-10 取部分内容
'用eof(1)判断是否到文件结尾
'需要input函数,可用变量暂存内容=input(长度,别名)

2.2.3 相关函数和语句

Input() 函数

  1. input函数,input(长度,别名)
  2. Input #1, MyString, MyNumber ' 将数据读入两个变量。

Input() 语句

  1. 语法:Input #filenumber, varlist
  2. 功能:从已打开的顺序文件中读出数据并将数据指定给变量。
  3. 说明:通常用 Write # 将 Input # 语句读出的数据写入文件。为了能够用 Input # 语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用 Write # 语句而不使用 Print # 语句。使用 Write # 语句可以确保将各个单独的数据域正确分隔开。

EOF 函数

  1. 语法:EOF(filenumber)
  2. 功能:返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。

LOF 函数

  1. 语法:LOF(filenumber)
  2. 功能:返回一个 Long,表示用 Open 语句打开的文件的大小,该大小以字节为单位。

Loc 函数

  1. 语法:LOc(filenumber)
  2. 功能:返回一个 Long,在已打开的文件中指定当前读/写位置

2.3  向(已有)文件夹内的多个已有的多个文件写入

  • 目标:已有文件夹内的所有文件
  • 发现几个文件写入几个文件,全部覆盖

2.3.1 代码


'向文件夹内的多个文件输出内容,已有的多个文件,发现几个文件写入几个文件
Sub print1003()

    path1 = "C:\Users\Administrator\Desktop\ppp1"
    fp1 = "C:\Users\Administrator\Desktop\ppp1\*.*"
    fn1 = Dir(fp1)
    
    x = 1
    Do While fn1 <> ""
       path2 = path1 & "\" & fn1
       '向文件输出
       Open path2 For Output As #1
            Print #1, x & "第" & x & "句内容XXX"
       Close #1
       x = x + 1
       fn1 = Dir
    Loop
End Sub

2.4   向新建文件夹内的新文件输出

  • 目标:一般针对新文件夹,重新创建文件夹和新文件
  • 指定要输出到文件夹里的文件个数,
  •  为这些新文件写入内容

2.4.1 代码

'指定要输出到文件夹里的文件个数,一般针对新文件夹,重新创建文件夹和新文件
Sub print1004()
    '如果已有文件夹里有其他文件夹应该会忽略掉
     path2 = "C:\Users\Administrator\Desktop\ppp2"
 
     y = 1
     For i = 1 To 10
         path6 = path2 & "\" & i & ".txt"
         '向文件输出
         Open path6 For Output As #1
             Print #1, y & "第" & y & "句内容YYYYY"
         Close #1
         y = y + 1
     Next

End Sub

2.5  向新建文件夹内的新文件输出(先判断是否存在此文件夹)

  •  目标:严谨的输出到新文件夹内,严谨点先判断是否是空文件夹
  • 指定要输出到文件夹里的文件个数

2.5.1 代码

'指定要输出到文件夹里的文件个数,严谨点先判断是否是空文件夹
Sub print1005()
    path1 = "C:\Users\Administrator\Desktop\ppp3"

    '先判断文件夹是否存在
    If Dir(path1) <> "" Then
'       MsgBox ("请注意此文件夹已存在,里面可能已经包含其他文件",vbYesNo)
       MsgBox ("请注意此文件夹已存在,里面可能已经包含其他文件")
    Else
        MkDir (path1)
        
    End If
     
    Z = 1
    '因为确定了是新文件夹,肯定是空文件夹了
    For i = 1 To 10
        path7 = path1 & "\" & i & ".txt"
        '向文件输出
        Open path7 For Output As #1
            Print #1, Z & "第" & Z & "句内容ZZZZ"
        Close #1
        Z = Z + 1
    Next
    

End Sub


3 '其他操作文件方法,简单了解,比如fso

3 特殊的,EXCEL,是VBA的基本盘 VBA 读写EXCEL

5 用python 读取文件

6 VBA 和python 比较

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

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

相关文章

8个卓越的矢量图插画资源网站

在插画设计中&#xff0c;如何寻找能够自由缩放的矢量图插画素材&#xff0c;一直是我们设计的难点。 下面&#xff0c;为大家推荐8个矢量图插画素材网站&#xff0c;希望能够满足同学们的设计需求。 1&#xff1a;即时设计 即时设计是可云端编辑的专业级 UI 设计工具&#…

ssm+vue的汽车站车辆运营管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的汽车站车辆运营管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

vben admin配置详解(Table, Form)

vben这个后台管理系统的框架&#xff0c;基于ant-design-vue组件库封装了很多好用的组件&#xff0c;我们在日常开发中用的最多的就是Table, Form组件了。下面就简单介绍一下。 监听菜单折叠: const { getCollapsed } useMenuSetting();const isCollapsed ref(false);watch…

揭秘 AI 开发“武功秘籍”,NVIDIA 发布首部 DPU 和 DOCA 编程入门书籍

随着人工智能的“iPhone 时刻”到来&#xff0c;每家企业都将采用生成式人工智能&#xff0c;每个行业也都将被人工智能改变&#xff0c;开发者也在积极拥抱这股浪潮。 据开发者社区 CSDN 统计&#xff0c;在其注册开发者中&#xff0c;689 万开发者阅读、撰写与研究 AI 技术&…

吃透Spring源码分析专题

想说的话 本人在互联网摸爬滚打至今(23年)6年了&#xff0c;平时有写博客的习惯&#xff0c;这个习惯是从大学的时候开始的&#xff0c;目前主要关注java领域相关的技术&#xff0c;python也有涉及&#xff0c;写Spring专题是因为Spring确实很重要&#xff0c;在目前这个开发模…

考完PMP认证还需要考NPDP认证吗?

这个问题要看你自己&#xff0c;是项目经理&#xff0c;还是会和产品经理打交道&#xff0c;还是本身是产品开发的职位&#xff0c;或者就是产品经理等。考完PMP认证再考NPDP认证是有好处的&#xff0c;项目思维教会我们往前走&#xff0c;而产品思维&#xff0c;可以让我们走的…

html web前端,点击发送验证码,按钮60秒倒计时

html web前端&#xff0c;点击发送验证码&#xff0c;按钮60秒倒计时 eaca39b57a49d39f6c9e2f49f2559e9a.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title><…

快速解决“msvcp110.dll丢失”问题,msvcp110.dll丢失修复分享

解决"msvcp110.dll丢失"问题的方法 在计算机使用过程中&#xff0c;我们可能会遇到各种问题。其中&#xff0c;“msvcp110.dll丢失”是一个常见的错误&#xff0c;通常出现在运行某些软件或游戏时。这个错误不仅会打断我们的工作或娱乐&#xff0c;而且可能对我们的…

Perforce发布《2023游戏开发与设计现状报告》,洞察游戏行业的改变与2023年最令人兴奋的行业动向

近期&#xff0c;Perforce发布了《2023游戏开发与设计现状报告》。此报告调查了来自全球各地的游戏开发专业人士&#xff0c;了解他们面临的主要开发挑战、使用的工具和流程&#xff0c;以及目前最让他们对这个行业感到兴奋的方面。 龙智作为Perforce授权合作伙伴&#xff0c;…

C++为什么不提倡使用单例模式?

C为什么不提倡使用单例模式&#xff1f; 我是不提倡C当中使用单例模式的&#xff0c;在很早以前写过一个答案提过关于单例的问题。 正好最近有个朋友刚翻译了C core guidelines&#xff0c;里面的I.3也提了单例模式的危害&#xff0c;直接用“避免单例”作为标题&#xff0c;今…

测吧(北京)科技有限公司项目总监王雪冬一行访问计算机学院探讨合作

3月15日&#xff0c;测吧&#xff08;北京&#xff09;科技有限公司&#xff08;以下简称测吧&#xff09;项目总监王雪冬来到计算机学院对校企合作、学生就业、学生竞赛等一系列工作进行了深入研讨&#xff0c;并向计算机学院颁发了优秀组织单位和优秀指导老师奖。会议由黄曼绮…

JCJC-基于剪贴板的碎片信息收集工具

给大家介绍一款基于剪贴板的碎片信息收集工具-JCJC。 JCJC 的主要功能是跟踪剪贴板内容的变动&#xff0c;自动把剪贴板的内存保存为 MarkDown 格式文件。 MarkDown 文件说明&#xff1a; MarkDown 文件存储在 JCJC 安装目录中的 jcjc\notes 目录下 &#xff0c;文件名称格式…

Elasticsearch的增删查改详细操作

目录标题 一、创建索引二、查看索引三、修改索引四、删除索引五、向索引增加数据 一、创建索引 单独创建索引 PUT /test1 # test1 为索引名称自定义{"settings":{ # 创建index 需要有效的xcontent字节及Json格式 否则创建不成功 "index":{"number_…

目标跟踪ZoomTrack: Target-aware Non-uniform Resizing for Efficient Visual Tracking

论文作者&#xff1a;Yutong Kou,Jin Gao,Bing Li,Gang Wang,Weiming Hu,Yizheng Wang,Liang Li 作者单位&#xff1a;CASIA; University of Chinese Academy of Sciences; ShanghaiTech University; Beijing Institute of Basic Medical Sciences; People AI, Inc 论文链接&…

解决Nginx代理MinIO出现Access Denied

通过nginx代理访问minio文件地址时出现了Access Denied的错误 我的访问地址: http://ab.ac.ad.cn:10001/group2/2023/10/23/3_20231023101203A001.jpg/ 访问错误情况如下: 解决如下,实测有用 我这里一开始nginx配置如下: server {listen 10001;server_name ab.…

麒麟信安受邀协办2023广电五舟行业交流大会,共建信创产业新生态

10月20日&#xff0c;广州广电五舟科技股份有限公司&#xff08;简称“广电五舟”&#xff09;主办的行业交流大会召开&#xff0c;大会围绕智能算力新趋势、共建新生态价值体系、算力发展与生态建设的关系、元宇宙应用展望与生态融合等话题展开深入探讨。麒麟信安作为沈阳站和…

类似东郊到家预约家政保洁小程序搭建

随着生活水平的提高&#xff0c;人们对健康养生的需求越来越重视&#xff0c;按摩作为一种传统的养生方式&#xff0c;备受关注。为了方便用户快速、方便地预约按摩服务&#xff0c;本文将介绍一款按摩预约小程序的开发。 首先&#xff0c;我们通过市场调研和分析发现&#xf…

Linux 爱好者线下沙龙:LLUG 2023·相聚成都 | 第四站

导读&#xff1a;10 月 29 日&#xff0c;Linux 爱好者沙龙将会在四川成都市高新区菁蓉汇&#xff0c;与中国开源年会&#xff08;COSCON&#xff09;同场举办&#xff01;以下为详细介绍。 社群里呼声很高的天府之国&#xff0c;它来了&#xff01; 经历过 6 月北京场、7 月…

【JS的设计模式一】

本文参考书籍 《JavaScript设计模式与开发实践》 在 JavaScript 编程中&#xff0c;this 关键字总是让人感到迷惑&#xff0c;Function.prototype.call 和 Function.prototype.apply 这两个方法也有着广泛的运用。我们有必要在学习设计模式之前先理解 这几个概念。 this Java…

OPT101光照传感器 光强度传感器模块 单片光电二极管

可以用于水质浊度检测 OPT101是具有片上跨阻抗放大器的单片光电二极管。单个芯片上的光电二极管和跨阻放大器的组合消除了离散设计中常遇到的问题&#xff0c;例如漏电流误差&#xff0c;噪声拾取和增益峰化 杂散电容的结果。输出电压随光强度线性增加。 该放大器设计用于单电源…