精华内容
下载资源
问答
  • 将TXT文档的数据按照一定的格式写入Excel,并跟据日期或者特定条件可以查询数据,并自动绘制曲线图!不含任何空间,纯代代码,方便移植。
  • 在学习完最基本的Python语法之后,我们终于可以开始尝试简单的办公应用,比如今天刚刚发布的《基础篇》第十八回 “Excel读写初体验,外部模块调用首立功”。目前该课程已经可以在网易云课堂观看,同时知识点笔记、...

    大家好!在学习完最基本的Python语法之后,我们终于可以开始尝试简单的办公应用,比如今天刚刚发布的《基础篇》第十八回 “Excel读写初体验,外部模块调用首立功”。目前该课程已经可以在网易云课堂观看,同时知识点笔记、参考资料以及三道习题也已经上传到官网 www.ukoedu.com 中。

    这节课的主要内容,是使用 xlwings 这个很流行的第三方模块实现基本的Excel读写功能,比如课程中演示的获取实时股市数据(通过另一个第三方模块tushare)并保存到工作簿中。

    4e694befea48acf1776f9cdfb5169c66.png

    这些内容和操作都很简单,只是入门性质的介绍。在后续实战篇课程中,我们会开设一个 Python办公自动化” 专题,届时还是深入讲解使用 Python 操作各种办公软件的方法和技巧。而杨老师在录制这节课的时候,脑子里想的最多的却是同学们经常问到的另一个问题——“既然Python也可以操作Excel,我们还需要VBA吗?

    对于这个问题,熟悉本人风格的同学一定能猜出来我的立场——“技术无高低,一切看需求”。客观的说,VBA毕竟是上一代语言,而且20多年没有变化,语言特性与Python等最新工具相比已经不够先进。例如在处理集合类型的数据时,VBA里面的数组、字典、集合等数据结构,怎样看都不如Python中相应类型的功能强大。而且Python的各种语法糖用起来比VBA语法简洁灵活得多,还可以随时使用数据分析、人工智能等各种第三方工具库,用起来真是不要太清爽。

    但是先进性的缺失也恰恰引出另一个视角——为什么在新技术层出不穷、竞争激烈的今天,VBA这个“老古董”至今还能活跃在各行各业,以至于微软多少次想换掉它却又无可奈何?

    6827ebc4f1563ae795ce21d98aa07960.png

    答案很简单——各级用户依然对VBA有着独特的、暂时难以替代的需求。由于VBA推出时就完全面向非IT专业的用户(例如财会金融、企业管理、医疗科研等),并且紧紧依存在Office系列软件中,所以几十年来已经在各类企业(特别是财金行业)积累了大量人气,并留下了无法计数的小程序。对于仍然使用这些程序(VBA宏)的企业来说,VBA语言的性能是否强劲、语法是否现代都不重要,唯一重要的是——这些程序里容纳的是公司多少年积累下来的财务模型、管理流程、技术经验

    比如多数财金公司里面的Excel模型都是当年使用VBA写的,虽然水平参差不齐但却是企业的核心资产。所以只要它们能够正确运行,就完全满足了用户的期望,而不到万不得已,没有人会愿意花大价钱把这些模型用其他语言重新开发一遍。这也就是为什么时至今日,会计审计、数据分析等岗位在招聘时依然希望应聘者掌握一些VBA技术,以便能够继续维护和完善这些模型,就像下面这位同学在Q群中提供的信息:

    3dd55766c85561642de70647fc9860f5.png

    除了处理“历史遗留程序”之外,与Python等其他工具相比,VBA 在Office二次开发方面也确实有其独到的优势。原因主要在于,它是微软公司官方指定的Office内置功能

    首先,内置功能意味着对于非计算机专业的人士来说,只要电脑上有Office基本就可以直接使用VBA,无需像Python那样单独安装一个开发环境(以及xwing等额外的模块)。不要小瞧这一点,因为很多正规企业里都会严格限制员工在电脑上安装软件的权限,我在银行工作时尽管岗位与IT有关,但因为不是开发岗,电脑上也禁止安装一切开发工具,所以只能使用VBA和PowerShell(有些内控更严格的公司或事务所连VBA也禁止使用)。

    内置功能的第二个好处是,它对Office内部对象的支持是最方便也最可靠的。当然,Python等开发工具可以通过COM接口等方式同样调取Office对象,但毕竟是从外部调取Office,而VBA则是在Office内部工作,更加方便。比如,商业办公中经常需要把复杂的操作先手工录制为宏,然后再编程改造为自动化。而Office录制的宏全是VBA代码,如果是使用VBA开发,可以直接引用,无需再人工翻译成Python代码。

    内置功能的第三个好处,是它可以随Office文件(docm、xlsm等)直接分发给别人使用。而使用Python等,则不仅要发送一个office文件,还要发送一个程序文件。假如别人的电脑上没有安装过Python运行环境,那么还需要把程序达成一个可执行包再发送,不仅麻烦,而且文件体积往往比较大。

    此外,VBA是专门为调用Office功能而设计,所以对于只懂Office不懂程序设计的人士,学起来更加直接。初学者只需学会sub/endsub、cells 这三个关键字就能用程序控制Excel。相比之下,python是一个通用意义上的开发工具,操作Office只是它的功能之一。所以初学者需要了解更多知识(模块导入、类与对象、文件读写等)才能开始Office编程,上手难度稍微高了一点。

    所以总结一下,我们的观点是:如果日常有大量工作严重依赖于Excel、Word 等 Office 工具,并且企业中禁止安装Python等专业开发工具,那么VBA仍然是最好的选择。而如果已经熟悉 Python,办公环境中又可以使用Python、不需要让自己的程序随Office文件同时发布,那么仅用Python就已足够(我有很多数据科学家朋友就只用Python操作Excel、不懂VBA)。

    不过只要时间和精力允许、二者都能学习一点,那么充分结合二者优势当然会实现最灵活强大的功能。因为就像本节课程中演示的,xlwings等工具既允许我们在Python中调用VBA,也允许我们在VBA中调用Python(这一点需要在Excel中安装插件,所以留待实战篇再讲解)!所以当面对高级、复杂的需求时,我们完全可以针对不同功能分别使用VBA和Python编写不同程序,再通过互相调用实现完美的效果。

    a17a366fb76eee8e5c356cba48e160f7.png

    因此从我们的角度看,单纯讨论二者谁强谁弱并没有意义。只要我们能够理解二者各自的长项和不足,就能针对每一项任务找出最合适的方案。这也就是本文标题中引用 “搁置争议、共同开发” 的含义所在。

    展开全文
  • excel是这个世界最好的软件,没有之一。但其内置的开发语言是vba,太古老了。一直有大牛呼吁把vba换成python,让excel中的各种数据长个智能化的翅膀。...python读写excel神器但是,要安装一次这个...

    excel是这个世界最好的软件,没有之一。但其内置的开发语言是vba,太古老了。一直有大牛呼吁把vba换成python,让excel中的各种数据长个智能化的翅膀。微软公司据说也有这个计划,但一直没有实施。

    软件公司不搞,社区的超级大牛就要出手了,这个超级编辑神器叫做grid studio:一个基于网络的电子表格应用程序,集Python编程语言之大成。

    d9438a2b01644e395b5dbcf9552028bb.gif

    python读写excel神器

    但是,要安装一次这个神器真心不容易,速度巨慢,这是我安装的截图:

    9d9dea881196ec44f9aa5a1e8d4c5a0d.png

    grid studio之黑乎乎窗口安装

    python本身学习难度不高,但编程这个东西,不实践是不可能功夫上身的,尤其是非程序员岗位的人,如果不和自己的工作实践结合,没办法深入下去。深入结合最好的办法,我认为就是和自己的工作表格结合。grid studio值得你下一番功夫掌握。

    我虽然是个老程序员,但对python也是才开始学,把一本书上的例子复制粘贴了一遍,初步有点感觉,准备深入学一下python。python的学习教程,我感觉《Python编程:从入门到实践》最值得学习,这本书的例子有很多人在讨论学习,里面跑不出的东西,基本都有对应版本的解决方案。

    展开全文
  • 这两天完成了一个vba小工具,交易时间能每隔一秒读一次excel期权套利模板里面的某个页面的数据,存到access的mdb里面。 重放的时候选好时间后从access里面读出。 总共300多行,主要就是存取数据,以及定时调用等。...

    这两天完成了一个vba小工具,交易时间能每隔一秒读一次excel期权套利模板里面的某个页面的数据,存到access的mdb里面。

    重放的时候选好时间后从access里面读出。

    总共300多行,主要就是存取数据,以及定时调用等。

    研究存储耗费了大量时间,定时调用开始写了个while程序直接挂掉,最后发现得用自调用,读数据的时候总报错,要搞成time=“'20140331 12:21:15'”的形式才行。(这是因为自己抄了个sqlDatetime的函数导致的)

    一句话,VBA很蛋疼。

    ==========

    主要代码:

    1. 读数据

    Sub read_options()
    
    Dim cnn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & ThisWorkbook.Path & "\test.mdb;Mode=ReadWrite;Extended Properties='';Jet OLEDB:System"
    
    '1.读数据
    Dim his_date As Date
    his_date = Worksheets("quote").Range("Y10")
    his_date_str = sqlDateTime(his_date)
    strsql = "select top 1 time from record where time<""" & his_date_str & """ order by ID desc;"
    rs.Open strsql, cnn, adOpenKeyset, 2 '打开记录集
    
    Dim ldate As String
    ldate = rs.Fields(0)
    
    rs.Close
    
    strsql1 = "select * from quote where time=""" & ldate & """ order by strike_a asc;"
    rs.Open strsql1, cnn, adOpenKeyset, 1 '打开记录集
    
    '2. 复制数据
    fieldCount = rs.Fields.Count
    
    rs.MoveFirst
    idx = 0
    Set Rng = Sheet2.Range("A3")
    Do While Not rs.EOF
    idx = idx + 1
    
    For i = 0 To fieldCount - 1
    If i = 0 Or i = (fieldCount - 1) Then GoTo nextI
    
    Rng.Offset(idx, i - 1) = rs.Fields(i).Value
    nextI:
    Next i
    
    rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    
    
    End Sub

     

    2. 存期权数据

    '存储期权
    Sub save_options()
    
    Dim cnn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    
    '确定是否需要存储
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & ThisWorkbook.Path & "\test.mdb;Mode=ReadWrite;Extended Properties='';Jet OLEDB:System"
    strsql1 = "select top 1 time from record order by ID desc;"
    rs.Open strsql1, cnn, adOpenKeyset, 2 '打开记录集
    
    Dim ldate As String
    ldate = rs.Fields(0)
    
    Dim lvalue As String
    
    lvalue = sqlDateTime(Now())
    
    Dim temp_var As Variant
    temp_var = "time"
    rs.AddNew temp_var, lvalue
    
    rs.Close
    
    strsql = "select * from quote;"
    rs.Open strsql, cnn, adOpenKeyset, 2 '打开记录集
    
    '1. 确定期权需要存储的范围
    first_row = 4
    last_row = Sheets("quote").Range("a65536").End(xlUp).Row
    ' column from a to v
    'Debug.Print first_row, last_row
    
    '2. 循环存储
    Dim fieldsArray(22) As Variant
    fieldsArray(0) = "Strike_a"
    fieldsArray(1) = "Position_call_a"
    fieldsArray(2) = "Volume_call_a"
    fieldsArray(3) = "Bid1_call_a"
    fieldsArray(4) = "Last_call_a"
    fieldsArray(5) = "Ask1_call_a"
    fieldsArray(6) = "Bid1_put_a"
    fieldsArray(7) = "Last_put_a"
    fieldsArray(8) = "Ask1_put_a"
    fieldsArray(9) = "Volume_put_a"
    fieldsArray(10) = "Positon_put_a"
    fieldsArray(11) = "Strike_b"
    fieldsArray(12) = "Positon_call_b"
    fieldsArray(13) = "Volume_call_b"
    fieldsArray(14) = "Bid1_call_b"
    fieldsArray(15) = "Last_call_b"
    fieldsArray(16) = "Ask1_call_b"
    fieldsArray(17) = "Bid1_put_b"
    fieldsArray(18) = "Last_put_b"
    fieldsArray(19) = "Ask1_put_b"
    fieldsArray(20) = "Volume_put_b"
    fieldsArray(21) = "Position_put_b"
    fieldsArray(22) = "time"
    
    Dim values(22) As Variant
    
    For i = first_row To last_row
    arr1 = Application.Transpose(Sheets("quote").Range("A" & i & ":" & "V" & i))
    arr2 = Application.Transpose(Application.Index(arr1, , 1))
    For j = 1 To 22
    values(j - 1) = arr2(j)
    Next
    values(22) = lvalue
    rs.AddNew fieldsArray, values
    Next
    '3. 关闭连接
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
    End Sub

     

    reference:

    http://www.cnblogs.com/dxy1982/tag/VBA/ 真心不错

    还有很多,但是都很零散,没记录下来

    转载于:https://www.cnblogs.com/surgod/p/3638733.html

    展开全文
  • Excel VBA CVR-100U/C 身份证记录程序 源代码为汽车站旅游线路记录个人记录使用 功能: 窗口界面:提供身份证信息显示,操作员信息,统计信息,全功能手动、自动、批量记录 记录功能:在表中自动按月记录数据 说明:...
  • 上篇文章我们介绍了如果在Excel中利用VBA技术访问Word文档,今天我们就说说如何在Excel中利用VBA写入/提取Word文档中的数据。写入Word文档当前文件夹中存在一个test的Word文档,文档中仅有一张六列三行的空表格,...

    上篇文章我们介绍了如果在Excel中利用VBA技术访问Word文档,今天我们就说说如何在Excel中利用VBA写入/提取Word文档中的数据。

    0bbb164c12992e5e32ed6c128568c9f4.png

    写入Word文档

    当前文件夹中存在一个test的Word文档,文档中仅有一张六列三行的空表格,现在我们在Excel中利用VBA向此Word文档中写入内容。

    a85587cec5231d9dff3360a01035bf75.png

    当前文件夹,打开一个Excel,打开Visual Basic视图,输入以下代码:

    ba0a7b30143817033ba18e48bb2f8bf7.png

    点击运行按钮,即可发现,Word文档中的表格1,已经被填充数字。

    最终结果如下图所示:

    7097ce3aa2d819f9f3e5aa5aad167b26.png

    代码解释

    wdapp.Documents.Open Filename:=ThisWorkbook.Path & "est.docx"

    打开当前文件夹下名字为test的Word文档;

    wdapp.Visible = True

    打开之后,使文档处于可视的状态;

    wdapp.Documents(1).Tables(1).Range

    Word文档表格1(Tables(1))的范围,这里表格共三行六列,所以range等于18;

    .Cells(i).Range = i

    这里将Word表格1中写入对应的数字;

    完整代码如下所示:

    Sub 数据写入word中()Dim wdapp As Word.ApplicationDim wddoc As DocumentSet wdapp = New Word.Applicationwdapp.Documents.Open Filename:=ThisWorkbook.Path & "est.docx"wdapp.Visible = TrueWith wdapp.Documents(1).Tables(1).RangeFor i = 1 To .Cells.Count.Cells(i).Range = iNextEnd WithEnd Sub

    读取Word中的数据

    下图中,Word中存在一张表 表1,里面存储着不同的数据,现在我们需要把纯数据项提取出来 ,并汇总到Excel单元格中。

    89d6cd6befe70609d3cba2eb24df3f72.png

    打开Visual Basic视图,输入以下代码:

    007157ad1fb185ef302e2c908d2a8539.png

    点击运行按钮,完成数据的提取,结果如下图所示:

    07de41b2aaff9da984e95b4def340b18.png

    代码说明:

    Left(.Cells(i).Range, Len(.Cells(i).Range) - 2):

    .Cells(i).Range为当前Word单元格中的内容,如第一个单元格内容是【18】,但提取出来的并不是单纯的18,在VBA本地窗口中可以发现,它是一个【18 】,18+空格+一个正方形;但是我们只要数字18,后面的空格和正方形是不需要的,这里用一个left函数,去除后两位,提取数字;

    IsNumeric(u):

    判断u是否为数字,如果是则进入下一步,如果不是则结束。

    程序运行完一定要关闭Word哦,wdapp.Quit,切记!

    明细代码如下图所示:

    Sub 提取数据()On Error Resume NextDim wdapp As Word.ApplicationDim wddoc As DocumentSet wdapp = New Word.Applicationwdapp.Documents.Open Filename:=ThisWorkbook.Path & "est.docx"wdapp.Visible = Falsen = 1With wdapp.Documents(1).Tables(1).RangeFor i = 1 To .Cells.Countu = Left(.Cells(i).Range, Len(.Cells(i).Range) - 2)If IsNumeric(u) Thenn = n + 1Cells(n, 1) = uEnd IfNextEnd WithCells(1, 1) = "提取数字"wdapp.QuitEnd Sub

    小结

    以上就是关于Excel中利用VBA操作Word的相关介绍,如果觉得有用,欢迎关注我,定期分享数据小技巧!

    展开全文
  • 手把手教你利用VBA+excel制作 IFIX 报表 可完美移植到VB6.0。 正在的手把手,一步一图,代码详解! 其中主要讲述如何判断文件、数据文件的存在、...并如何利用EXCEL模块建立报表,读写EXCEL等等。 本文介绍的是日报表
  • 本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中连接MySQL数据库及数据读写 系统环境:Windows 10Excel 2013XAMPP。其中集成的数据库是MariaDB 10.1.13(如果不懂MariaDB为何物,可...
  • 本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中连接MySQL数据库及数据读写系统环境:Windows 10Excel 20101. VBA连接MySQL前的环境配置系统中必须先安装有MySQL服务,这个就不多说...
  • 上篇文章我们介绍了如果在Excel中利用VBA技术访问Word文档,今天我们就说说如何在Excel中利用VBA写入/提取Word文档中的数据。写入Word文档当前文件夹中存在一个test的Word文档,文档中仅有一张六列三行的空表格,...
  • EPPlus 读写 Excel 资料收集

    千次阅读 2016-08-25 16:34:46
    EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。 官网:http://epplus.codeplex.com/ EPPlus 支持: 单元格范围单元格样式(边框,颜色,填充,字体,数字,对齐)图表图片...
  • VBA角度来看Excel工作表,一个单元格区域可以是一个单独的单元格、一个行、一个列或者一系列单元格及其行、列。在使用VBA程序代码引用单元格区域时,Range对象可能是最常用的对象。这里就将向用户全面介绍如何利用...
  • VBA基础篇(Excel数据处理)内容目录: 章节一:开篇导言 课时1 无边数据萧萧下,不尽人工滚滚来13:09 章节二:VBA开发环境设置 课时2 第一回 生平不识VBE,便想编程也枉然11:13 章节三:第一个程序:读写单元格 课时3 第...
  • 本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中连接MySQL数据库及数据读写系统环境:Windows 10Excel 2013XAMPP。其中集成的数据库是MariaDB 10.1.13(如果不懂MariaDB为何物,可把...
  • excel和python哪个难学excel 分应用和VBA编程,phthon本就是编程语言,对数据分析来说,excel足够了,而且是最容易学习的数据处理与分析应用软件,Python肯定比excel难学。如何学pythonpython数据分析的门槛较低果是...
  • ExcelVBA与Mysql交互

    2019-04-24 14:52:00
    转载自https://www.cnblogs.com/wuzhiblog/p/VBA_Excel_Mysql.html,感谢原博主 ...VBA读写MySQL数据Excel中连接MySQL数据库及数据读写 系统环境: Windows 10 Excel 2010 1. VBA连接MySQ...
  • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改 可以和matplotlib以及pandas无缝连接 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。 开源免费,一直在更新 ...
  • 使用EPPlus(C#)读写Excel

    千次阅读 2018-03-15 16:38:40
    1. EPPlus概述EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。官网:http://epplus.codeplex.com/EPPlus 支持:单元格范围单元格样式(边框,颜色,填充,字体,数字,对齐)图表...
  • MATLAB学习(四)Excel读写数据

    万次阅读 2017-03-22 18:14:25
    今天看到这篇博文,花了两个多小时捣鼓了一下,最后终于成功地使我的MATLAB从Excel中读取数据了!(如下图所示)。 其实大部分时间都在捣鼓出现的“Microsoft Office Word 需要VBA宏语言支持来完成此操作。”这...
  • 本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中连接MySQL数据库及数据读写系统环境:Windows 10Excel 2013XAMPP。其中集成的数据库是MariaDB 10.1.13(如果不懂MariaDB为何物,可把...
  • 用python来读写excel,目前找了2个方法:win32com.client和openpyxlwin32com.client可以对excel进行各种操作,可以调用VBA的库,相当于是模拟用户对excel进行操作,在执行过程中,你可以看到ex...
  • 本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中连接MySQL数据库及数据读写系统环境:Windows 10Excel 20101. VBA连接MySQL前的环境配置系统中必须先安装有MySQL服务,这个就不多说...
  • 项目周报汇报的时候要做数据汇总,...用python来读写excel,目前找了2个方法:win32com.client和openpyxl win32com.client可以对excel进行各种操作,可以调用VBA的库,相当于是模拟用户对excel进行操作,在执行...
  • 有需要可以到博客园看:Excel、VBA与MySQL交互 - 吴志 - 博客园################################################################本文主要涉及:VBA中的MySQL环境配置VBA连接MySQL数据库VBA读写MySQL数据Excel中...
  • Spire.XLS特点 Spire.XLS for .NET 支持所有...支持数据库导出到Excel工作表,或者把数据从Excel数据导入到数据库; .支持向Excel文件里面写入公式,表格,图片,不同类型的文字,链接,注释甚至VBA等内容; 支持将E
  • 用python来读写excel,目前找了2个方法:win32com.client和openpyxlwin32com.client可以对excel进行各种操作,可以调用VBA的库,相当于是模拟用户对excel进行操作,在执行过程中,你可以看到ex...

空空如也

空空如也

1 2 3 4 5
收藏数 100
精华内容 40
关键字:

vba读写excel数据