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