Asp.Net (c #) — чтение листа Excel

#c# #asp.net #excel

#c# #asp.net #excel

Вопрос:

У меня есть требование выполнить некоторый импорт из таблицы Excel, и я просматривал различные примеры в Интернете, все они, похоже, используют драйвер «Jet», который несовместим с 64-разрядной версией.

Теперь я полностью осведомлен о доступных обходных путях (при изменении способа запуска IIS и т.д.), Однако я хотел бы знать, есть ли замена для драйвера «Jet», чтобы я мог читать и генерировать листы Excel из Asp.Net работает на 64-разрядном сервере без изменений IIS.

Ответ №1:

В прошлый раз, когда я исследовал, не было драйвера x64. Я использую это для открытия файлов xls. Это работает на 64-битных блоках, пока вы компилируете с использованием x86.

  DataSet myDataset = new DataSet();
                string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="   filename   @";Extended Properties=""Excel 12.0 Xml;HDR=YES""";
                OleDbConnection myData = new OleDbConnection(strConn);
                try {
                                      myData.Open();
                }
                catch (OleDbException e) {
                    try {
                        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;"   "Data Source="   filename   ";"   "Extended Properties=Excel 8.0;HDR=YES;";
                        myData = new OleDbConnection(strConn);
                        myData.Open();
                    }
                    catch (Exception e2) {
                        strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="   filename   @";Extended Properties=""HTML Import;HDR=YES;IMEX=1"";";
                        myData = new OleDbConnection(strConn);
                        myData.Open();
                    }
                }

                int i = 0;
                foreach (DataRow row in myData.GetSchema("tables").Rows)
                    try {
                        i  ;
                        string name = row[2].ToString().Replace("''", "'").TrimEnd('_');
                        DataSet ds = new DataSet();
                        OleDbDataAdapter d = new OleDbDataAdapter("SELECT * from ["   name   "]", strConn);
                        d.Fill(ds);
                        DataTable dt = ds.Tables[0].Copy();
                        dt.Namespace = name;
                        myDataset.Tables.Add(dt);
                    }
                    catch (Exception e) {
                    }
                return myDataset;
  

Комментарии:

1. Если это веб-сайт и он не скомпилирован?

2. Веб-сайты все еще компилируются. Этот код будет работать в вашем asp.net приложение.

3. Я это понимаю. Расскажу вам, что заставит его раскрутиться и вернуться с проблемами.

4. Этот код работает, когда я экспортирую файл, и тот же файл, который я загружаю, как только я вношу некоторые изменения и сохраняю это, и снова пытаюсь импортировать, тогда код не работает, получая сообщение об ошибке при foreach not finding tables

Ответ №2:

http://npoi.codeplex.com

Я сам использую его на 64-разрядном сервере с IIS 6.0, не самом простом в использовании, но он отлично работает (быстрый, надежный, не требует установки office на сервере и т.д.).

Ответ №3:

Вы уже думали о том, чтобы попробовать Open XML SDK?