工作表位置超出范围.连接已关闭.使用 EPPLUS 时



我正在尝试使用 EPPLUS 4.0.3 打开一个 XLSX 文件作为模板(我什至使用了一个空白的 XLSX 文件)。

如果我不打开模板文件(空白或真实文件)而只是创建一个新工作簿并创建一个工作表,它工作正常。或者,如果我打开模板文件,并创建一个新工作表,那么它可以正常工作。只有当我尝试访问模板中的第一张工作表时,我才收到错误:工作表位置超出范围。

像这样访问第一个工作表:workBook.Worksheets.First()不起作用。

首先不再是一个定义。

所以我尝试按名称访问第一个工作表,通过这种方法workBook.Worksheets[1]同时使用 0 和 1 来尝试获取第一张工作表。

我的代码:

    var existingTemplate = new FileInfo(_ExcelTemplateFilePath);
    using (ExcelPackage p = new ExcelPackage(existingTemplate)) {
    // Get the work book in the file
    ExcelWorkbook workBook = p.Workbook;
    ExcelWorksheet ws = workBook.Worksheets[1];
    // MY OTHER EXCEL CELL CODE HERE    
}}

有谁知道如何访问第一张和Excel文件?

我能够通过按名称而不是索引引用工作表来解决此问题。

var oSheet = package.Workbook.Worksheets["My Worksheet Name"];

要获取第一张工作表,只需使用以下代码

    var xlWorkbook = new ExcelPackage(new FileInfo(@"C:ESDEXCELDATAREADTEST.xlsx"));
ExcelWorksheet workSheet = xlWorkbook.Workbook.Worksheets[1];

只需确保您指向工作簿的正确位置

我刚刚遇到了同样的问题,问题是 EPPlus 在具有命名范围的电子表格上窒息。

以下是我所做的(使用 LibreOffice Calc)来读取电子表格:

  1. 创建电子表格的副本
  2. 在 LibreOffice 中打开
  3. 列表项
  4. 单击左上角的 drodpwon 以定义范围。通常为"A1"
  5. 选择"管理名称"
  6. 突出显示整个列表
  7. 点击"删除"

完成这些步骤后,我保存/关闭了电子表格,并能够使用 EPPlus 打开它。

我用过

var currentSheet = package.Workbook.Worksheets;
var workSheet = currentSheet.First();

这是因为工作表可能没有已知名称,现在您对第一张工作表感兴趣

你可以用零开始索引,它会起作用。

ExcelWorksheet ws = workBook.Worksheets[0];

解决方案 : 这是因为您没有提供已调用或放置在_ExcelTemplateFilePath参数中的正确 excel 文件路径。原因 :要么您将文件放在错误的目录中,并且您正在从您想要的路径调用,但不幸的是没有。

  1. 请看示例,如果您已将 excel 文件放入项目或解决方案的当前目录(注意:当前目录之VS studio 将始终是 \bin\debug.netcoreapp public static文件信息获取文件 = 新FileInfo(Directory.GetCurrentDirectory() +@"\Login_Credentials.xlsx");
  2. 如果您的 Excel 文件路径是静态的并且硬编码为 e-g (@"F:\task1 \TestTask\abc.xlsx"),那么您的路径也必须在给定格式中正确,然后您的文件将可以访问。

问题是文件类型并不完全是EPPLUS想要的。它打开 xlsx,看到工作簿,但看不到工作表。解决方案是保存为所需的格式。

  Dim fiOriginal As System.IO.FileInfo
    Dim fiTemp As System.IO.FileInfo
    Dim strOriginalName As String
    Dim strTempName As String
Rem Get a temp name 
    strTempName = IO.Path.GetTempFileName()
    strTempName = strTempName & ".xlsx"
Rem Have EPPLUS save the original as a temp in its format
    fiOriginal = New System.IO.FileInfo(strOriginalName)
    Using pckSrc As New ExcelPackage(fiOriginal)
        pckSrc.SaveAs(fiTemp)
    End Using
    
Rem Process the temp or replace the original and see EPPLUS happy.
    fiOriginal = New System.IO.FileInfo(strTempName)
    Using pckSrc As New ExcelPackage(fiOriginal)
        Dim wBookSrc As ExcelWorkbook = pckSrc.Workbook
        Dim wkShtSrc As ExcelWorksheet = wBookSrc.Worksheets(0)
    
    End Using

相关内容

  • 没有找到相关文章

最新更新