栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VBA实现FTP上传文件的两种方式:①shell cmd命令②vba调用vb.net(传参并获取返回值)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VBA实现FTP上传文件的两种方式:①shell cmd命令②vba调用vb.net(传参并获取返回值)

VBA实现FTP上传文件的两种方式:①shell cmd命令②vba调用vb.net(传参并获取返回值)

本文想要上传文件夹内 特定文件名(Excel单元框内手动输入文件名)的文件。vb.net实现FTP文件的上传,代码简单,但vba需要调用所生成的exe文件 实现参数的传递并获取exe的返回值。但在用单纯的vba代码实现FTP文件上传的时候发现,。
如图⬇

方式1:单纯vba代码→shell cmd命令

vba需要①添加新的控件或者是②直接调用cmd命令,问题多多略显鸡肋。
 ①添加新的控件→需要自行下载控件而放弃,未作尝试。
 ②直接调用cmd命令→需要关闭ftp的防火墙,手动进入被动模式(literal pasv)。因环境而异尝试之后有点电脑可有的电脑则无法执行up语句。vba代码仅供参考:

Dim creatDate, fileName, FILE_DIR,localFileName As String
Dim localFilePathName,batfile  As String
Dim FtpSevr,FtpUser,FtpPw,FtpPATH As String
creatDate = Trim(Worksheets(strSheetNM).Cells(4, 3))
fileName = Trim(Worksheets(strSheetNM).Cells(5, 3))
FILE_DIR = "D:ftpjp" '本地文件路径
FtpSevr = "**********" 'Ftp名称
FtpUser = "**********" 'Ftp用户名
FtpPw = "**********" 'Ftp密码
FtpPATH = "**********" 'Ftp上存放uploa的文件夹名
'如果本地文件路径D:ftpjp中存在文件名含有fileName的xml类型的文件
If Dir(FILE_DIR & creatDate & "" & "*" & fileName & "*.xml") <> "" Then
  '获取本地文件路径下的文件名,例file_100001.xml
  localFileName = Dir(FILE_DIR & creatDate & "" & "*" & fileName & "*.xml") 
  '本地文件路径+文件名,例D:ftpjp20200901file_100001.xml
  localFilePathName = FILE_DIR & creatDate & "" & localFileName
  '自动在Excel所在的路径下创建txt文件来存放要编写的cmd命令代码
  batfile = ThisWorkbook.Path & "ftpBatFile.txt"
  nFNO = FreeFile()
  '开始在创建txt文件里写入cmd命令代码
  Open batfile For Output As #nFNO
  Print #nFNO, "open " & FtpSevr
  Print #nFNO, "user " & FtpUser & " " & FtpPwd
  Print #nFNO, "cd " & FtpPATH
  Print #nFNO, "binary"             '二进制方式传输
  Print #nFNO, "put " & localFilePathName
  Print #nFNO, "quit"
  Close #nFNO
  '执行cmd命令代码
  Shell "ftp -n -s:" & batfile
End If
方式2:vba调用vb.net(传参并获取返回值)

vb.net操作简单,但是想要传递文章开头部分讲的手入力的Data:20200901和文件名:100001的参数,并且获得vb.net内ftp是否上传成功的返回值。vba和vb.net代码仅供参考:

//vba代码
Dim creatDate, fileName, FILE_DIR,localFileName As String
Dim WSH, wExec, sCmd As String, Result As String
creatDate = Trim(Worksheets(strSheetNM).Cells(4, 3))
fileName = Trim(Worksheets(strSheetNM).Cells(5, 3))
'vb.net编译生成的exe文件地址
exeFile = "D:ftpjpUpload.exe" 
Set WSH = CreateObject("WScript.Shell")
'命令传递参数Exec("D:ftpjpUpload.exe {参数} {参数} /?")
Set wExec = WSH.Exec(exeFile  & creatDate & " " & strArchiveNo & " /?")
'获取exe文件的返回值
Result = wExec.StdOut.ReadAll
If Result  = "1" Then
MsgBox "upload成功"
Else
MsgBox "upload失败"
End If
Set wExec = Nothing
Set WSH = Nothing
   //vb.net代码
Public Class Main
  '接收vba传递的参数arg() ,参数的个数对应arg(0), arg(1),...,arg(N)
  Shared Sub Main(ByVal arg() As String)
   Dim creatDate, fileName, FILE_DIR, localFileName As String
   Dim localPath, ftpFilePathFrom As String
   Dim FtpSevr, FtpUser, FtpPw, FtpPATH, strReturn As String
   Dim wc As New System.Net.WebClient()
   creatDate = arg(0)
   fileName = arg(1)
   FILE_DIR = "D:ftpjp" '本地文件路径
    FtpSevr = "**********" 'Ftp名称
   FtpUser = "**********" 'Ftp用户名
   FtpPw = "**********" 'Ftp密码
   FtpPATH = "**********" 'Ftp上存放uploa的文件夹名
   strReturn = ""
   localPath = FILE_DIR & creatDate & ""
   '路径D:ftpjp20200901是否存在
   If System.IO.Directory.Exists(localPath) = False Then
     Call WriteTraceLog("本地路径不存在")
   Else
     ftpFilePathFrom = "ftp://" & FtpSevr & FtpPATH
     wc.Credentials = New System.Net.NetworkCredential(FtpUser, FtpPw)
     wc.Proxy = Nothing
     '如果本地文件路径D:ftpjp中存在文件名含有fileName的xml类型的文件
     If Dir(FILE_DIR & creatDate & "" & "*" & fileName & "*.xml") <> "" Then
       localFileName = Dir(FILE_DIR & creatDate & "" & "*" & fileName & "*.xml")
       wc.UploadFile(ftpFilePathFrom & localFileName, localPath & localFileName)
       'Upload成功返回1
       strReturn = strReturn & "1"
     Else
       'Upload失败返回0
       strReturn = strReturn & "0"
     End If
     '解放
     wc.Dispose()
   End If
    '传递返回值
    System.Console.WriteLine(strReturn)
  End Sub
End Class
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号