質問
C# で OLEDB 経由で Excel ファイル (.xls) に書き込む方法を知っている人はいますか?私は次のことを行っています:
OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
dbCmd.CommandTimeout = mTimeout;
results = dbCmd.ExecuteNonQuery();
しかし、次のメッセージとともに OleDbException がスローされます。
「テーブル「テスト$」の設計を変更できません。読み取り専用のデータベースにあります。」
接続は問題なく、データも選択できますが、Excel ファイルにデータを挿入できないようです。OLEDB 経由で Excel ファイルへの読み取り/書き込みアクセスを取得する方法を知っている人はいますか?
解決
追加する必要があります 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\";
他のヒント
私も探して答えましたが、Zorantulaの解決策は私にとってはうまくいきませんでした。で解決策を見つけました 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;\";"
私も同じ問題を抱えていました。拡張プロパティのみを削除します IMEX=1
. 。それで問題は解決します。Excel ファイルにテーブルが作成されます...
いくつかの質問:
- アプリを実行するユーザー (あなた?) はファイルに書き込む権限を持っていますか?
- ファイルは読み取り専用ですか?
- 接続文字列は何ですか?
ASP を使用している場合は、次のように IUSER_* ユーザーを追加する必要があります。 この例.
- 自分のアプリケーション (Excel 2007 を使用しています) の Excel ファイルへの書き込み権限を確認するにはどうすればよいですか?
- (私の知る限り) ファイルは読み取り専用でも保護されてもいません。
- 私の接続文字列は次のとおりです。
"Provider = microsoft.jet.oledb.4.0; data source = fifa_ng_db.xls; mode = readwrite;拡張プロパティ= " excel 8.0; hdr = yes; imex = 1 ""
Michael Harenの答えにさらに続きます。このコードが ASP.NET アプリケーションで実行されている場合 (IIS アプリケーション プールで指定されている)、XLS ファイルに対する変更アクセス許可を付与する必要があるアカウントは、おそらく NETWORK SERVICE になります。コードがどのアカウントとして実行されているかを正確に確認するには、次の簡単な操作を行うことができます。
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
ASP.NET で実行していたところ、「デザインを変更できません...」と「ISAM が見つかりません...」という両方のエラー メッセージが表示されました。
次のことが必要であることがわかりました。
ある) 次の接続文字列を使用します。
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 コードは管理されていないため、他のセキュリティ コンテキストで実行する必要があります。(現在どのアカウントを使うか考えるのが面倒なので、「EVERYONE」を使用しました。)