如果我试图读取空的EXCEL单元格,则会收到System.com_object错误。我的代码是:
public static List<OrderPC> getFilters(string fileCheckout)
{
List<OrderPC> orderPCs = new List<OrderPC>();
XLDoc sldoc = new XLDoc();
string localPath = @"C:\Temp\PCs.xlsx";
Microsoft.Office.Interop.Excel.Application oXL=null;
Microsoft.Office.Interop.Excel.Workbook mWorkBook=null;
Microsoft.Office.Interop.Excel.Worksheet mWSheet1=null;
Microsoft.Office.Interop.Excel.Range xlRange=null;
try
{
oXL = new Microsoft.Office.Interop.Excel.Application();
mWorkBook = oXL.Workbooks.Open(localPath);
mWSheet1 = mWorkBook.Sheets[1];
xlRange = mWSheet1.UsedRange;
foreach (Microsoft.Office.Interop.Excel.Hyperlink hl in xlRange.Hyperlinks)
{
int y = hl.Range.Column;
int z = hl.Range.Row;
string vFilter = mWSheet1.Cells[z, y + 1].Value2.Trim();
if (vFilter.CompareTo("Weekly") == 0)
{
String baseUri = "http://xxx.yyy.net?";
int followUpIndex = baseUri.Length;
OrderPC orderPc = new OrderPC();
orderPc.ProductClass = hl.TextToDisplay.Trim();
orderPc.HyperLink = hl.Address.Trim().Substring(followUpIndex);
orderPc.SpecType = mWSheet1.Cells[z, y - 1].Value2.Trim();
if (mWSheet1.Rows[z].Cells[y + 3] != null || mWSheet1.Rows[z].Cells[y + 3].Value2 != string.Empty)
{
orderPc.ManufactureDate = mWSheet1.Cells[z, y + 3].Value2.ToString(); //Here is the error**
}
//Console.WriteLine(orderPc.ProductClass+"----"+orderPc.HyperLink);
orderPCs.Add(orderPc);
}
}
}
catch (Exception ex)
{
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(xlRange);
Marshal.FinalReleaseComObject(mWSheet1);
mWorkBook.Close(Type.Missing, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(mWorkBook);
oXL.Quit();
Marshal.FinalReleaseComObject(oXL);
}
return orderPCs;
}
这个excel文件有10列,我想我正在读取一个有效的单元格。错误是**“
{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
"**我没有任何线索,因为它的COM。帮助是非常感谢。
发布于 2012-11-15 15:56:13
添加另一个检查
if (mWSheet1.Cells[z, y + 3].Value2 != null)
或者使用以下代码转换为字符串,因为如果Value2为空,则不会失败
orderPc.ManufactureDate = Convert.ToString(mWSheet1.Cells[z, y + 3].Value2);
发布于 2021-03-16 04:55:08
如果单元格不为空或不为string.empty,则检查单元格。您的单元格很可能不为空或不为string.emtpy。
您需要使用&&而不是||,因为如果您的单元格既不为空也不为string.empty,则只需要true
https://stackoverflow.com/questions/13396073
复制相似问题