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