비어있는 EXCEL 셀을 읽으려고하면 System.com_object 오류가 발생합니다. 내 코드 :C# .net에서 EXCEL interop api를 사용하여 빈 셀 값을 읽는 방법?
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 개 있으며 올바른 셀을 읽고 있다고 가정합니다. 이 오류는 "
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
at CallSite.Target(Closure , CallSite , Object)
는"** 나는 그것의 COM 이후 어떤 단서가없는 **입니다. 도움을 많이 주시면 감사하겠습니다.
당신이 지금까지이 문자열을 변환 할 수 null의 경우는 실패하지 않기 때문에, 다른 검사
를 추가하거나 다음 코드를 사용하여 문자열로 변환 : mWSheet1.Cells [ z, y + 3] .Value2.ToString(); 그것을 시도하는 것보다! – Sylca
빈 셀에 아무것도하지 않으면 위와 같은 오류가 발생합니다. – Sulekha