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

Excel.Interop の代わりに OleDB を使用できます。あなたの質問はセル値の読み取りのみを必要とするため、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();
    }
}

いくつかのメモ:

ファイルに XLSX 拡張子があるため、ACE.OleDB を使用してい
ます。ファイルの最初の行に Column1 という列ヘッダーがあると想定しています。等....

于 2012-08-13T14:42:11.160 に答える