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

编程入门 行业动态 更新时间:2024-10-09 05:24:40

【python VS vba(系列1)】 python和vba读写文件的<a href=https://www.elefans.com/category/jswz/34/1771414.html style=方式比较 (建设ing)"/>

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

目录

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 #2Print #2, fnClose #2fn = DirLoopDebug.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 #2Do While fn <> ""'VBE调试窗口输出Debug.Print fn'向文件输出path3 = path2 & "\" & fnOpen path3 For Input As #1Do While Not EOF(1)curr1 = input(LOF(1), #1)Print #2, curr1LoopClose #1fn = DirLoopClose #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 = 1Do While fn1 <> ""path2 = path1 & "\" & fn1'向文件输出Open path2 For Output As #1Print #1, x & "第" & x & "句内容XXX"Close #1x = x + 1fn1 = DirLoop
End Sub

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

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

2.4.1 代码

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

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

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

2.5.1 代码

'指定要输出到文件夹里的文件个数,严谨点先判断是否是空文件夹
Sub print1005()path1 = "C:\Users\Administrator\Desktop\ppp3"'先判断文件夹是否存在If Dir(path1) <> "" Then
'       MsgBox ("请注意此文件夹已存在,里面可能已经包含其他文件",vbYesNo)MsgBox ("请注意此文件夹已存在,里面可能已经包含其他文件")ElseMkDir (path1)End IfZ = 1'因为确定了是新文件夹,肯定是空文件夹了For i = 1 To 10path7 = path1 & "\" & i & ".txt"'向文件输出Open path7 For Output As #1Print #1, Z & "第" & Z & "句内容ZZZZ"Close #1Z = Z + 1NextEnd Sub


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

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

5 用python 读取文件

6 VBA 和python 比较

更多推荐

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

本文发布于:2023-12-04 04:11:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1659716.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方式   文件   系列   python   vba

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!