3

これは、最初の行、最初の列にアクセスしようとしている私のコードです

     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++;
               }
4

6 に答える 6

6

HDR=YES を試しましたか? これが、ヘッダー行があることを OLEDB プロバイダーに伝えるものです。

http://connectionstrings.com/excel

于 2009-05-06T23:10:34.970 に答える
2

私は常にGetSchemaの組み込み関数を使用して、シートとヘッダーを列挙してきました。それは本当に非常に滑らかで、ナンセンスではありません。幸運を!

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();
于 2011-05-18T15:04:21.740 に答える
2

HDR=いいえに設定したくないですか?

最初の行にヘッダーが含まれていることを OLEDB プロバイダーに通知すると、プロバイダーはヘッダーをフィールドの名前として使用します。(情報をデータテーブルにダンプすることを考えています。その後、@ DataTable.Columns["[HEADER]"].Row.... という情報を取得します。)

単純なデータ リーダーを使用しており、「ヘッダー」フィールドをデータとして読み取る必要があるため、これらがヘッダーではないことを指定します。

于 2009-05-07T00:12:25.820 に答える
0

別の問題が発生しましたが、Excelデータの最初の行にアクセスし、スタックオーバーフローを介して投稿したこのOleDBAdapterExcelQAを介して削除することができました。

最初の行、最初の列にアクセスしようとしている場合は、私が言及した投稿ごとにデータセットを入力し、下部に追加します。

    // 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();
于 2011-05-03T17:14:26.167 に答える
0
// 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());
于 2010-05-12T15:05:34.763 に答える
0
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();
于 2012-09-11T06:33:54.820 に答える