在特定目录中打开文件

Open file in a specific directory

我是 Visual Basic 的新手,有点迷茫。我正在尝试导入我认为正确的内容,以便能够使用 类,在使用 VBA 宏函数时似乎会弹出。现在我的代码无法识别工作簿。

我的主要目标是简单地使用 Visual Basic 中的 Visual Studio Windows 窗体,使用在文本框中键入的名称打开特定目录中的 excel 文件, 并另存为 .txt 文件。好像我缺少主要的导入或 COM 引用。有帮助吗?

Imports Microsoft.Office.Interop
Imports Microsoft.VisualBasic


Public Class Form1

Dim path As String = "C:\Users\Dustin\Desktop\"
Dim filename1 As String

Private Sub txtBoxExcelFileNameString_TextChanged(sender As Object, e As EventArgs) Handles txtBoxExcelFileNameString.TextChanged
    filename1 = txtBoxExcelFileNameString.Text

End Sub

Private Sub btnExcelSaveAs_Click(sender As Object, e As EventArgs) Handles btnExcelSaveAs.Click

    Workbooks.Open Filename:=path & filename1

End Sub
End Class

除了您可能希望使用 .NET 程序打开 Excel 文件的简单操作之外,还需要一些代码,The proper way to dispose Excel com object using VB.NET? I 对此进行了解释在下面的代码中使用了它。

要获得正确的变量类型,Office Interop 的内容可能会很乏味 - 您可以使用 Option Strict On and Option Infer On 获得 Visual Studio 来帮助您。 (我将它们设置为新项目的默认值,所以我通常不会在代码中显示它们。)

当你把文件名和路径放在一起的时候,很容易把\s搞混,所以可以用Path.Combine这样你就不用担心留不留了, 尾随目录分隔符 in.

无需对桌面目录路径进行硬编码,因为有一个函数可以为您获取它,它会为计算机上的每个用户自动更改。

在实际保存文件时,WorkBook.Save 方法有很多参数,所以我采取了使用 named parameter 告诉它保存格式的简单方法。它将自动为正在保存的文件类型添加正确的文件扩展名。

所以...

Option Strict On
Option Infer On

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports System.IO

Public Class Form1

    Private Sub SaveExcelAsTextOperation(src As String, dest As String)
        Dim app As New Excel.Application
        Dim book = app.Workbooks.Open(src)
        book.SaveAs(dest, FileFormat:=XlFileFormat.xlCSV)
        book.Close()
        app.Quit()

    End Sub

    Private Sub SaveExcelAsText(src As String, dest As String)
        ' from: The proper way to dispose Excel com object using VB.NET? 
        SaveExcelAsTextOperation(src, dest)
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()
    End Sub

    Private Sub btnExcelSaveAs_Click(sender As Object, e As EventArgs) Handles btnExcelSaveAs.Click
        Dim filename1 = txtBoxExcelFileNameString.Text
        Dim workDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
        Dim source = Path.Combine(workDirectory, filename1 & ".xlsx")
        Dim destination = Path.Combine(workDirectory, filename1)
        SaveExcelAsText(source, destination)

    End Sub

End Class

做我认为你想要的。出现一个 Excel 保存对话框;我相信你可以找到一个不显示的选项。