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

目录

[1 用VBA读写EXCEL文件](#1 用VBA读写EXCEL文件)

[1.1 用VBA读写,本工作簿workbook里的特定sheet的特定内容](#1.1 用VBA读写,本工作簿workbook里的特定sheet的特定内容)

[1.1.1 EXCEL表内内容访问](#1.1.1 EXCEL表内内容访问)

[1.1.2 注意点](#1.1.2 注意点)

[1.1.3 代码](#1.1.3 代码)

[1.2 用VBA读写本工作簿workbook里的所有sheet的内容](#1.2 用VBA读写本工作簿workbook里的所有sheet的内容)

[1.2.1 麻烦之处](#1.2.1 麻烦之处)

[1.2.2 方法,如何指定EXCEL里的内容范围](#1.2.2 方法,如何指定EXCEL里的内容范围)

[1.2.3 写入内容](#1.2.3 写入内容)

[1.3 尝试用VBA处理非本workbook,且未打开的情况](#1.3 尝试用VBA处理非本workbook,且未打开的情况)

[2 用python 读写EXCEL文件](#2 用python 读写EXCEL文件)


1 用VBA读写EXCEL文件

1.1 用VBA读写,本工作簿workbook里的特定sheet的特定内容

  • VBA对单个sheet处理
  • 特殊点:
  1. 处理本EXCEL文件,因为开着VBE,VBA属于本文件,所以本EXCEL表比然是打开的
  2. 对应语法用的也是 thisworkbook.worksheets() ,若不指定缺省也会如此默认

1.1.1 EXCEL表内内容访问

  • 具体到内部,因为EXCEL天生是表格,是数组,是2维数组等
  • 需要使用下面这些对象的层级
  1. sheet.cells()
  2. sheet.range()
  3. sheet.rows()
  4. 。。。

1.1.2 注意点

  • 注意用于保存workbook, worksheet的变量
  1. 必须先定义为对象
  2. 且用set赋值
  • 比如
  • Dim path1 As Object (或者worksheet)
  • Set path1 = ThisWorkbook.Worksheets("now")

1.1.3 代码

vbscript 复制代码
'VBA对单个sheet处理
'特殊点:处理本EXCEL文件,因为开着VBE,VBA属于本文件,所以本EXCEL表比然是打开的
Sub print2001()

    Dim path1 As Object
    Set path1 = ThisWorkbook.Worksheets("now")
    
    '读指定sheet里特定内容
    Debug.Print path1.Cells(1, 1)

    '往wb的指定sheet写入内容
    '查下path1当前最大行
    maxr = path1.Cells(9999, 1).End(xlUp).Row
    path1.Cells(maxr + 1, 1) = 100
    path1.Cells(maxr + 1, 2) = 101
    path1.Cells(maxr + 1, 3) = 102
    path1.Cells(maxr + 1, 4) = 103

End Sub

1.2 用VBA读写本工作簿workbook里的所有sheet的内容

  • 目标是遍历这个,整个thisworkbook里面的内容
  • '注意VBA里数组语法的 1 to 4 和1,4完全不同,后者是2维数组

1.2.1 麻烦之处

  • '处理EXCEL的内容会比一般文件麻烦,因为EXCEL天生是表格,是数组,是2维数组等
  • 'VBA处理一个wb里的多个sheet处理,同样使用循环
  1. 注意正确的是 for sheet in workbook.worksheets
  2. 注意是 for sheet in workbook.worksheet 或 for sheet in workbook是错误的

1.2.2 方法,如何指定EXCEL里的内容范围

  • 1 指定要读写的范围边界,写入数组,然后操作数组
  • 2 使用 sheet.usedrange() 作为数组的数据源

1.2.3 写入内容

  • 遍历 sheet,然后写入即可
vbscript 复制代码
'注意VBA里数组的1to4 和1,4完全不同,后者是2维数组
'VBA处理一个wb里的多个sheet处理
Sub print2002()

    Dim path1 As Object
    Dim wb As Object
    Dim sht As Object

    For Each sht In ThisWorkbook.Worksheets
        Debug.Print "sheetName=" & sht.Name
        
        maxr = sht.Cells(9999, 1).End(xlUp).Row
        maxl = sht.Cells(1, 9999).End(xlToLeft).Column
        Debug.Print "现有内容的最大行数=" & maxr
        Debug.Print "现有内容的最大列数=" & maxl
        
        '因为表很大,数据散布在全表的不同格子里,尝查找限定范围内的内容
        '显示指定区域的内容
        arr1 = sht.Range("a1:d10")
        For i = LBound(arr1, 1) To UBound(arr1, 1)
            For j = LBound(arr1, 2) To UBound(arr1, 2)
                Debug.Print arr1(i, j),
            Next
            Debug.Print
        Next
        
        '显示表里用过的内容
        arr2 = sht.UsedRange
        For i = LBound(arr2, 1) To UBound(arr2, 1)
            For j = LBound(arr2, 2) To UBound(arr2, 2)
                Debug.Print arr2(i, j),
            Next
            Debug.Print
        Next
     Next
    
    '这里写入
    '往wb的指定sheet写入内容,还是先只追加1行
    '查下path1当前最大行
    For Each sht In ThisWorkbook.Worksheets
        For k = 1 To 4
            sht.Cells(maxr + 1, k) = 99 * k
        Next
    Next

End Sub

1.3 尝试用VBA处理非本workbook,且未打开的情况

2 用python 读写EXCEL文件

需要加载专门的模块---也就是前人造好的轮子,比如这2个:

相关推荐
尤鸟倦6 天前
OneNote table复制到Excel遇到的各种问题
excel
2501_930707786 天前
使用C#代码使用条件格式为 Excel 隔行设置颜色
c#·excel
leihefeng6 天前
PX04-用 Python 读 Excel 画折线图,还能直接插回 Excel 文件
python·excel
yanlaifan7 天前
Excel中指定单元格不能输入内容的方法
excel
babe小鑫7 天前
信息与计算科学专业应届生面试 怎么证明自己能解决业务问题
学习·r语言·excel
Data-Miner8 天前
商品ABC分类分析怎么用AI做?脚本复用+图表可编辑的一次完整实操
人工智能·数据分析·excel
E-iceblue10 天前
Excel 列转行/行列转换全指南:从 4 种常见解法到 Python 批量自动化
python·excel·python库·spire.xls
Data-Miner10 天前
AI处理数据的脚本复用与逻辑复用有什么区别?哪种方式更能沉淀工作成果
数据分析·excel
福兮说11 天前
在浏览器里写一个“够用就好“的 Excel 公式求值器
前端·javascript·excel·编译原理
慧都小妮子11 天前
标签打印如何减少手工抄数?用Bartender 直连 Excel 批量打印
excel·bartender·条码打印·标签打印软件·数据驱动打印·工业打印机