我能够正确打开并读取excel文件,但输出不会停止。当有空单元格时它会继续运行。如果程序到达没有数据的单元格,如何使程序停止?
我已经阅读了其他帖子并尝试了this帖子,因为解决方案有点类似。代码有什么问题?
感谢您的帮助
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
{
private static int colCount;
private static int rowCount;
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Users\msehgal\Desktop\AR Aging Oct2016.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
int rowCount = xlWorksheet.Rows.Count;
int colCount = xlWorksheet.Columns.Count;
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
//new line
if (j == 1)
{
Console.Write("\r\n");
}
//write the value to the console
if (xlWorksheet.Cells[i, j].Value2 != null)
{
Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");
}
}
}
//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
xlWorkbook.Close();
Marshal.ReleaseComObject(xlWorkbook);
//quit and release
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
}
} }
答案 0 :(得分:0)
这很有用。我从this s.o帖子中得到了它。如果有人可以解释System.Reflection.Missing.Value
,那将非常有帮助。
// Find the last real row
lastUsedRow = worksheet.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;
// Find the last real column
lastUsedColumn = worksheet.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;