标题:如何读取CSV最后一行指定单元格内容
只看楼主
alickluo
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2023-1-29
结帖率:60%
已结贴  问题点数:20 回复次数:8 
如何读取CSV最后一行指定单元格内容
各位老师:

如何读取CSV最后一行指定单元格内容:

A.CSV是通过","分割而成的文件,里面有多行多列,如何读取最后一行第8列的内容,另外这列内容有公式,如何只读取数据(公式的结果)

谢谢大家!!
搜索更多相关主题的帖子: 单元格 一行 读取 内容 CSV 
2023-03-15 23:02
mrexcel
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:125
专家分:480
注 册:2022-11-3
得分:20 
Split()分割两次,Evaluate()转换成数值
2023-03-17 14:37
alickluo
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2023-1-29
得分:0 
回复 2楼 mrexcel
小白一个,能提供完整代码吗?
2023-03-18 17:28
mrexcel
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:125
专家分:480
注 册:2022-11-3
得分:0 
以下是引用alickluo在2023-3-18 17:28:52的发言:

小白一个,能提供完整代码吗?

你至少提供一个测试文件吧?
2023-03-19 16:34
alickluo
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2023-1-29
得分:0 
回复 4楼 mrexcel
谢谢老师,请查阅附件,现在想读取最后一行的第9个字段。
A_工单用料明细.rar (289 Bytes)
2023-03-23 09:38
alickluo
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2023-1-29
得分:0 
另外,压缩上传后,CSV的公式被转为了数值格式,但实际环境该单元格是公式,需要提取公式得出的值。
2023-03-23 09:43
mrexcel
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:125
专家分:480
注 册:2022-11-3
得分:0 
程序代码:
Dim s() As String, F8 As String
Open "c:\A_工单用料明细.csv" For Input As #1
s = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
Close #1
F8 = Split(s(UBound(s) - 1), ",")(8)
MsgBox F8
2023-03-27 16:33
alickluo
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2023-1-29
得分:0 
为何显示“下标越界”?
2023-04-01 11:34
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
可以使用VB的FileSystemObject对象来读取CSV文件,并使用Split函数将每一行分割成数组。然后可以通过数组的长度来获取最后一行,并使用Split函数将最后一行分割成单元格。最后可以使用Excel的Application对象来计算公式并获取结果。
以下是一份示例代码:
Sub ReadLastCellInCSV()
    Dim filePath As String
    filePath = "C:\test.csv" 'CSV文件路径
   
    ' 创建FileSystemObject对象
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    ' 打开CSV文件
    Dim file As Object
    Set file = fso.OpenTextFile(filePath, 1)
   
    ' 读取CSV文件内容
    Dim content As String
    content = file.ReadAll
   
    ' 关闭CSV文件
    file.Close
   
    ' 将CSV文件内容分割成行数组
    Dim lines() As String
    lines = Split(content, vbCrLf)
   
    ' 获取最后一行
    Dim lastLine As String
    lastLine = lines(UBound(lines))
   
    ' 将最后一行分割成单元格数组
    Dim cells() As String
    cells = Split(lastLine, ",")
   
    ' 获取第8列的内容
    Dim cellValue As String
    cellValue = cells(7) '数组下标从0开始,第8列的下标为7
   
    ' 创建Excel的Application对象
    Dim excelApp As Object
    Set excelApp = CreateObject("Excel.Application")
   
    ' 计算公式并获取结果
    Dim result As Variant
    result = excelApp.Evaluate(cellValue)
   
    ' 关闭Excel的Application对象
    excelApp.Quit
   
    ' 显示结果
    MsgBox "最后一行第8列的内容为:" & result
End Sub

需要注意的是,使用Excel的Application对象计算公式需要先启动Excel程序,因此需要等待一段时间。如果CSV文件中的公式比较复杂,计算时间可能会比较长。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2023-04-03 19:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511557-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017833 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved