0

我正在编写一个从 Excel 工作表读取的 C# 应用程序。它读取整张纸,但是我有兴趣只读取一行中的特定单元格并移动到下一行并再次读取该行中的特定单元格。未读取或省略的单元格对于 excel 中的所有行都是相同的。下面是我阅读excel的示例代码:

private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:/test.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;

            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;
            for(int i=1; i <= rowCount; i++)
                {
                    for(int j=1; j<=colCount; j++)
                        {
                             MessageBox.Show(xlRange.Cells[i,j].Value2.ToString());
                        }
                }
        }
4

1 回答 1

0

您可以使用 OleDB 而不是 Excel.Interop。您的问题只需要读取单元格值,因此更容易将您的 excel 文件视为数据表本身......

string fileName = @"C:\test.xlsx"; 
string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
                          "Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0'", fileName); 
using(OleDbConnection cn = new OleDbConnection(connectionString))
{
   cn.Open();
   OleDbCommand cmd = new OleDbCommand("SELECT Column1, Column2, Column3 From [Sheet1$]", cn);
   OleDbDataReader rd = cmd.ExecuteReader();
   while(rd.Read())
   {
        Console.WriteLine("Loop");
        Console.WriteLine(rd.GetString(0));
        Console.WriteLine(rd.GetString(1));
        Console.WriteLine(rd.GetString(2));
        Console.WriteLine();
    }
}

几点注意事项:

我正在使用 ACE.OleDB,因为您的文件具有 XLSX 扩展名
我假设您的文件在名为 Column1 的第一行中有列标题。ETC....

于 2012-08-13T14:42:11.160 回答