2

GridView にバインドするために、Excel シート データをデータ テーブルに読み込もうとしています。私のExcelシートには次のようなデータが含まれています。

ID    Value1                    Value2
-------------------------------------------------
1     $312976.97530297          $30790.0614862584
etc

次のコードを使用して、値をデータテーブルに読み取ります。

DataTable table = new DataTable();
string filePath = @"D:\Book1.xlsx";
string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", filePath);
using (OleDbConnection dbConnection = new OleDbConnection(strConn)) 
{
using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT ID, value1,value2  FROM [Sheet1$]", dbConnection))
dbAdapter.Fill(table);
}

問題: value1 と value2 には $ 記号が含まれているため、dataAdaptor は両方の値を完全な精度なしで取得します。312976.97530297 の代わりに、312976.9753 のみが返されます。

Note: 
1. I cannot change the input Excel sheet since the enduser will upload it to the web site.
2. If i remove the $ symbol in the excel sheet, it will return the full precision, but $ also present in the input sheet.
3. I tried using Microsoft.Office.Interop.Excel and its working, but the performance is very low.


Or I can format all the excel cell as Text/General type before filling to the datatable, Anyone knows how to do that?

OleDbDataAdapter を使用した方法を 1 つ提案してください。

前もってありがとう、ウィルソン。

4

2 に答える 2

0

@All、
最後に複雑な方法でそれを行いました:)、
1.相互運用を使用してアップロードした後、すべてのExcel列を一般的なタイプにフォーマットします
2.oledbadaptorを使用してExcelをデータテーブルに読み取ります。セル型が一般であるため、
tatatable です) 3. UDT を使用してデータテーブルの値を SQL テーブルに挿入する必要があるため、データテーブルの行の型を文字列に変換しています (変換しないと、ここでも精度が失われます)

とにかく、現在は正常に動作しています(代替アプローチは常に歓迎されます:))Wilz ...

于 2012-09-07T11:14:00.607 に答える
0

http://epplus.codeplex.com/releases/view/79802を試してみてください。少なくとも相互運用性と比較して、データを非常に高速に読み取ることができます。また、相互運用性は Web サービスに対して十分な信頼性がありません。

あなたの問題について:「$」をエスケープする方法があるかもしれません

Microsoft は、通貨の場合は double または float データ型を使用することをお勧めします。どのような形式を使用していますか?

于 2012-08-09T14:02:06.327 に答える