Открыть файл в определенном каталоге - PullRequest
0 голосов
/ 21 мая 2018

Я новичок в Visual Basic и немного растерялся.Я пытался импортировать то, что мне показалось правильным, чтобы иметь возможность использовать классы, которые появляются при использовании макросов VBA.Сейчас мой код не распознает рабочие книги.

Моя основная цель - просто использовать форму Visual Studio Windows в Visual Basic, чтобы открыть файл 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 голосов
/ 21 мая 2018

Требуется немного кода в дополнение к тому, что, как вы можете надеяться, будет простой операцией открытия файла Excel с помощью программы .NET, которая объяснена на Правильный способ утилизации объекта com com с использованиемVB.NET? Я использовал это в приведенном ниже коде.

Работа с Office Interop может быть утомительной для получения правильных типов переменных - вы можете получить Visual Studio, чтобы помочь вам, используя Option Strict On и Option Infer On.(Я установил их как значения по умолчанию для новых проектов, так что я бы не стал показывать их в коде.)

Когда вы объединяете имена файлов и пути, легко получить \ s впутаница, так что Path.Combine можно использовать, чтобы вам не приходилось беспокоиться о том, чтобы оставить или нет разделительный каталог в конце.

Нет необходимости жестко кодироватьпуть к каталогу рабочего стола, так как есть функция, чтобы получить его для вас, и он будет автоматически меняться для каждого пользователя на компьютере.

Для фактического сохранения файла есть много параметров для метода WorkBook.Save,и поэтому я выбрал простой способ использования именованного параметра , чтобы указать формат для сохранения. Он автоматически добавит правильное расширение имени файла для типа сохраняемого файла.

Итак ...

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;Я уверен, что вы можете найти вариант, чтобы не показывать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...