C# Excel 查找函数异常
C# Excel Find Function Exception
我正在尝试创建一个 C# 应用程序,它使用 Microsoft.Office.Interop.Excel
访问 Excel 工作表
我能够成功加载工作表并读取数据,但是,当我使用查找函数时,出现异常
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(sheetName);
Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
Excel.Range colRange = xlWorksheet.Columns["A"];
Excel.Range resultRange = colRange.Find(row[2].ToString(), null, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, false, Type.Missing);
(我确定 row[2] 已初始化并成功使用 ToString())
异常看起来像:
Exception thrown: 'System.Runtime.InteropServices.COMException' in mscorlib.dll
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Range.Find(Object What, Object After, Object LookIn, Object LookAt, Object SearchOrder, XlSearchDirection SearchDirection, Object MatchCase, Object MatchByte, Object SearchFormat)
at ServiceBOMVATool.MainWindow.EnterModel_Click(Object sender, RoutedEventArgs e) in C:\Users\ta4935\source\repos\ServiceBOMVATool\ServiceBOMVATool\MainWindow.xaml.cs:line 445
有人知道可能出了什么问题吗?预先感谢您的帮助。
您将 null
作为第二个参数传递(对于参数 After
)。但是 null
在这里不是有效值。如果您不想传递此参数,请像您对最后一个参数所做的那样使用 Type.Missing
:
Excel.Range resultRange = colRange.Find(
row[2].ToString(),
Type.Missing, // Null is not allowed here
Excel.XlFindLookIn.xlValues,
Excel.XlLookAt.xlPart,
Excel.XlSearchOrder.xlByRows,
Excel.XlSearchDirection.xlNext,
false,
false,
Type.Missing);
或者,只需按名称指定要使用的参数。这将自动为所有未指定的参数使用 Type.Missing
。
// Specifiy parameters by name to leave out some
Excel.Range resultRange = colRange.Find(
What: row[2].ToString(),
LookIn: Excel.XlFindLookIn.xlValues,
LookAt: Excel.XlLookAt.xlPart,
SearchOrder: Excel.XlSearchOrder.xlByRows,
SearchDirection: Excel.XlSearchDirection.xlNext,
MatchCase: false,
MatchByte: false);
我正在尝试创建一个 C# 应用程序,它使用 Microsoft.Office.Interop.Excel
访问 Excel 工作表我能够成功加载工作表并读取数据,但是,当我使用查找函数时,出现异常
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(sheetName);
Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
Excel.Range colRange = xlWorksheet.Columns["A"];
Excel.Range resultRange = colRange.Find(row[2].ToString(), null, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, false, Type.Missing);
(我确定 row[2] 已初始化并成功使用 ToString())
异常看起来像:
Exception thrown: 'System.Runtime.InteropServices.COMException' in mscorlib.dll
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Range.Find(Object What, Object After, Object LookIn, Object LookAt, Object SearchOrder, XlSearchDirection SearchDirection, Object MatchCase, Object MatchByte, Object SearchFormat)
at ServiceBOMVATool.MainWindow.EnterModel_Click(Object sender, RoutedEventArgs e) in C:\Users\ta4935\source\repos\ServiceBOMVATool\ServiceBOMVATool\MainWindow.xaml.cs:line 445
有人知道可能出了什么问题吗?预先感谢您的帮助。
您将 null
作为第二个参数传递(对于参数 After
)。但是 null
在这里不是有效值。如果您不想传递此参数,请像您对最后一个参数所做的那样使用 Type.Missing
:
Excel.Range resultRange = colRange.Find(
row[2].ToString(),
Type.Missing, // Null is not allowed here
Excel.XlFindLookIn.xlValues,
Excel.XlLookAt.xlPart,
Excel.XlSearchOrder.xlByRows,
Excel.XlSearchDirection.xlNext,
false,
false,
Type.Missing);
或者,只需按名称指定要使用的参数。这将自动为所有未指定的参数使用 Type.Missing
。
// Specifiy parameters by name to leave out some
Excel.Range resultRange = colRange.Find(
What: row[2].ToString(),
LookIn: Excel.XlFindLookIn.xlValues,
LookAt: Excel.XlLookAt.xlPart,
SearchOrder: Excel.XlSearchOrder.xlByRows,
SearchDirection: Excel.XlSearchDirection.xlNext,
MatchCase: false,
MatchByte: false);