阅读Excel工作表时如何不跳过空行?

时间:2014-10-15 23:33:56

标签: c# excel

我正在使用Microsoft.Office.Interop.Excel来读取Excel文件。

我遇到的问题是,在读取时,它将第一行包含信息作为第1行。因此,如果要获取信息的第一行是第3行,则将其计为第一行。这是一个问题,因为Excel工作表有时会有前两行的数据,有时他们不会。但我需要阅读的数据总是从第三行开始。

这是我用来阅读表格的例程:

Microsoft.Office.Interop.Excel.Application exl = new Microsoft.Office.Interop.Excel.Application();
        Workbooks wkbs = exl.Workbooks;
        Microsoft.Office.Interop.Excel.Workbook wkb = null;
        Sheets shts;
        Microsoft.Office.Interop.Excel.Worksheet wks = null;

        // load work book
        //wkb = wkbs.Open(races_data_path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);//oMissing
        wkb = wkbs.Open(races_data_path, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);//oMissing

        shts = wkb.Sheets;
        wks = (Microsoft.Office.Interop.Excel.Worksheet)shts.get_Item(Properties.Settings.Default.excel_worksheet);

        // read lines from worksheet
        Microsoft.Office.Interop.Excel.Range range = wks.UsedRange;

        for (int rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            try
            {
                object[,] values = (object[,])range.Value2;

                if (Convert.ToString(values[rCnt, 4]) != "")
                {
                    //Console.WriteLine(String.Format("Ldd: {0} {1} {2}", Convert.ToInt16(values[rCnt, 2]), Convert.ToInt16(values[rCnt, 3]), Convert.ToString(values[rCnt, 4])));
                    if (races[Convert.ToInt16(values[rCnt, 1])] == null) races[Convert.ToInt16(values[rCnt, 1])] = new RaceObject();

                    races[Convert.ToInt16(values[rCnt, 1])].add_racer(Convert.ToInt16(values[rCnt, 2]), Convert.ToInt16(values[rCnt, 3]), Convert.ToString(values[rCnt, 4]), Convert.ToString(values[rCnt, 7]));
                }

            }
            catch (Exception ex)
            {
                data_loaded = false;
                rCnt = range.Rows.Count;
            }

        }

此示例中,您可以看到循环计数从&#39; 1&#39;开始。这是用于读取纸张的前两行是空的纸张。如果前两行有数据,则此循环仅在我将计数开始更改为&#39; 3&#39;时才有效。

例如: 如果工作表如下所示,起始值= 1:

no data
no data
has data
has data
has data

如果工作表如下所示,起始值= 3:

has unnecessary data
has unnecessary data
has data
has data
has data

1 个答案:

答案 0 :(得分:0)

选项1:在完成其余操作之前立即向第一个单元格添加内容:wks.cells(1,1).value =“'”&amp; wks.cells(1,1).value这会将usedRange扩展到第一个单元格。

然后数据将始终在第三行开始,您可以轻松地总是跳过前两行。

选项2:您还可以使用wks.UsedRange.Cells(1, 1).Row查看第一行是1还是3.然后您可以调整是否使用这些行。

(根据评论编辑的帖子)