0

当工作表不存在时,我正在尝试使用以下代码处理异常:

int k = blYear.SelectedIndex;
ExcelWorksheet currentWorkSheet;

try
{
    currentWorkSheet = workbook.Worksheets[k + 1];
}
catch (Exception)
{
    MessageBox.Show("La hoja de trabajo no existe en el archivo de Excel", "Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
    btnCargarExcel.Enabled = true;
    blYear.Enabled = true;
    filePath.Text = "";
}

但我收到了这个错误:

  • 如果我尝试编译出现此错误

    错误 1 ​​使用未分配的局部变量 'currentWorkSheet' d:\Work\ClanMovil\CMApp\WindowsFormsApplication1\WindowsFormsApplication1\ExcelDBUserControl.cs 71 46 CMApp

  • 如果我忽略错误并继续构建,那么我会得到另一个

--------------------------------------- Microsoft Visual Studio -------------------- ------- 源文件:D:\Work\ClanMovil\CMApp\WindowsFormsApplication1\WindowsFormsApplication1\ExcelDBUserControl.cs

模块:d:\Work\ClanMovil\CMApp\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\CMApp.exe

进程:[4944] CMApp.vshost.exe

源文件与构建模块时不同。您是否希望调试器仍然使用它?是 否

System.Collections.Generic.KeyNotFoundException 未处理
HResult=-2146232969 Message=给定的键不在字典中。Source=mscorlib StackTrace:在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at OfficeOpenXml.ExcelWorksheets.get_Item(Int32 PositionID) at WindowsFormsApplication1.ExcelDBUserControl.btnCargarExcel_Click(Object sender, EventArgs e) in d:\Work\ ClanMovil\CMApp\WindowsFormsApplication1\WindowsFormsApplication1\ExcelDBUserControl.cs:第 66 行在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button .OnMouseUp(MouseEventArgs 事件) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.

处理这个的正确方法是什么?

编辑第一个错误 好的,看到关于未声明的 var 的错误我对我的代码进行了一些修改,现在是这样的:

using (var package = new ExcelPackage(existingFile))
{
    ExcelWorkbook workbook = package.Workbook;
    ExcelWorksheet currentWorkSheet = workbook.Worksheets.First();

    if (workbook != null)
    {
        if (workbook.Worksheets.Count > 0)
        {

            int k = blYear.SelectedIndex;

            try
            {
                currentWorkSheet = workbook.Worksheets[k + 1];
            }
            catch (Exception)
            {
                MessageBox.Show("La hoja de trabajo no existe en el archivo de Excel", "Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnCargarExcel.Enabled = true;
                blYear.Enabled = true;
                filePath.Text = "";
            }

        }
    }
}

但这有一个问题,即使启动了异常,也因此加载了第一个工作表ExcelWorksheet currentWorkSheet = workbook.Worksheets.First();,这不是我想要实现的。如果我将 var 定义为ExcelWorksheet currentWorkSheet;并在第一个条件内设置值,则会出现相同的错误:

错误 1 ​​使用未分配的局部变量 'currentWorkSheet' d:\Work\ClanMovil\CMApp\WindowsFormsApplication1\WindowsFormsApplication1\ExcelDBUserControl.cs 71 46 CMApp

出现所以我不知道如何处理这个,我被困在这里

4

1 回答 1

1

您更新的代码要好得多。本质上,您需要根据业务逻辑/UI 行为来决定在没有当前工作表时想要发生的事情。您可以在异常处理程序中(或在尝试之前)设置 currentWorksheet = null ,然后在 catch 之外添加额外的逻辑来执行...如果 currentWorksheet 为空,您可以执行任何操作。或者只是在 catch 中放置一个 return 语句,这样下面的代码都不会被执行。由你决定。

于 2013-05-05T21:13:33.670 回答