Проблема синтаксического анализа файла XLS с C # - PullRequest
3 голосов
/ 14 октября 2008

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

У меня написана программа, которая анализирует файл 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 может содержать функции которые не совместимы с текстом (вкладка разделители). Вы хотите сохранить Рабочая тетрадь в этом формате?

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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 14 октября 2008

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

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

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

0 голосов
/ 01 июля 2009

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

0 голосов
/ 14 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...