首页 > 解决方案 > exe打开文件

问题描述

我有一个包含六个 Excel 文件的文件夹。它们是彼此的克隆,最后附加了友好的名称。Excel 工作簿连接到同一文件夹中的单个数据库。Excel 文件通过 LAN 上不同 PC 上的桌面快捷方式使用。由于应用程序可以多人同时使用,因此前端需要有单独的 Excel 文件。

我想创建一个 Exe(而不是简单的快捷方式,它将从六个文件中打开一个选定的文件,然后记住从该桌面选择的文件。

这是我在 vb.net 的第一次尝试

    Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
        Dim Bfld As String, sFileName as string
        Bfld = Application.StartupPath 
        ' Say, Bfld is "D:\TestFolder"

       '  Populate a list box here with files with names containing ""MyExcelFileClient*.xlsm"
       '  sFileName = selected listbox item
         sFileName ="MyExcelFileClient1.xlsm"   ' Hard coded with ...Client1.xlsm for testing


        Bfld = Bfld & "\" &  sFileName 
        Label1.Text = Bfld
    '  Wait timer 6 seconds with countdown label in Form1
        ShellExecute(Bfld)
        Me.Close()
    End Sub

    Private Function ShellExecute(ByVal File As String) As Boolean
        Dim myProcess As New Process
        myProcess.StartInfo.FileName = File
        myProcess.StartInfo.UseShellExecute = True
        myProcess.StartInfo.RedirectStandardOutput = False
        myProcess.Start()
        myProcess.Dispose()
    End Function
End Class  

我将不胜感激使用 6 个匹配文件填充 Form1 中的列表框。选择任何文件,将记住选择 (Bfld),直到用户更改它。如果 label1 为空,则 form1 应保留在屏幕上。
如果 label1 有数据(用 Bfld 填充),倒计时 6 秒应该关闭 Form1 并运行 shellExecute 函数。6 秒应该足以让用户更改之前选择的文件。关闭 Form1 或单击按钮应立即运行 ShellExecute 函数。

标签: vb.netdesktop

解决方案


这是我处理这个问题的方法。设置一个带有一个标签以显示文件名和两个按钮的表单。一键更改所选文件,一键实际启动 Excel。计时器是个坏主意。您无法判断用户何时会被打断。

您将需要设置项目属性的设置。请务必将范围限定为用户,以便可以更改值。 在此处输入图像描述

当程序启动时,Form.Load将运行。该代码检查用户设置ExcelPath。为简单起见,标签仅填充文件名,但表单级别变量FilePathToOpen存储完整路径。如果没有找到路径,我们调用该ChangePath方法。btnChangePath从用户想要更改文件时调用相同的方法。

ChangePath方法利用OpenFileDialog. 设置更改并在关闭时自动保存,表单级别变量被重置,标签显示新选择。

实际运行 Excel 的按钮首先检查是否有FilePathToOpen. Using...End Using即使有错误,块也会处理 Dispose 方法。

Private FilePathToOpen As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Label1.Text = Path.GetFileName(My.Settings.ExcelPath)
    FilePathToOpen = My.Settings.ExcelPath
    If Label1.Text = "" Then
        ChangePath()
    End If
End Sub

Private Sub btnChangePath_Click(sender As Object, e As EventArgs) Handles btnChangePath.Click
    ChangePath()
End Sub

Private Sub ChangePath()
    Dim OFD As New OpenFileDialog()
    OFD.InitialDirectory = "C:\Users\maryo\OneDrive\Documents\Excel"
    OFD.Filter = "Excel Files (*.xlxs)|*.xlsx"
    OFD.Title = "Select File to Open"
    If OFD.ShowDialog() = DialogResult.OK Then
        My.Settings.ExcelPath = OFD.FileName
        FilePathToOpen = OFD.FileName
        Label1.Text = Path.GetFileName(OFD.FileName)
    End If
End Sub

Private Sub btnOpenExcel_Click(sender As Object, e As EventArgs) Handles btnOpenExcel.Click
    If Not String.IsNullOrEmpty(FilePathToOpen) Then
        Using myProcess As New Process
            myProcess.StartInfo.FileName = FilePathToOpen
            myProcess.StartInfo.UseShellExecute = True
            myProcess.StartInfo.RedirectStandardOutput = False
            myProcess.Start()
        End Using
        Close()
    Else
        MessageBox.Show("You must choose a file.")
    End If
End Sub 

推荐阅读