Как читать заголовки столбцов данных и данных каждой ячейки в Excel, используя C # - PullRequest
2 голосов
/ 23 августа 2011

У меня есть лист Excel, похожий на:

excel screenshot

Я хочу прочитать заголовок столбца данных: Все, col1, col2, col3, col4, col5

и получите все данные ячейки. Например, ячейка в строке = 2 и столбце 2 = 0

Я сейчас пишу этот код:

OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 5 * FROM " + excelSheets[j], connString);
DataTable fooData = new DataTable();
dbAdapter.Fill(fooData);
foreach (DataRow row in fooData.Rows)
{
    Response.Write(row[0].ToString());
    //Response.Write(row[1].ToString());
}

но он возвращает только таблицу данных с 1 столбцом и только текст строки 1..5.

Как я могу это сделать?

Скажите, пожалуйста, без использования Linq to Excel Provider и Open Xml.

Редактировать 1:

string file_name = "C:\\Book1.xlsx";
        string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
        objConn = new OleDbConnection(connString);
        objConn.Open();
        dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        if (dt == null)
        {
            Response.Write("Not Exist");
        }

        String[] excelSheets = new String[dt.Rows.Count];
        int i = 0;

        foreach (DataRow row in dt.Rows)
        {
            excelSheets[i] = row["TABLE_NAME"].ToString();
            i++;
        }

        // Loop through all of the sheets if you want too...
        for (int j = 0; j < excelSheets.Length; j++)
        {
            OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 100 * FROM " + excelSheets[j], connString);
            DataTable fooData = new DataTable();
            dbAdapter.Fill(fooData);
            foreach (DataRow row in fooData.Rows)
            {
                Response.Write(row[0].ToString());
            }

        }

Ответы [ 4 ]

1 голос
/ 23 августа 2011

Вы получаете имя столбца для первого столбца, например, fooData.Columns[0].ColumnName - см. http://msdn.microsoft.com/en-us/library/system.data.datacolumn.columnname.aspx

EDIT:

Измените SELECT на SELECT * FROM И используйте Fill (0, 5, new DataTable[] { fooData }).

0 голосов
/ 24 сентября 2017

Только для заголовка столбца данных для логики здесь:

                 string filePath = "C:\\Book1.xlsx";
                string connString = string.Empty;
                if (path.EndsWith(".xlsx"))
                {
                    //2007 Format
                    connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
                }
                else
                {
                    //2003 Format
                    connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
                }
                using (OleDbConnection con = new OleDbConnection(connString))
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {
                        //Read the First Sheet
                        cmd.Connection = con;
                        con.Open();
                        DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        con.Close();
                        string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

                        //Read the Header Row
                        cmd.CommandText = "SELECT top 1 * From [" + firstSheet + "]";
                        using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
                        {
                            DataTable HeaderColumns = new DataTable();
                            da.SelectCommand = cmd;
                            da.Fill(HeaderColumns);
                            List<string> Filedata = new List<string>();
                            foreach (DataColumn column in HeaderColumns.Columns)
                            {
                                string columnName = HeaderColumns.Rows[0][column.ColumnName].ToString();


                                Filedata.Add(columnName);

                                ViewBag.Data = Filedata;
                            }
                        }
                    }
                }
0 голосов
/ 23 августа 2011

Драйвер, который вы выбрали, предназначен для Excel 2007 («Provider = Microsoft.ACE.OLEDB. 12 .0» в вашей строке подключения). Ваш файл Excel 2007 или 2010?

0 голосов
/ 23 августа 2011
"SELECT * FROM [" +  excelSheets[j] + "$A1:C5]"

Попробуйте это. Он должен вернуть все ячейки от А1 до С5.

...