Как читать данные из Excel в Asp.Net - PullRequest
0 голосов
/ 13 января 2012

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

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

Ответы [ 4 ]

1 голос
/ 13 января 2012

Вы уверены, что версия 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 голосов
/ 19 января 2012
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();
0 голосов
/ 13 января 2012

Посмотрите на эту ветку: Excel "Внешняя таблица не в ожидаемом формате."

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

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

0 голосов
/ 13 января 2012

сохраните файл на жестком диске, затем добавьте ссылку на Библиотека объектов Microsoft Excel 12.0 и объявите использование:

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();

РЕДАКТ. 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);
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...