【问题标题】:save excel using EPPlus使用 EPPlus 保存 Excel
【发布时间】:2013-07-26 04:44:23
【问题描述】:

有人可以帮我解决这个错误吗? 我尝试使用 EPPlus 保存 excel 文件

[IOException: The process cannot access the file 'C:\Users\Julian\Downloads\EmployeeMaster.xls' because it is being used by another process.]

这是我的代码:

Dim conn As New ConnectionVB
Dim newfile As FileInfo = NewFileInfo("C:\\Users\\Julian\\Downloads\\EmployeeMaster.xls")
Using p As ExcelPackage = New ExcelPackage(newfile)
   SetWorkBookProperties(p)
   conn.connect()

   Dim ws As ExcelWorksheet = CreateSheet(p, "EmnployeeMaster")
   Dim dt As New DataTable
   Dim connString As String
   connString = "Select * from EmployeeMaster"
   dt = conn.openDataTable(connString)

   Dim rowIndex As Integer
   rowIndex = 2

   CreateHeader(ws, rowIndex, dt)
   CreateData(ws, rowIndex, dt)

   Dim bin As Byte()
   bin = p.GetAsByteArray()
   Dim path As String
   path = "C:\\Users\\Julian\\Downloads\\EmployeeMaster.xls"
   File.Delete("C:\\Users\\Julian\\Downloads\\EmployeeMaster.xls")

   Dim stream As Stream = File.Create(path)
   File.WriteAllBytes(path, bin) <- I got the error here
   Start(path)
   stream.Close()
End Using

感谢所有有关此错误的帮助/建议

问候谢赫

【问题讨论】:

  • 我不得不提两个潜在的问题: 1. 据我所知,EPPLUS 无法打开 xls 文件,只能打开 xlsx 文件。 2. 您在运行程序时是否在 Excel 中打开了文件?如果是这样,EPPLUS 将失败。必须关闭文件才能由 EPPlus+ 3 打开。另一点:您在 using 部分使用相同的路径多次 - 这肯定会失败。我很惊讶 File.Delete 调用没有引发错误
  • 最后一点:您的代码看起来......对我来说是乱码。您没有正确使用 EPPLus - 第一部分完全没问题,但是“in = p.GetAsByteArray()”之后的部分的目的是什么?如果要将数据表存储到工作表中,请使用 Epplus .fromDataTable 方法

标签: asp.net vb.net visual-studio-2010 epplus


【解决方案1】:

从您的错误中可以看出:EmployeeMaster.xls 文件正被另一个进程使用。

您的代码 DryRun:

在您的 EmployeeMaster.xls 文件中,您创建另一个新工作表名称为 EmnployeeMaster,然后在此工作表中创建表头和数据。 写入文件时出现问题。你必须通过这样做来保存 WorkSheet。 因为只需在 EPPlusPackage 的帮助下打开您的 .xls 文件,然后通过代码将您的自定义工作表添加到 .xls 文件中并保存即可。

p.Save(); // you need to save this temporary sheet.

问题可能是:

  • EPPLUS 无法打开 xls 文件,只能打开 xlsx 文件。
  • 为什么要删除文件。 解决方法:你可以重命名然后移动。

  • 当您为 ExcelPackage 实例化对象时,EPPlus 会保存您的文件(路径相同)

【讨论】:

    【解决方案2】:

    两个问题:

    • EPPlus 不支持 xls 文件。
    • 为了调试为什么使用文件,我推荐使用SysInternal的“进程资源管理器”,你可以找到它here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多