使用EPPus从Excel文件读取值导致“行超出范围”错误

时间:2013-04-26 19:14:25

标签: c# .net epplus

我正在使用 EPPlus库并编写此代码(仅用于测试)

    private void btnCargarExcel_Click(object sender, EventArgs e)
    {
        if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (System.IO.File.Exists(openFileDialog1.FileName))
            {
                Stopwatch stopWatch = new Stopwatch();
                stopWatch.Start();
                Thread.Sleep(10000);

                filePath.Text = openFileDialog1.FileName.ToString();

                var existingFile = new FileInfo(openFileDialog1.FileName.ToString());

                using (var package = new ExcelPackage(existingFile))
                {
                    ExcelWorkbook workbook = package.Workbook;
                    if (workbook != null)
                    {
                        if (workbook.Worksheets.Count > 0)
                        {
                            ExcelWorksheet currentWorkSheet = workbook.Worksheets.First();
                            textBox3.Text = currentWorkSheet.Cells[0, 1].Value.ToString();
                        }                            
                    }
                }

                stopWatch.Stop();

                TimeSpan ts = stopWatch.Elapsed;
                executiontime.Text =
                    String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,
                                  ts.Milliseconds / 10).ToString();
            }
            else
            {
                MessageBox.Show("No se pudo abrir el fichero!");
                System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel);
                appExcel = null;
                System.Windows.Forms.Application.Exit();
            }
        }
    }

测试我的代码是否正常工作我添加了这一行textBox3.Text = currentWorkSheet.Cells[0, 1].Value.ToString();(我从here得到了想法)但是当我执行应用程序时出现此错误:

  

超出范围

为什么?我错过了什么或者我做错了什么?这是错误的堆栈跟踪:

System.ArgumentException was unhandled   HResult=-2147024809   Message=Row out of range   Source=EPPlus   StackTrace:
       at OfficeOpenXml.ExcelRange.ValidateRowCol(Int32 Row, Int32 Col)
       at OfficeOpenXml.ExcelRange.get_Item(Int32 Row, Int32 Col)
       at WindowsFormsApplication1.ExcelDBUserControl.btnCargarExcel_Click(Object sender, EventArgs e) in d:\Private\Dropbox\Work\ClanMovil21Comunicaciones\Apps\WindowsFormsApplication1\WindowsFormsApplication1\ExcelDBUserControl.cs:line 74
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at WindowsFormsApplication1.Program.Main() in d:\Private\Dropbox\Work\ClanMovil21Comunicaciones\Apps\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:line 20
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()   InnerException:

另外(并且不知道是否最好为此打开一个新问题)并且与此相同的主题相关,我如何获取每个工作表的名称(文本),然后构建选项按钮尽可能多的工作表在我的工作簿中?

1 个答案:

答案 0 :(得分:24)

Excel工作表中的第一个单元格是[1,1]。 currentWorkSheet.Cells [0,1]可能是此异常的原因,单元格[0,1]超出范围