循环遍历excel / csv表格中的每个单元格

这个问题和我上一篇文章( 链接 )有关。 我想通过每个单元格,以便我可以清理我的非ASCII值的函数(函数ReturnCleanASCII)正在使用这个。 但是,当我通过单元格时,我得到一个空值。

foreach (Excel.Range range in xlRange.Cells){ Console.WriteLine(range.Value2.ToString()); } 

我正在使用上面的代码来通过每个单元格。 这是通过每个细胞不正确的方式吗?

 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using Excel = Microsoft.Office.Interop.Excel; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Users\username\Desktop\Error Records.csv"); Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1]; Excel.Range xlRange = xlWorksheet.UsedRange; int lastUsedRow = xlWorksheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value).Row; int lastUsedColumn = xlWorksheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value).Column; int lastColumnCount = lastUsedColumn; for (int i = 1; i <= lastUsedColumn; i++) { for (int j = 1; j <= lastUsedRow; j++) { xlWorksheet.Cells[j, (lastColumnCount + 1)] = "Testing data 134"; } } foreach (Excel.Range range in xlRange.Cells) { Console.WriteLine(range.Value2.ToString()); } xlWorksheet.Cells[1, (lastUsedColumn + 1)] = "Title"; xlWorkbook.Save(); //cleanup GC.Collect(); GC.WaitForPendingFinalizers(); //rule of thumb for releasing com objects: // never use two dots, all COM objects must be referenced and released individually // ex: [somthing].[something].[something] is bad //release com objects to fully kill excel process from running in the background Marshal.ReleaseComObject(xlRange); Marshal.ReleaseComObject(xlWorksheet); //close and release var data = ReturnCleanASCII(xlWorksheet.ToString()); xlWorkbook.SaveAs("C:\\Users\\username\\Desktop\\Errors_four.csv".Trim(), Excel.XlFileFormat.xlCSV); xlWorkbook.Close(); Marshal.ReleaseComObject(xlWorkbook); //quit and release xlApp.Quit(); Marshal.ReleaseComObject(xlApp); } public static string ReturnCleanASCII(string s) { StringBuilder sb = new StringBuilder(s.Length); foreach (char c in s.ToCharArray()) { if ((int)c > 127) // you probably don't want 127 either continue; if ((int)c < 32) // I bet you don't want control characters continue; if (c == ',') continue; if (c == '"') continue; sb.Append(c); } return sb.ToString(); } } } 

错误:

无法对空引用执行运行时绑定

堆栈跟踪:

  at CallSite.Target(Closure , CallSite , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) at CallSite.Target(Closure , CallSite , Object ) at ConsoleApplication1.Program.Main(String[] args) in C:\Users\username\documents\visual studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 44 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() 

使用Convert.ToString(range.Value2)而不是range.Value2.ToString()

请参阅: 无法在空引用上执行运行时绑定 – 清空Excel单元格