■94081 / inTopicNo.21) |
Re[18]: VBより今開いてるExcelのファイル名の取得 |
□投稿者/ 魔界の仮面弁士 (2605回)-(2020/03/11(Wed) 17:06:58)
|
2020/03/11(Wed) 17:08:56 編集(投稿者)
■No94079 (さき さん) に返信 > ファイル名のみを抽出、
フルパスからファイル名のみを抽出するには、そのパスを System.IO.Path.GetFileNameWithoutExtension メソッドあるいは System.IO.Path.GetFileName メソッドに渡してやれば OK です。
Excel で開いていたファイルが OneDrive 上にあった場合、先のコードにて 『https://d.docs.live.net/〜〜/Example.xlsx』などの文字列が 列挙される可能性がありますが、この場合においても、 得られたパスを上記メソッドに引き渡すことで、 『Example』や『Example.xlsx』といったファイル名を得られます。
> その内容を別途読み込みもし活用もしたかったのです。
CSV ファイル等のテキストファイルであれば、 Excel 本体が無くても読み込めますが、 Excel のワークブック ファイルの内容を読み取ろうとするのであれば、 Excel 本体(あるいは同種のライブラリ)を使う必要があるでしょう。
各セルの値を読みだす方法はいろいろあります。本スレッドの質問内容である 『VBより今開いてるExcelのファイル名の取得』から外れてしまうことになるので、 具体的なソースコードの記述は避けますが、たとえば Excel を使ってアクセスするなら、 Worksheet オブジェクトの Range プロパティや Cells プロパティを通じて読みだせます。
ClosedXML ライブラリを使うなら、IXLWorksheet の Cells プロパティを使えます。 EPPlus ライブラリを使う場合は、ExcelWorksheet の Cells プロパティを使えます。 あるいは ReoGrid のメモリワークブックを通じて読み取ることもできますね。 https://reogrid.net/jp/document/
> 開いてるExcelをVBから閉じたいとは、上で抽出もしたそのExcelのことなのです。
一つの Excel 上で、複数のファイルが開かれていた場合において、 No94073 の (1)〜(6) のうち、どの動作を望んでいるのでしょうか?
> 閉じもせず読み込みもしょうとすれば、「System.IO.IOException 別のプロセスで使用されているため・・」とのエラーにもなるからです。
現在どういう処理を行っているのか分からないので、その点については何とも言えません。
たとえば Excel で開かれている最中のファイルに対して Using stm As New FileStream(excelFilePath, FileMode.Open) ' : ' : End Using で読み込もうとした場合は、御指摘のものと同様の 『System.IO.IOException: '別のプロセスで使用されているため、…'』の例外になると思います。
しかし、Excel で開いている最中のファイルだったとしても、FileShare.ReadWrite を指定して Using stm As New FileStream(excelFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ' : ' : End Using などとした場合は、System.IO.IOException の例外にはなりませんでした。 https://dobon.net/vb/dotnet/file/fileshare.html#section4
|
|