Запись в файл Excel с OLEDB - PullRequest
       59

Запись в файл Excel с OLEDB

8 голосов
/ 12 сентября 2008

Кто-нибудь знает, как записать в файл Excel (.xls) через OLEDB в C #? Я делаю следующее:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

Но я получаю OleDbException с сообщением:

"Невозможно изменить дизайн таблицы "Тест $. Это только для чтения базы данных. "

Мое соединение выглядит нормально, и я могу выбрать данные отлично, но я не могу вставить данные в файл Excel, кто-нибудь знает, как я могу получить доступ на чтение / запись к файлу Excel через OLEDB?

Ответы [ 7 ]

14 голосов
/ 23 апреля 2009

Я тоже искал и отвечал, но решение Зорантула не сработало для меня. Я нашел решение на http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

Я удалил параметр ReadOnly=false и расширенное свойство IMEX=1.

Свойство IMEX=1 открывает книгу в режиме импорта, поэтому команды изменения структуры (например, CREATE TABLE или DROP TABLE) не работают.

Моя рабочая строка подключения:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"
8 голосов
/ 08 октября 2008

Вам необходимо добавить ReadOnly=False; в строку подключения

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";
2 голосов
/ 05 августа 2011

У меня тоже была такая же проблема. Удалите только расширенное свойство IMEX=1. Это решит вашу проблему. Ваша таблица будет создана в вашем файле Excel ...

1 голос
/ 12 сентября 2008

Пара вопросов:

  • Имеет ли пользователь, который запускает ваше приложение (вас?), Разрешение на запись в файл?
  • Файл доступен только для чтения?
  • Какая у вас строка подключения?

Если вы используете ASP, вам нужно добавить пользователя IUSER_ *, как в в этом примере .

0 голосов
/ 10 июня 2009

Я работал в ASP.NET и обнаружил сообщения об ошибке «Не удается изменить дизайн ...» и «Не удается найти ISAM ...».

Я обнаружил, что мне нужно:

a ) Используйте следующую строку подключения:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

Примечание. У меня тоже были проблемы с IMEX=1 и атрибутами ReadOnly=false в строке подключения.

b ) Предоставьте ВСЕМ полные права доступа к папке, в которую записывается файл. Обычно ASP.NET работает под учетной записью NETWORK SERVICE, и у него уже были разрешения. Однако код OleDb неуправляем, поэтому он должен работать в каком-то другом контексте безопасности. (В настоящее время я слишком ленив, чтобы выяснить, какой аккаунт, поэтому я просто использовал ВСЕХ.)

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

В дополнение к ответу Майкла Харена. Учетная запись, которую вам нужно будет предоставить разрешениям на изменение файла XLS, скорее всего, будет NETWORK SERVICE, если этот код выполняется в приложении ASP.NET (оно указано в пуле приложений IIS). Чтобы точно узнать, под какой учетной записью работает ваш код, вы можете сделать следующее:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
0 голосов
/ 12 сентября 2008
  • Как проверить разрешения на запись в файл Excel для моего приложения (я использую Excel 2007)?
  • Файл не только для чтения и не защищен (насколько мне известно).
  • Строка моего подключения:

"Provider = Microsoft.Jet.OLEDB.4.0; Data Источник = fifa_ng_db.xls; Mode = ReadWrite; Extended Свойства = \ "Excel 8,0; HDR = Yes; IMEX = 1 \ ""

...