Проблема чтения имен столбцов с помощью reader.GetName и OLEDB Excel провайдера - PullRequest
0 голосов
/ 05 августа 2010

У меня проблема с получением имен столбцов в листе Excel.

У меня есть лист Excel, содержащий только 3 ячейки в первой строке с этими тремя значениями:

  • в A1: A

  • в B1: B

  • в C1: ABC

Когда я пытаюсь выполнить свой метод, метка показывает:

  • A, B, A # B # C

А не:

  • A, B, ABC

Мой код:

    protected void btnExecute_Click(object sender, EventArgs e)
    {
        string fullFileName = @"C:\TEST.xls";
        List<string> columns = new List<string>();

        string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", fullFileName);

        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            conn.Open();

            // Retrieves the first sheet
            DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string firstSheet = dt.Rows[0]["TABLE_NAME"].ToString();

            // Retrieves the list column name
            string query = string.Format("SELECT TOP 1 * FROM [{0}]", firstSheet);
            OleDbCommand cmd = new OleDbCommand(query, conn);
            OleDbDataReader reader = cmd.ExecuteReader();
            for (int i = 0; i < reader.FieldCount; i++)
            {
                columns.Add(reader.GetName(i));
            }
        }

        lblCols.Text = string.Join(",", columns.ToArray());
    }

У вас есть идея, чтобы решить эту проблему ??

Заранее спасибо.

Даниил

1 Ответ

0 голосов
/ 03 мая 2011

Попробуйте это OleDBAdapter Excel QA Я отправил через переполнение стека.

Я только что проверил это, и он взял "A.B.C" из образца .xls, который вы описали.
для быстрого тестирования добавьте в конец следующее:

Object o = ds.Tables["xlsImport"].Rows[0]["LocationID"];
Object oa = ds.Tables["xlsImport"].Rows[0]["PartID"];
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];

string valLocationID = o.ToString();
string valPartID = oa.ToString();
string rowZeroColumn3 = row0Col3.ToString();
...