Проблема с анализом файла XLS с помощью C#

StackOverflow https://stackoverflow.com/questions/200878

  •  03-07-2019
  •  | 
  •  

Вопрос

Хорошо, давайте посмотрим, смогу ли я объяснить это.

У меня написана программа, которая анализирует файл Excel, и она работает нормально.Чтобы попасть в файл, я использую следующее:

string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
//this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);

и это прекрасно работает.Но когда я пробую это сделать с реальным файлом (он предоставлен другой программой), я получаю эту ошибку:

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)

НО, думаю, именно в этом и заключается проблема.Если я возьму этот файл и сохраню его в локальном Excel, сначала я получу это всплывающее окно:

Cp-arfjn-flag.xls может содержать функции, которые не совместимы с текстом (Tab Demited).Вы хотите сохранить рабочую книгу в этом формате?

  • Чтобы сохранить этот формат, который оставляет любые несовместимые функции, нажмите «Да».
  • Чтобы сохранить функции, нажмите Нет.Десять Сохраните копию в последнем формате Excel.
  • Чтобы увидеть, что может быть потеряно, нажмите на помощь.

Если я нажму «Нет», а затем сохраню его как текущий формат Excel, программа будет работать нормально.

Я предполагаю, что это сохранено в каком-то безумном старом формате Excel?

Полагаю, мои вопросы будут такими:

  • Как я могу сказать, какую версию Excel это сохранила?
  • Как я могу проанализировать его в его нынешнем состоянии?
  • -или- Могу ли я программно сохранить его как более новую версию?

Надеюсь, это понятно...Спасибо.

Это было полезно?

Решение

Похоже, что файл XLS, созданный вашим сторонним приложением, на самом деле может быть не в формате Excel — на самом деле это может быть текстовый файл с разделителями-табуляцией и расширением .xls.

Попробуйте открыть его в текстовом редакторе и посмотреть.

Если он разделен табуляцией, вы можете отказаться от адаптера OleDB и открыть/проанализировать его как стандартный текстовый файл.

Другие советы

Если формат созданного файла может измениться в будущем (возможно, при обновлении стороннего приложения), вы можете предпочесть использовать Первичные сборки взаимодействия Office.Они загрузят любую версию или формат файла, созданного Excel.Обратной стороной является то, что вам понадобится установленный на сервере Office.

я решил проблему.Файл Excel должен быть создан с помощью MS EXCEL 2003, а не MS EXCEL 2007 «сохранить как 97-2003».поэтому вам придется скачать файл из любого источника.Затем вручную скопируйте данные на лист.со мной это сработало.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top