2012-01-13 2 views
0

Я пытаюсь прочитать данные из загруженного xls. Я использовал эту часть кода:Как читать данные из Excel в Asp.Net

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 $ не найден. Любая помощь?

+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 Library 12.0 Object и объявить с помощью:

using Excel = Microsoft.Office.Interop.Excel; 

затем создать экземпляр класса и загрузить файл для чтения значения ячеек, пример:

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: Если вы не хотите, чтобы установить офис на сервере, вы можете использовать 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

есть возможный способ цикла это? У меня будет много записей в excel – Ktt

+0

ok, только что отредактировал мой пост –

1

Вы уверены, что версия excel верна? вы также можете обернуть расширенные свойства в кавычки. Я также рекомендую очистить ваши ресурсы, чтобы вы не создавали утечки памяти.

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."

Может быть, вы должны изменить поставщика, поскольку они предлагают.

Еще один вариант - использовать OpenXML SDK для чтения файла excel. Это может заставить вас начать: http://msdn.microsoft.com/en-us/library/ff921204.aspx

+0

Я посмотрел на первое сообщение и попытался, но он не работал. Я все еще получаю сообщение об ошибке «Внешняя таблица не в ожидаемом формате». – Ktt

+0

Я понял это – Ktt

Смежные вопросы