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

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

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

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

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

мое соединение кажется прекрасным, и я могу выбрать данные отлично, но я не могу вставить данные в файл excel, кто-нибудь знает, как я получаю доступ для чтения/записи в файл excel через Для oledb?

7 ответов


вам нужно добавить 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\";

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

Я убрал и 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;\";"

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


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

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

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


  • Как проверить разрешения на запись в файл excel для моего приложения (я использую excel 2007)?
  • файл не только для чтения или защищен (по моим сведениям).
  • моя строка подключения:

"Поставщик=Microsoft.Реактивный.Oledb для.4.0;сведения Источник=fifa_ng_db.xls-файл;режим=чтение и запись;Расширенная Свойства=\"В Excel 8.0; HDR=да; IMEX=1\""


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

Response.Write(Environment.UserDomainName + "\" + Environment.UserName);

Я бежал под ASP.NET, и столкнулся с обоими "не может изменить дизайн..."и" не может найти ИЗАМА..." сообщение об ошибке.

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

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 выполняется под учетной записью сетевой службы, и у нее уже есть разрешения. Однако код OleDb неуправляем, поэтому он должен выполняться в другом контексте безопасности. (В настоящее время я слишком ленив, чтобы выяснить, какая учетная запись, поэтому я просто использовал всех.)