【发布时间】:2020-10-16 09:01:59
【问题描述】:
我的项目是打开 excel 文件并在 C# 中逐行读取,但我的 excel 参考文件存在一些空行
例如第一行和第二行不是空的(没有单元格),但第三、第四和第五行的所有单元格都是
空然后下一行的单元格不为空等。现在当我的代码在 for just Reads 中运行时
只有文件的前几行是满的,一旦到达第一行完全是空的
退出循环 读取文件还没有结束。为什么会出现这种情况?如何解决?
private void button1_Click(object sender, EventArgs e)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;
string str;
string table = null;
int rCnt;
int cCnt;
int rw = 0;
int cl = 0;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(@"C:\Users\mostafaheydarsana\Desktop\mp.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
rw = range.Rows.Count;
cl = range.Columns.Count;
string s = "'nbn";
string table_row = null;
int io = 0;
string new_str = null;
string question_field = null;
int peymaeshrowaforaddquestioha;
try
{
StreamWriter sw = new StreamWriter("C:\\Users\\user1\\Desktop\\Test.txt");
for (rCnt = 1; rCnt <= rw; rCnt++)
{
if (range.Cells[rCnt, 1].Value != null)
{
sw.WriteLine("question is ( " + question_field + s[0] + "," + new_str + "');", io++);
MessageBox.Show("rCnt is " + rCnt + "quesstion_field is insert in file ***" + question_field + "***");
question_field = null;
new_str = null;
new_str += s[0] + range.Cells[rCnt, 1].Value2.ToString() + s[0] + "," + s[0] + range.Cells[rCnt, 2].Value2.ToString() + s[0] + "," + s[0] + range.Cells[rCnt, 3].Value2.ToString() + s[0];
question_field += range.Cells[rCnt, 4].Value2.ToString();
}
else if(range.Cells[rCnt, 1].Value == null)
{
question_field += range.Cells[rCnt, 4].Value2.ToString();
MessageBox.Show("rCnt is " + rCnt + "quesstion_field is ***" + question_field + "***");
peymaeshrowaforaddquestioha = rCnt + 1;
}
}
sw.Close();
}
catch (Exception ec)
{
Console.WriteLine("Exception: " + ec.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
xlWorkBook.Close(true, null, null);
xlApp.Quit();
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlApp);
}
【问题讨论】:
-
好吧,如果一行完全是“空的”,那么当你到达 if 语句时……
if (range.Cells[rCnt, 1].Value != null)…那么这将是false,因为该行上的所有单元格都是空的。因此,else部分将执行……else if(range.Cells[rCnt, 1].Value == null)……这将是true并执行下一行代码……question_field += range.Cells[rCnt, 4].Value2.ToString();……这将抛出一个null异常,因为range.Cells[rCnt, 4].Value2将是null.是您在catch部分没有看到此异常的输出? -
@mostafa,你的问题解决了吗?请检查我的答案是否适合您。
标签: c# excel visual-studio office-interop