0

いくつかの作業を行うためにxlsxファイルをdbとして読み取っています

すべてをテキストとして入力したいのに、いくつかのフィールドがintおよびdateとして読み取られていることに気付きました。この機能をオーバーライドする方法はありますか?

以下のコード

(自分のコードでもっとうまくできることは何でも指摘してください)

  private DataSet ExceltoDT(OpenFileDialog dialog)
    {
        try
        {
            string connst = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dialog.FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO\";";
            string sheet = "Sheet1$";
            string strSQL = "SELECT * FROM [" + sheet + "]";
            //string Table = "081710";
            OleDbConnection xlsdb = new OleDbConnection(connst);
            xlsdb.Open();
            OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, xlsdb);
            DataSet ds2 = new DataSet();
            adp.Fill(ds2);


            adp.Dispose();
            xlsdb.Close();
            xlsdb.Dispose();

            return ds2;
        }
        catch (StackOverflowException stack_ex2)
        {
            MessageBox.Show("(2007 Excel file) Stack Overflowed!" + "\n" + stack_ex2.Message);
            return null;

        }
        catch (OleDbException ex_oledb2)
        {
            MessageBox.Show("An OleDb Error Thrown!" + "\n" + ex_oledb2.Message);
            return null;
        }
    }
4

1 に答える 1

1

'すべてのセル値の前に(アポストロフィ)を追加します。これにより、Excelに「数値/日付/その他のように見える場合でもこれをテキストとして扱う」ことがわかります。

あなたが望むものではありませんか?次に、DBコネクタはひどく壊れているため、使用しないでください。セルが混在しているカラムがある場合に気付くでしょう。その場合、DBドライバーは最初の8行を調べて、タイプを検出したタイプの大部分に設定し、その列に収まらないものについてはNULLを返します。レジストリをハッキングすることでこれを修正できます。

代わりに、OLE APIを使用してワークブックを開き、そこから開始して、行ごとに読み取り、必要に応じてデータを変換します(この長い投稿リストには、C#からExcelにアクセスするためのあらゆる可能な方法に加えて、すべてのバグと問題が含まれている必要があります。遭遇する可能性があります)。

于 2010-08-27T14:40:25.037 に答える