我正在使用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;
}
}
在此示例中,您可以看到循环计数从“ 1”开始。这是为了读取工作表的前两行为空的工作表。如果前两行有数据,则仅当我将计数起始位置更改为“ 3”时,此循环才有效。
例如:如果工作表看起来像这样,则起始值= 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:在进行其余操作之前,立即在第一个单元格中添加一些内容:wks.cells(1,1).value =“'”&wks.cells(1,1).value这将把usedRange扩展到第一个单元格。
然后,数据将始终从第三行开始,您可以轻松地始终跳过前两行。
选项2:您还可以wks.UsedRange.Cells(1, 1).Row
用来查看第一行是1还是3。然后您可以调整是否使用这些行。
(根据评论编辑帖子)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句