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

rqqzpn5f  于 2023-01-18  发布在  其他
关注(0)|答案(7)|浏览(210)

我尝试使用EPPLUS 4.0.3打开一个XLSX文件作为模板(我甚至使用了一个空白XLSX文件)。
如果我不打开模板文件(空白或真实的的),而只是创建一个新工作簿并创建一个工作表,它就可以正常工作。或者,如果我打开模板文件并创建一个新工作表,它就可以正常工作。只有当我尝试访问模板中的FIRST工作表时,我才得到错误:工作表位置超出范围。
访问第一个工作表,如下所示:workBook.Worksheets.First()不工作。
第一不再是一个定义。
因此,我尝试按名称访问第一个工作表,并使用0和1通过workBook.Worksheets[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文件的第一个工作表?

vshtjzan

vshtjzan1#

我能够通过按名称而不是索引引用工作表来绕过这个问题。

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

2skhul332#

要获得第一张表,请使用以下代码

var xlWorkbook = new ExcelPackage(new FileInfo(@"C:\ESD\EXCELDATAREADTEST.xlsx"));

ExcelWorksheet workSheet = xlWorkbook.Workbook.Worksheets[1];

请确保指向工作簿的正确位置

llew8vvj

llew8vvj3#

我刚刚遇到了同样的问题,麻烦的是EPPlus会在带有命名范围的电子表格上窒息。
下面是我所做的(使用LibreOffice Calc),以使阅读电子表格:
1.创建电子表格的副本
1.在LibreOffice中打开
1.列表项
1.单击左上角的下拉框定义范围。通常显示为"A1"
1.选择"管理姓名"
1.突出显示整个列表
1.点击"删除"
完成这些步骤后,我保存/关闭了电子表格,并能够用EPPlus打开它。

zzwlnbp8

zzwlnbp84#

我以前

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

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

gc0ot86w

gc0ot86w5#

您可以从零开始索引,它将工作。
Excel工作表ws =工作簿.工作表[0];

pbgvytdp

pbgvytdp6#

解决方案:这是因为您没有提供正确的excel文件路径,您已经调用或放置在**_ExcelTemplateFilePath参数中。要么你已经把你的文件在错误的目录和你正在调用从你想要的路径,但不幸的是没有。
1.如果您已将Excel文件放置在项目或解决方案的当前目录中,请参见示例(注:Vs studio的当前目录将始终为
\bin\debug.netcoreapp**public static FileInfo getfile = new FileInfo(Directory.GetCurrentDirectory()+ @"\Login_Credentials. xlsx”);
1.如果您excel文件路径是静态且硬编码为e-g(@“F:\task1\TestTask\abc.xlsx”),则您的路径也必须以给定格式正确,然后您的文件才可访问。

fsi0uk1n

fsi0uk1n7#

问题是文件类型不完全是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

相关问题