2

Excelへのインターフェースを実装しています。COM を使用して、C++ から直接 Excel を自動化しています。私のアプリケーションのほとんどは確実に動作しています。

ただし、ファイルが既に Excel で開かれているかどうかを検出できません。開いている場合は、シミュレーションを実行する前に閉じるようにユーザーに通知したいと思います。

MFC、VB、または .NET を使用していません。私のソリューションは、Excel バージョン 97 から 2010 で機能する必要があります。プログラムで Excel のバージョンを知ることができれば、Excel のバージョンごとに異なる手法を使用してもかまいません。

Excel がセッション ロックを作成したかどうかを判断するために、同じフォルダー内で "~$xxx" ("xxx" は元のファイル名) という名前のファイルを探していました。しかし、この手法は常に機能するとは限りません。

同様の質問は、プログラムでシミュレーションが開始されたら、ユーザーがファイルを書き込みモード (読み取り専用モードで問題ありません) で開けないようにしたいというものです。

4

1 に答える 1

1

私は C++ を使用していませんが、VB.net の同じロジックを使用すると、この C++ コードはおそらくあなたが望むことを行うはずですか? 私はそれをテストしていません...これも、特定のExcelバージョンを確認する必要はありません。.xlsxまたはその他の拡張子の場合は、以下の拡張子を置き換えるだけです。

std::ofstream ofs("MyFile.xls");

if(ofs.is_open())
{
    //~~> File is ready for output
}
Else
{
    //~~> File is NOT ready for output
}

編集

これも見たいかも?

トピック: FileInfo::IsReadOnly プロパティ

リンク: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.isreadonly.aspx#Y0

上記リンクより引用

現在のファイルが読み取り専用かどうかを決定する値を取得または設定します。

名前空間: System.IO

アセンブリ: mscorlib (mscorlib.dll 内)

于 2012-08-07T00:37:12.477 に答える