【问题标题】:prompt for opening a save dialog for excel file using vb.net提示使用 vb.net 打开 excel 文件的保存对话框
【发布时间】:2014-02-07 12:21:57
【问题描述】:

我正在使用 Visual Studio 2012,

我想打开“保存对话框”来选择保存文件的位置,而不是使用固定路径, 以下代码是我想在其中使用它的示例:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim xlsWorkBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlsWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
    Dim xls As New Microsoft.Office.Interop.Excel.Application

    Dim resourcesFolder = IO.Path.GetFullPath(Application.StartupPath & "\Resources\")
    Dim fileName = "book1.xlsx"

    xlsWorkBook = xls.Workbooks.Open(resourcesFolder & fileName)
    xlsWorkSheet = xlsWorkBook.Sheets("a")

    xlsWorkSheet.Cells(1, 1) = TextBox1.Text

    xlsWorkBook.SaveAs("C:\output\book1.xlsx")

    xlsWorkBook.Close()
    xls.Quit()


End Sub

我想改变这个路径“C:\output\book1.xlsx”来保存对话框,所以我可以手动选择保存位置。

非常感谢..

【问题讨论】:

    标签: vb.net excel visual-studio


    【解决方案1】:

    像这样,不要忘记像我添加的那样使用 Marshal 类处理 com 对象。

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     Dim xls As New Microsoft.Office.Interop.Excel.Application
     Dim xlsWorkBook As Microsoft.Office.Interop.Excel.Workbook
     Dim xlsWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
     Dim resourcesFolder = IO.Path.GetFullPath(Application.StartupPath & "\Resources\")
     Dim fileName = "book1.xlsx"
     xlsWorkBook = xls.Workbooks.Open(resourcesFolder & fileName)
     xlsWorkSheet = xlsWorkBook.Sheets("a")
     xlsWorkSheet.Cells(1, 1) = TextBox1.Text
     Using sfd As New SaveFileDialog
      If sfd.ShowDialog() = DialogResult.OK Then
       xlsWorkBook.SaveAs(sfd.FileName)
       MessageBox.Show(sfd.Filename)
      End If
     End Using
     xlsWorkBook.Close()
     xls.Quit()
     Marshal.FinalReleaseComObject(xlsWorkSheet)
     Marshal.FinalReleaseComObject(xlsWorkBook)
     Marshal.FinalReleaseComObject(xls)
    End Sub
    

    【讨论】:

    • 非常感谢,它正在工作.. 我只添加了“使用 sfd 作为新的 SaveFileDialog sfd.ShowDialog() xlsWorkBook.SaveAs(sfd.FileName) End Using”部分。如果你能澄清元帅部分,因为我不明白。还有另一个简单的事情,有没有办法我可以显示一个消息框,其中包含我选择将文件保存到的位置..,非常感谢你的时间
    • .,关于消息框部分的任何建议(显示一个带有我选择将文件保存到的位置的消息框)。谢谢
    • 如果你不使用Marshal.FinalReleaseComObject,你可以在任务管理器中发现你的excel仍然作为一个进程打开。
    • .,感谢您的澄清,我明白了您的意思并阅读并完全理解它..谢谢,但问题是它只有在我先关闭应用程序时才适用于我,但如果我保持我的应用程序运行,excel 进程仍然存在,所以如果你有任何方法可以摆脱它,那就太好了。
    • 您是否在任何地方都持有 Excel 对象的任何实例——比如类级别?
    【解决方案2】:

    OneFineDay 的答案更全面的方式打开“另存为”对话框(使用相同的方法)。
    这将使用指定的目录、文件名、扩展类型和窗口标题打开“另存为”对话框;它还会在覆盖任何现有文件之前进行提示。

    Dim dir as String = "C:\output\"
    Dim fName As String = "Book1"
    
    Using sfd As New SaveFileDialog
        sfd.InitialDirectory = dir
        sfd.Title = "Save As"
        sfd.OverwritePrompt = True
        sfd.FileName = fName
        sfd.DefaultExt = ".xlsx"
        sfd.Filter = "Excel Workbook(*.xlsx)|"
        sfd.AddExtension = True
        If sfd.ShowDialog() = DialogResult.OK Then
            xlsWorkBook.SaveAs(sfd.FileName)
        End If
    End Using
    

    【讨论】:

      【解决方案3】:

      在表单中添加一个 openfiledialog,然后...

        With OpenFileDialog1
              .Title = " whatever"
              .InitialDirectory = "c:\"
              .Multiselect = False
              If .ShowDialog() = DialogResult.OK Then
                  xlsWorkBook.SaveAs(.FileName)
              End If
      

      结束

      【讨论】:

        【解决方案4】:

        你可以用这个:

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim xlsWorkBook As Microsoft.Office.Interop.Excel.Workbook
            Dim xlsWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
            Dim xls As New Microsoft.Office.Interop.Excel.Application
        
            Dim resourcesFolder = IO.Path.GetFullPath(Application.StartupPath & "\Resources\")
            Dim fileName = "book1.xlsx"
        
            xlsWorkBook = xls.Workbooks.Open(resourcesFolder & fileName)
            xlsWorkSheet = xlsWorkBook.Sheets("a")
        
            xlsWorkSheet.Cells(1, 1) = TextBox1.Text
        
            xlsWorkBook.SaveAs("C:\output\book1.xlsx")
            xls.Application.DisplayAlerts = False
            xlsWorkBook.Close()
            xls.Quit()
        
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 2013-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-18
          • 1970-01-01
          相关资源
          最近更新 更多