我正在尝试使用 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)来读取电子表格:
- 创建电子表格的副本
- 在 LibreOffice 中打开
- 列表项
- 单击左上角的 drodpwon 以定义范围。通常为"A1"
- 选择"管理名称"
- 突出显示整个列表
- 点击"删除"
完成这些步骤后,我保存/关闭了电子表格,并能够使用 EPPlus 打开它。
我用过
var currentSheet = package.Workbook.Worksheets;
var workSheet = currentSheet.First();
这是因为工作表可能没有已知名称,现在您对第一张工作表感兴趣
你可以用零开始索引,它会起作用。
ExcelWorksheet ws = workBook.Worksheets[0];
解决方案 : 这是因为您没有提供已调用或放置在_ExcelTemplateFilePath参数中的正确 excel 文件路径。原因 :要么您将文件放在错误的目录中,并且您正在从您想要的路径调用,但不幸的是没有。
- 请看示例,如果您已将 excel 文件放入项目或解决方案的当前目录(注意:当前目录之VS studio 将始终是 \bin\debug.netcoreapp public static文件信息获取文件 = 新FileInfo(Directory.GetCurrentDirectory() +@"\Login_Credentials.xlsx");
- 如果您的 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