在特定目录中打开文件

时间:2018-05-21 00:31:32

标签: excel vb.net excel-interop

我是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

enter image description here

1 个答案:

答案 0 :(得分:0)

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

使用Option Strict OnOption Infer On可以让Visual Studio帮助您获取正确的变量类型。 (我将它们设置为新项目的默认值,因此我通常不会在代码中显示它们。)

当您将文件名和路径放在一起时,很容易让它们混乱,因此可以使用Path.Combine,这样您就不必担心离开或不离开了尾随目录分隔符。

没有必要对桌面目录路径进行硬编码,因为有一个功能可以为您获取它,它将自动更改为计算机上的每个用户。

在实际保存文件时,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? https://stackoverflow.com/a/38111107
        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保存对话框;我相信你可以找到一个不显示的选项。