C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

excelファイル名取得

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■103341 / inTopicNo.1)  excelファイル名取得
  
□投稿者/ screen (3回)-(2024/10/14(Mon) 17:31:26)

分類:[C#] 

C# Windows Form アプリケーション.NET Framework 

宜しくお願いします

パソコン上に開いているエクセルのファイル名をtextboxに表示しようとしています

using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;


namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        
        private void button2_Click_1(object sender, EventArgs e)
        {
            try
            {
                Excel.Application excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");

                if (excelApp.Workbooks.Count > 0)
                {
                    string filePath = excelApp.ActiveWorkbook.FullName;
                    string fileName = Path.GetFileName(filePath);

                    textBox1.Text = fileName;
                }
                else
                {
                    MessageBox.Show("開いているExcelファイルがありません。");
                }
            }
            catch (COMException)
            {
                MessageBox.Show("Excelが起動していません。");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"エラーが発生しました: {ex.Message}");
            }
        }

        
    }
}


上記のコードでボタンをおすと下記のインフォメーションが出ます

エラーが発生しました:型'System.__ComObject'のCOMオブジェクトをインターフェイス型'Microsoft.Office.Excel.Application'にキャストできません。
IID'{000285D5-0000-0000-C000-000000000046}'が指定されたインターフェイスのCOMコンポーネント上で
QueryInterface呼び出した時に次のエラーが発生したため、この操作に失敗しました:要素が見つかりません。
(HRESULTからの例外:0x8002802B(TYPE_E_ELEMENTNOTFOUND)).

上記の内容が分からずどう対処していいのか分かりませんので
教えて頂ければ幸いです




引用返信 編集キー/
■103342 / inTopicNo.2)  Re[1]: excelファイル名取得
□投稿者/ KOZ (471回)-(2024/10/14(Mon) 18:18:43)
No103341 (screen さん) に返信

nuget で NetOfficeFw.Excel をインストールして使ってみては?
https://www.nuget.org/packages/NetOfficeFw.Excel/


using System;
using System.IO;
using System.Windows.Forms;
using Excel = NetOffice.ExcelApi;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        using (Excel.Application excelApp = Excel.Application.GetActiveInstance())
        {
            if (excelApp != null)
            {
                if (excelApp.Workbooks.Count > 0)
                {
                    string filePath = excelApp.ActiveWorkbook.FullName;
                    string fileName = Path.GetFileName(filePath);

                    textBox1.Text = fileName;
                }
                else
                {
                    MessageBox.Show("開いているExcelファイルがありません。");
                }
            }
        }
    }
}

引用返信 編集キー/
■103345 / inTopicNo.3)  Re[2]: excelファイル名取得
□投稿者/ KOZ (473回)-(2024/10/14(Mon) 19:28:56)
> nuget で NetOfficeFw.Excel をインストールして使ってみては?
> https://www.nuget.org/packages/NetOfficeFw.Excel/

.NET Framework 4.6.2 より前のバージョンなら NetOffice.Excel かな。
https://www.nuget.org/packages/NetOffice.Excel
引用返信 編集キー/
■103348 / inTopicNo.4)  Re[1]: excelファイル名取得
□投稿者/ とくま (16回)-(2024/10/15(Tue) 09:03:22)
No103341 (screen さん) に返信
Microsoft Office 〜 Object Library とか
Microsoft Excel 〜 Object Library を参照したコードは、
ReleaseComObject を使ってない時点でアウトなんですよねぇ。

そのコードが書けないなら、最初から解放処理を必要としない
ライブラリを探したら?みたいな話になっちゃう。

ただ、そういったライブラリは、細かな操作まで話題が
及ぶと、不具合とか、未対応とかでつむ可能性もあって、
個人的には、ちゃんと勉強して Microsoft のライブラリを
利用するのを勧めてます。ただ、掲示板で質問する人で
そこまで勉強する人を見たことが無いので、そっちの
回答を付けることは滅多に無いですが。
引用返信 編集キー/
■103363 / inTopicNo.5)  Re[2]: excelファイル名取得
□投稿者/ screen (4回)-(2024/10/15(Tue) 22:23:51)
皆さんありがとうございます
エラー無く動きました
ありがとうございました
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ