В C # как получить доступ к заголовкам Excel с помощью OLEDB (без автоматизации)? - PullRequest
3 голосов
/ 07 мая 2009

Это мой код, в котором я пытаюсь получить доступ к первой строке, первому столбцу

     string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;
                                      Data Source=" + fileName + @";Extended Properties=""Excel 8.0;HDR=NO;""";
            string CreateCommand = "SELECT * FROM [Sheet1$]";
            OleDbConnection conn = new OleDbConnection(connectionString);

              conn.Open();
              OleDbCommand cmd = new OleDbCommand(CreateCommand, conn);
             //   cmd.ExecuteNonQuery();
               DbDataReader dr= cmd.ExecuteReader();

              int i = 0;

               while (dr.Read())
               {

                   string ab = dr.GetValue(i).ToString();
                   MessageBox.Show(ab);
                   i++;
               }

Ответы [ 6 ]

5 голосов
/ 07 мая 2009

Вы пробовали HDR = ДА? Вот что говорит провайдеру OLEDB, что у вас есть строка заголовка.

http://connectionstrings.com/excel

2 голосов
/ 18 мая 2011

Я всегда использовал встроенные функции GetSchema для перечисления Sheets и Headers. Это действительно довольно гладко и не лишено смысла. Удачи!

OleDbConnection xl = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=filename.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\"");
xl.Open();

//Get columns
DataTable dtColumns = xl.GetSchema("Columns", new string[] { null, null, sheetName, null });
List<string> columns = new List<string>();
foreach (DataRow dr in dtColumns.Rows)
   columns.Add(dr[3].ToString());

xl.Close();
2 голосов
/ 07 мая 2009

Не хотите ли установить HDR = Нет?

Если указать поставщику OLEDB, что в первой строке содержатся заголовки, поставщик будет использовать заголовки в качестве имен для полей. (Я думаю о сбрасывании информации в таблицу данных, после чего вы получаете информацию @ DataTable.Columns ["[HEADER]"]. Строка ....)

Поскольку вы используете простое средство чтения данных и хотите, чтобы поля заголовка считывались как данные, укажите, что они не являются заголовками.

0 голосов
/ 11 сентября 2012
string xlPath = @"D:\Temparary.xlsx";    //location of xlsx file

string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + xlPath + ";Extended Properties=\"Excel 12.0 Xml; HDR=YES; IMEX=1;\"";

OleDbConnection con = new OleDbConnection(constr);

OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]",con);

con.Open();

OleDbDataReader dreader = cmd.ExecuteReader();

if (dreader.HasRows)
{
    dreader.Read();
    Label2.Text = dreader.GetValue(0).ToString();

}

dreader.Close();

con.Close();
0 голосов
/ 03 мая 2011

У меня была другая проблема, но я смог получить доступ к первой строке данных Excel и удалить ее с помощью этого OleDBAdapter Excel QA Я отправил сообщение через переполнение стека.

Если вы пытаетесь получить доступ к первой строке, первому столбцу, просто заполните набор данных в соответствии с сообщением, о котором я упоминал, и добавьте в нижнюю часть:

    // DataSet:          
    Object o = ds.Tables["xlsImport"].Rows[0]["LocationID"];
    Object oa = ds.Tables["xlsImport"].Rows[0]["PartID"];            
    Object row0Col3 = ds.Tables["xlsImport"].Rows[0][3];

    string valLocationID = o.ToString();
    string valPartID = oa.ToString();
    string rowZeroColumn3 = row0Col3.ToString();
0 голосов
/ 12 мая 2010
// CODE TO SET UP THE CONNECTION BETWEEN EXCEL AND VS2005 
// IN EXTENDED PROPERTIES SET HDR = YES FOR READING FIRST ROW AND HEADERS.
// IN EXTENDED PROPERTIES SET IMEX = 1 TO READ INTERMIXED DATA.

excelCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ExcelDBtrial.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
excelCon.Open();
exDA = new OleDbDataAdapter("Select * from [Sheet1$]", excelCon);
exDA.Fill(exDT);

//CODE TO ADD TABLE HEADERS INTO THE HEADERS COMBOBOX
foreach (DataColumn dc in exDT.Columns)
    headerCB.Items.Add(dc.ToString());
...