vba读取csv_从VBA到Python,Excel工作效率如何提高?

3373b7cf31d49957e959ede40648a2bf.png

标星★ 置顶 公众号      爱你们 ♥     作者:Costas 

编译:1+1=6

1

前言

如果有一种方法可以将Excel与Python集成起来,该多好啊!现在有了:

xlwings库允许我们通过VBA调用Python脚本来进行两者的交互!

48c46d8e7ca41c69905ff5d774a11763.png

2

为什么要将Python与Excel VBA集成?

事实上,你可以在VBA中做任何事情。那么为什么要使用Python呢?原因有很多:

1、你可以在Excel中创建一个自定义函数,而不需要学习VBA。

2、使用Python可以显著加快数据操作的速度。

3、Python中有各种各样的库(机器学习、数据科学等)、

4、因为你可以!!!

3

xlwings安装

第一步安装:

pip install xlwings

接下来,我们需要安装Excel集成部分:

xlwings addin install

在使用 Excel 2016的 Win10上,人们经常会看到以下错误:

952c8155dc005eec15f8eac622189609.png

你可以通过使用 mkdir 命令解决这个问题:

1c40455c25462cab59cc79c5dab96abd.png

安装好一切:

5d40828a890328608b8d95f9cffaee6b.png

4

启用xlwings的用户定义函数

首先我们需要加载 Excel 外接程序:

2b769be38ef1b6da9104e934c5d4142f.png

最后,我们需要启用对 VBA 项目对象模型的信任访问。你可以通过导航到文件选项信任中心设置宏来做到这一点:

5e9947f045d53cf3609d93fbc858df3e.png

5

具体操作

有两种主要的方法可以使我们从 Excel 转换到 Python(以及转换回来)。第一种是直接从 VBA 调用 Python 脚本,另一种是通过用户定义函数调用。

为了我们每次都能正确设置,xlwings提供了创建Excel电子表格的功能:

xlwings quickstart ProjectName

上面的命令将使用 Excel 工作表和 Python 文件在预导航目录中创建一个新文件夹。

fc8da6ba7e44af181d1fa18529a621c8.png

打开.xlsm文件,你会立即注意到一个名为_xlwings.conf的新Excel工作表。如果你希望覆盖xlwings的默认设置,只需重命名该工作表并删除开始的下划线即可。通过这些,我们就可以开始使用xlwings了。

6

从VBA到Python

在我们开始编码之前,让我们首先确保在同一个页面上。打开Excel VBA 编辑器,点击 Alt + F11。返回以下屏幕:

3b24cb909911c70fd12151871f4979c6.png

这里要注意的关键事情是,这段代码将做以下工作:

1、在与电子表格相同的位置查找Python脚本。

2、查找与电子表格名称相同的Python脚本(扩展名为.py)。

3、在Python脚本中,调用函数main()。

让我们看几个例子,看看如何使用它。

例1:在Excel外部操作,并返回输出。

在本例中,我们将看到如何在Excel之外执行操作,然后在电子表格中返回结果。

我们将从CSV文件中获取数据,对这些数据进行修改,然后将输出传递到Excel:

首先,VBA代码。

然后,Python代码:

import xlwings as xwimport pandas as pddef main():
    wb = xw.Book.caller()
    df = pd.read_csv(r'C:\temp\TestData.csv')
    df['total_length'] = df['sepal_length_(cm)'] + df['petal_length_(cm)']
    wb.sheets[0].range('A1').value = df

结果如下:

80834adda309f1151c8e8745738eb050.gif

例2:从Excel中读取,用Python对其进行处理,然后将结果传递回Excel。

更具体地说,我们将读取一个 Greeting,一个 Name 和一个我们可以找到jokes的文件位置。 然后,我们的 Python 脚本将从文件中随机抽取一行,并返回一个jokes。

首先,VBA代码。

然后,Python代码:

import xlwings as xwimport randomdef random_line(afile):
    line = next(afile)for num, aline in enumerate(afile, 2):if random.randrange(num): continue
      line = alinereturn linedef main():
    wb = xw.Book.caller()
    listloc = str(wb.sheets[0].range('B3').value)
    fhandle = open(listloc, encoding = 'utf-8')
wb.sheets[0].range('A5').value = wb.sheets[0].range('B2').value + ' ' + wb.sheets[0].range('B1').value + ' here is a joke for you'
    wb.sheets[0].range('A6').value = random_line(fhandle)

结果如下:

994b164af5a7bf561718eb3cc42d866c.gif

7

用户定义函数与xlwings

我们将以与以前几乎相同的方式更改python文件中的代码。为了把一个东西变成一个Excel用户定义函数,我们需要做的就是

与前面的方式大致相同,我们将更改 Python 文件中的代码,使其变成一个 Excel 用户定义函数,我们所需要做的就是包含@xw.func:

import xlwings as xw@xw.funcdef joke(x):
    wb = xw.Book.caller()
    fhandle = open(r'C:\Temp\list.csv')for i, line in enumerate(fhandle):if i == x:return(line)

结果如下:

99b411892fc31fd6944ebe20da55b983.gif

希望大家可以有所收获!

2020年第25篇文章

量化投资与机器学习微信公众号,是业内垂直于Quant、MFE、Fintech、AI、ML等领域的量化类主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险资管、海外等众多圈内18W+关注者。每日发布行业前沿研究成果和最新量化资讯。

6bf5f70794235061d18311e9abb19f4e.png 你点的每个“在看”,都是对我们最大的鼓励
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用VBA编写代码来读取CSV文件并将其导入到Excel工作表中。以下是一个示例代码: ```vb Sub ImportCSV() Dim filePath As String Dim targetWorksheet As Worksheet Dim targetRange As Range '设置CSV文件路径 filePath = "C:\example.csv" '设置导入目标工作表和范围 Set targetWorksheet = ActiveWorkbook.Worksheets("Sheet1") Set targetRange = targetWorksheet.Range("A1") '导入CSV数据 With targetWorksheet.QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=targetRange) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True 'CSV文件使用逗号分隔 .Refresh End With End Sub ``` 在这个示例代码中,我们首先使用`filePath`变量设置CSV文件的路径,然后使用`Set`语句设置要导入数据的目标工作表和范围。接下来,我们使用`QueryTables`对象的`Add`方法创建一个查询表,并将CSV文件的路径和目标范围作为参数传递。最后,我们设置查询表的属性,包括数据类型和分隔符,并调用`Refresh`方法来导入CSV数据。 请注意,此示例假设CSV文件中的数据以逗号分隔。如果CSV文件使用其他分隔符,可以使用`TextFileTabDelimiter`、`TextFileSemicolonDelimiter`等属性来指定分隔符。 ### 回答2: VBA是Visual Basic for Applications的缩写,是一种用于自动化任务和宏编程的编程语言。要将CSV文件读取Excel工作表中,我们可以使用VBA编写一段代码来实现。 首先,需要打开Excel并创建一个新的工作簿。然后,在VBA编辑器中,我们可以定义一个Sub过程,命名为"ReadCSV"。 在这个"ReadCSV"过程中,我们需要使用一些对象和方法来完成任务。首先,我们需要使用FileSystemObject对象来访问文件系统。然后,我们使用它的OpenTextFile方法打开CSV文件。 接下来,我们可以使用Excel的Workbook对象中的Worksheets属性来访问我们新创建的工作簿的工作表。我们可以使用Add方法创建一个新的工作表,并将其分配给一个名为"Sheet1"的变量。 然后,我们可以使用Worksheet对象中的Cells属性,将CSV文件中的数据逐行逐列地复制到工作表中。我们可以使用FileSystemObject对象的ReadLine方法来逐行读取CSV文件,然后使用Split函数将每一行的文本分割成一个数组。 最后,我们关闭CSV文件并保存Excel工作簿。我们可以使用Workbook对象中的Save方法来保存工作簿,然后使用Workbook对象中的Close方法来关闭工作簿。 以下是一个示例VBA代码段,用于将CSV文件读取Excel工作表中: ``` Sub ReadCSV() Dim fso As Object Dim csvFile As Object Dim dataLine As String Dim dataArray() As String Dim rowNum As Integer Dim colNum As Integer Set fso = CreateObject("Scripting.FileSystemObject") Set csvFile = fso.OpenTextFile("C:\path\to\your\csv\file.csv") Set Sheet1 = ThisWorkbook.Worksheets.Add rowNum = 1 Do While Not csvFile.AtEndOfStream dataLine = csvFile.ReadLine dataArray = Split(dataLine, ",") colNum = 1 For Each dataItem In dataArray Sheet1.Cells(rowNum, colNum).Value = dataItem colNum = colNum + 1 Next dataItem rowNum = rowNum + 1 Loop csvFile.Close ThisWorkbook.Save ThisWorkbook.Close End Sub ``` 以上是一个简单的示例,供参考。你可以根据自己的需求进行修改和扩展。 ### 回答3: VBA是一种用于自动化操作Excel的编程语言,可以通过VBA读取CSV文件并将其内容导入到Excel工作表中。 首先,我们需要使用VBA中的文件对话框功能来选择要导入的CSV文件。代码示例如下: ```vba Sub ImportCSVFile() Dim fd As FileDialog Dim csvFileName As String Dim wb As Workbook Dim ws As Worksheet '创建文件对话框对象 Set fd = Application.FileDialog(msoFileDialogFilePicker) '设置文件对话框的类型 fd.Title = "请选择要导入的CSV文件" fd.Filters.Clear fd.Filters.Add "CSV Files", "*.csv" '如果用户选择了文件并按下了"打开"按钮 If fd.Show = -1 Then csvFileName = fd.SelectedItems(1) Else Exit Sub End If '打开CSV文件 Set wb = Workbooks.Open(csvFileName) Set ws = wb.Sheets(1) '假设CSV文件中的数据在第一个工作表中 '将CSV文件中的内容复制到当前工作簿的工作表中 ws.UsedRange.Copy Range("A1") '关闭CSV文件 wb.Close SaveChanges:=False '释放对象 Set wb = Nothing Set ws = Nothing Set fd = Nothing End Sub ``` 在以上代码中,我们首先创建了一个文件对话框对象,然后设置了对话框的标题和类型,只允许选择CSV文件。当用户选择了文件并点击了"打开"按钮后,我们将选择的文件路径保存在`csvFileName`变量中。 接下来,我们使用`Workbooks.Open`方法打开了CSV文件,并将文件中的数据导入到一个工作表对象`ws`中。在这里假设CSV文件中的数据在第一个工作表中。然后,通过`ws.UsedRange.Copy Range("A1")`将CSV文件中的内容复制到当前工作簿的工作表中的A1单元格处。 最后,我们关闭了CSV文件,释放了创建的对象。 以上就是使用VBA读取CSV文件并将其内容导入到Excel工作表中的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值