1

ASP.NET、C#、MVC 3、Code First プロジェクト

Excel スプレッドシートからデータをインポートしようとしています。すべてのセルをテキストとしてフォーマットしました。
インポート ワークシートのサンプル行は次のとおりです。

Account             Card               ThreeCode  Route  
04562954830287127   32849321890233127  183        154839254 
04562954830287128   32849321890233128  233
04562954830287129   32849321890233129  082
04562954830287130   32849321890233130  428

デバッグで実行し、ds DataSet にドリルダウンすると、Account 列と Card 列が文字列としてインポートされ、3-Digit 列と Route 列が double としてインポートされます。問題は、データ行 3 の 0 (082) で始まる 3 桁の数字で発生します。これは System.DBNull としてインポートされ、空になります。先頭にゼロが付いた 3 桁のコードをインポートできるようにする必要があります。インポートを強制的にすべての文字列にする方法、またはこの問題に対処する別の方法はありますか? ウェブで検索しましたが、解決策が見つかりませんでした。これはブラウザから実行されるため、ローカル マシン上のレジストリ、dll、または ini ファイルを操作することはできません。インポートコードは以下です。よろしくお願いします。

public ActionResult ExcelToDS(string Path = "C;\File.xls")
{ 
  string strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + "; " + "Extended Properties=Excel 8.0;";

  OleDbConnection conn = new OleDbConnection(strConn);
  conn.Open(); string strExcel = "";
  OleDbDataAdapter myCommand = null;
  DataTable dt = new DataTable();
  strExcel = "select * from [Import$]";
  DataSet ds = null; 
  myCommand = new OleDbDataAdapter(strExcel, strConn);
  ds = new DataSet(); myCommand.Fill(ds, "table1");
4

2 に答える 2

1

ああ、そうそう、Excel ドライバーの喜びです。何が起こるかというと、データ型の最初の 10 行から判断され、その形式以外のものはすべて null になります。

解決策は、通常はコストがかかるより堅牢なサード パーティ製ドライバーを使用するか、レジストリ キーを設定して、既定の 8 行ではなく、すべての行を完全にサンプリングすることです。

TypeGuessRows http://www.connectionstrings.com/excelのリンクを確認してください。

HKLM\Software\Wow5432Node\Microsoft\Jet\4.0\Engines\Excel 値 TypeGuessRows をゼロに設定します

于 2012-11-07T00:37:55.613 に答える
0

これを一貫して機能させる方法はないようです。私が思いついた回避策は、Excel ワークブックの ThreeCode 列に 1000 を追加することです。その後、データをデータセットにインポートできます。次に、データが読み取られるときに、「1」プレフィックスを取り除くだけです。これが私のインラインメソッドです。

public static string last3(this string instring)
{ int len = instring.Length - 3; string outstring = instring.Substring(len, 3); return outstring; }

コードで次のように呼び出すことができます。

card.3Dig = code.last3();

「card」と「3dig」は、入力されるクラスとフィールドです。「code」は 4 桁のデータセット データです。

于 2012-11-07T15:18:36.047 に答える