【问题标题】:Open file in a specific directory在特定目录中打开文件
【发布时间】:2018-10-30 14:57:38
【问题描述】:

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

【问题讨论】:

  • 您可以添加Imports Microsoft.Office.Interop.Excel,但这只是开始。按照shown here 的顺序打开工作簿,访问工作表并在完成后释放您创建的对象。
  • Open Excel workbook的可能重复
  • @Codexer,我不同意你的看法。 Open file in a specific directory 没有反映问题中的问题。在问题标题中使用标签名称并不是固有不好。实际上,有些问题的标题中没有标签词是无法提出的,例如the most upvoted VB.NET questionJon Skeet's most upvoted question
  • @AhmedAbdelhameed 您提到的最受好评的 VB.NET 问题是created(2011 年 1 月 11 日)之前tag(2011 年 10 月 15 日)。
  • @AndrewMorton 嗯,Jon Skeet 的问题是在 C# 标签之前创建的?这不是重点,这些只是例子。正如我上面所说的,在问题标题中使用标签并不是固有不好。当它是不必要的并且仅用于“标记”问题时,这很糟糕。我的本意不是要把这变成一场辩论,我只是对编辑摘要中关于我认为显而易见的事情感到惊讶。

标签: excel vb.net excel-interop


【解决方案1】:

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

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

当你把文件名和路径放在一起时,很容易把 \s 弄得一团糟,所以可以使用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保存对话框;我相信您可以找到不显示的选项。

【讨论】:

  • 感谢您的详细回答。希望以后可以尝试一下,并确认您的答案对我有用。
猜你喜欢
  • 2019-12-03
  • 2013-02-24
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2013-05-06
  • 1970-01-01
相关资源
最近更新 更多