我正在使用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
答案 0 :(得分:0)
选项1:在完成其余操作之前立即向第一个单元格添加内容:wks.cells(1,1).value =“'”&amp; wks.cells(1,1).value这会将usedRange扩展到第一个单元格。
然后数据将始终在第三行开始,您可以轻松地总是跳过前两行。
选项2:您还可以使用wks.UsedRange.Cells(1, 1).Row
查看第一行是1还是3.然后您可以调整是否使用这些行。
(根据评论编辑的帖子)