2012-01-13 19 views
0

アップロードされたxlsからデータを読み込もうとしています。私はこのコード部分を使用しました:Asp.NetでExcelからデータを読み取る方法

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(fileName) + ";Extended Properties=Excel 8.0"); 
          if (connection.State == ConnectionState.Closed) 
            connection.Open(); 
          string query = "select * from [Sheet1$]"; 
          OleDbDataAdapter da = new OleDbDataAdapter(query, connection); 
          DataSet ds = new DataSet(); 
          da.Fill(ds); 

しかし、私はこのエラーが発生します:外部テーブルが期待された形式ではありません。

私は正しい経路を与えていると確信しています。私は働いていましたが、そうではありません。それが動作する場合は、データテーブルを埋めることはありません。 Sheet1 $ objectが見つからないというエラーが表示されます。どんな助け? 、

using Excel = Microsoft.Office.Interop.Excel; 

は、クラスをインスタンス化し、セルの値を読み込むためのファイルをロードします。

+0

あなたはおそらく良いアイデア – Joshi

答えて

0
string savePath = "/Assets/UploadedFiles/"; 
          string fileName = "Activity.xls"; 
          savePath += fileName; 
OleDbConnection conn= new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(savePath) + ";Extended Properties='Excel 12.0;HDR=YES'"); 
    if (conn.State == ConnectionState.Closed) 
    conn.Open(); 
    string query = "select * from [Sheet1$]"; 
     OleDbDataAdapter da = new OleDbDataAdapter(query, conn); 
           DataSet ds = new DataSet(); 
           da.Fill(ds, "Activities"); 
           dt = ds.Tables[0]; 
           conn.Close(); 
-1

は、をMicrosoft Excel 12.0 Object Libraryのへの参照を追加し、ハードディスクにファイルを保存し、使用を宣言します例:

Excel.Application xlApp ; 
Excel.Workbook xlWorkBook ; 
Excel.Worksheet xlWorkSheet ; 
object misValue = System.Reflection.Missing.Value; 

xlApp = new Excel.ApplicationClass(); 
xlWorkBook = xlApp.Workbooks.Open("file.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

MessageBox.Show(xlWorkSheet.get_Range("A1","A1").Value2.ToString()); 

xlWorkBook.Close(true, misValue, misValue); 
xlApp.Quit(); 

は、EDIT 1: サーバーにOfficeをインストールしたくない場合は、あなたが同様の働きexcellibraryを使用することができ、(作者のページから)などの単純な:

// open xls file 
Workbook book = Workbook.Load(file); 
Worksheet sheet = book.Worksheets[0]; 

// traverse cells 
foreach (Pair<Pair<int, int>, Cell> cell in sheet.Cells) 
{ 
    dgvCells[cell.Left.Right, cell.Left.Left].Value = cell.Right.Value; 
} 

// traverse rows by Index 
for (int rowIndex = sheet.Cells.FirstRowIndex; 
     rowIndex <= sheet.Cells.LastRowIndex; rowIndex++) 
{ 
    Row row = sheet.Cells.GetRow(rowIndex); 
    for (int colIndex = row.FirstColIndex; 
     colIndex <= row.LastColIndex; colIndex++) 
    { 
     Cell cell = row.GetCell(colIndex); 
    } 
} 
+1

がループに可能な方法がある確認してくださいすることができこの?私はExcelで多くのレコードを持っています – granaker

+0

ないWebサーバ上のExcelをインストールする必要になる..that Excelシート名 – Ktt

+0

ok、ちょうど私の投稿を編集しました –

1

エクセルのバージョンは正しいですか?拡張プロパティを引用符で囲むこともできます。また、メモリリークを発生させないようにリソースをクリーンアップすることをお勧めします。

var path = Server.MapPath(fileName); 

//where 8.0 may be a different version: 9 - 12? 
var connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended ""Properties=Excel 8.0""", path); 
using(var connection = new OleDbConnection(connectionString)) 
using(var command = connection.CreateCommand()) 
{ 
    connection.Open(); 
    command.CommandText = "select * from [Sheet1$]"; 
    var table = new DataTable(); 
    using(var reader = command.ExeucteReader()) 
    { 
     table.Load(reader); 
     return table; 
    } 
} 
+0

バージョンが正しいと確信しています。私はそれを行うことができません – Ktt

0

は、このスレッドを見てください:彼らは提案として Excel "External table is not in the expected format."

たぶん、あなたは、プロバイダを変更する必要があります。

もう1つのオプションは、OpenXML SDKを使用してExcelファイルを読み取ることです。これは、あなたが始めることができます: http://msdn.microsoft.com/en-us/library/ff921204.aspx

+0

私は最初のリンクを見て、試してみましたが、それは仕事をしませんでした。私はまだ "外部テーブルが期待どおりのフォーマットではありません"というエラーが表示されます。 – Ktt

+0

私はそれを理解しました – Ktt