2

Excel ワークシートをデータセットとして返すために、いくつかのレガシー コードを使用しています。ただし、結果のデータセットを反復処理すると、すべてのセルが存在するわけではないようです。読み取られている Excel シートには結合されたセルがいくつかあり、それが問題なのかどうか疑問に思っています。コードは次のとおりです。

private DataSet Get_Spreadsheet_Data(string strFileName, string strSheetName)
{
    DataSet ds = new DataSet();
    string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=Excel 8.0;";
    OleDbConnection objConn = new OleDbConnection(strConnectionString);
    try
    {
        objConn.Open();
        OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + strSheetName + "$]", objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
        objAdapter1.SelectCommand = objCmdSelect;
        objAdapter1.Fill(ds);
    }
    catch (Exception Ex)
    {
        //litOutput.Text = "<span style=\"color:red;\">Exception Occurred pulling data from the spreadsheet.</span><br>Details: " + Ex.Message;
    }
    finally
    {
        objConn.Close();
        objConn.Dispose();
    }
    return ds;
}

このコードは誤動作していますか? アドバイスをいただければ幸いです。

4

2 に答える 2

2
string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=Excel 8.0;";

読む必要があります:

string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties="Excel 8.0;HDR=NO;IMEX=1;";

そしてそれはトリックをしました!

于 2012-06-15T14:34:37.943 に答える
0

マージされたファイルを持たない Excel ファイルで同じコードを実行しようとしましたか? 結合されたセルがデータセットの塗りつぶしに問題を引き起こす可能性があるかどうか疑問に思うなら、それは私が最初に試すことです...

明確にするために編集: デバッグ目的: 同じ Excel ファイルを使用し、セルの結合を元に戻すことのみを確認してください。さらに良いのは、3 行 3 列の Excel ファイルから始めることです。

行 1: 値が 'Foo; のセル A1。セル B1 'バー'、C1 バナナ。行 2: Cell A2 Foo1 B2 Bar1 <-- これら 2 つのセルを結合します。C2 = アップル。行 3: 値が 'Foo2; のセル A3。セル B3 'Bar2' C3 オレンジ <-- 結合セルを使用した後、次の行が適切に読み取られるかどうかを確認するには...

于 2012-06-14T21:49:07.413 に答える