使用EPPlus打开excel而不保存到文件

时间:2012-10-09 12:51:01

标签: c# excel automation epplus

Rright现在我正在使用excel打开     System.Diagnostics.Process.Start(的fileInfo);

将文件保存到文件后打开我的包。

是否可以打开excel而无需将文件保存到某个位置?我希望用户决定是否保存文件。

3 个答案:

答案 0 :(得分:2)

如果您使用EPPlus(或直接生成文件的任何其他库)自行生成文件,则需要先将其保存,然后才能在Excel中打开它。我建议只将其保存在临时目录中,然后将其显示给用户并让他们选择如何使用它。

如果使用Office Automation生成文件,则可以在保存之前将其显示给用户。

答案 1 :(得分:0)

我认为此答案将对新开发人员有所帮助。 我认为查看Excel而不保存的最佳选择是Microsoft.Office.Interop.Excel

打开Nuget软件包控制台Install-Package Microsoft.Office.Interop.Excel

在此处创建Excel文件是官方文档Excel

在填充Excel文件的最后,只需键入app.Visible = true;,应用程序就是对象名

答案 2 :(得分:0)

我知道这很晚,但是我遇到了同样的问题。

我曾经使用Microsoft.Office.Interop.Excel来将数据导出到xlsx文件而不保存它。最终用户可以很好地将其作为 Book1.xlsx 展示给最终用户,最终用户可以保存或关闭它而不需要保存。

我也已迁移到 EPPlus ,以提高导出速度,因此,如您所知,如果不先将打开的文件保存,则无法向最终用户展示打开的文件。

我使用 SaveFileDialog 组件采取的方法是提示用户在EPPlus文件之前输入 被建造。这样至少可以使最终用户标识文件的保存位置,而不是使用“硬编码”目录。

Private Sub btnExportXlsxEPPlus_Click(sender As Object, e As EventArgs) Handles btnExportXlsxEPPlus.Click

    Try
        Dim filInf As FileInfo = New FileInfo(GetFileToSave())

        Using excelPackage As ExcelPackage = New ExcelPackage
            excelPackage.Workbook.Properties.Author = "enLIGHTen"
            excelPackage.Workbook.Properties.Title = "enLIGHTen Report"
            excelPackage.Workbook.Properties.Subject = "enLIGHTen export data"
            excelPackage.Workbook.Properties.Created = Date.Now

            Dim worksheet As ExcelWorksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1")
            worksheet.Cells("A1").Value = "My EPPlus spreadsheet!"
            worksheet.Cells(1, 2).Value = "This is cell B1!"
            excelPackage.SaveAs(filInf)
        End Using

        Using excelPackage As ExcelPackage = New ExcelPackage(filInf)
            Dim firstWorksheet As ExcelWorksheet = excelPackage.Workbook.Worksheets(1)
            Dim namedWorksheet As ExcelWorksheet = excelPackage.Workbook.Worksheets("SomeWorksheet")
            Dim anotherWorksheet As ExcelWorksheet = excelPackage.Workbook.Worksheets.FirstOrDefault(Function(x) x.Name Is "SomeWorksheet")
            Dim valA1 As String = firstWorksheet.Cells("A1").Value.ToString
            Dim valB1 As String = firstWorksheet.Cells(1, 2).Value.ToString
            excelPackage.Save()
        End Using

        Dim proc As Process

        Try
            proc = New Process()
            Process.Start(filInf.FullName)
        Catch ex As Exception
            MsgBox("File cannot be opened", MsgBoxStyle.Information, "Cannot open file")
        End Try
    Catch

    End Try
End Sub

Public Function GetFileToSave()
    Dim strFilename As String = ""
    SaveFileDialog1.Filter = "Excel Workbook (*.xlsx)|*.xlsx"
    If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        strFilename = SaveFileDialog1.FileName
        Return strFilename
    End If
End Function