0

アプリケーションにインポートする必要のあるExcelシートに2列のデータがあります。

私はこれを使用して行います-

string strConn;
OleDbDataAdapter oledaExcelInfo;

strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Server.MapPath(strSavePath + strRepFileName) + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
oledaExcelInfo = new OleDbDataAdapter("SELECT * FROM [Book1]", strConn);

dsetExcelInfo = new DataSet();            
oledaExcelInfo.Fill(dsetExcelInfo, "CCInfo");

これはデータを正常にインポートしますが、データが正しくインポートされない場合があります。つまり、数値1234567が次のようにインポートされる場合があります。1.23E+06

これは、Excelファイルのデータが(一重引用符を追加する)の'1234567代わりになっている場合に解決できます。1234567

現在、Excelからフェッチしたデータを操作して、データをインポートする前に、プログラム'ですべての値にaを追加して、誤ったインポートを防止できるようにしています。

OleDbDataAdapter.Updateを使用してみましたが、データのインポート後に発生するため、これは役に立たないと思います。あれは正しいですか?

正しいデータをインポートするようにデータを操作できますか?どうすればいいですか?

4

2 に答える 2

1

オープンソースのNPOIライブラリを使用して、Excelからデータをインポートし、スプレッドシートにあるようにデータの形式を保持しました。つまり、次のような別の形式でデータをインポートする代わりに、としてインポートします123456712345671.23E+06

上記の質問のようにデータをインポートする代わりに、NPOIライブラリを使用してデータをインポートします-

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(Server.MapPath(strSavePath + strRepFileName), FileMode.Open, FileAccess.Read))
{
     hssfworkbook = new HSSFWorkbook(file);
}
Sheet sheet = hssfworkbook.GetSheet("Book1");

DataTable dt = new DataTable();    //Create datatable 
dt.Columns.Add();             //Add data columns

for (int count = 0; count <= sheet.LastRowNum; count++)
{
    DataRow dr = dt.NewRow();         //Create new data row

    //Based on the type of data being imported - get cell value accordingly    
    dr[0] = sheet.GetRow(count).GetCell(0).StringCellValue;   
    //dr[0] = sheet.GetRow(count).GetCell(0).NumericCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).RichStringCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).DateCellValue;
    //dr[0] = sheet.GetRow(count).GetCell(0).BooleanCellValue;

    dt.Rows.Add(dr);  //Add row to datatable
}
于 2010-08-24T13:56:58.887 に答える
0

私はちょうど同様の問題を抱えています(ここでそれを見つけてください:OleDbDataAdapterメソッド(C#)を介したExcelファイルからの風変わりなSELECT)。

外部ライブラリなしで.NETFrameworkのみを使用する場合は、次の接続文字列を試してください。

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";  

エンジンをJETからACEに切り替えることでそれができました。

于 2010-12-02T15:00:15.067 に答える