- PR -

C# Excelのセルを選択できないようにしたい

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 16:08
引用:

mimaさんの書き込み (2006-02-24 16:01) より:

やってみたんですが、変化ありません。。


うーん... orz
原因の絞込みがしたいですね...

気が向いたら、で良いのですが VSTO ではなく COM Interop で実験して頂けませんか?
コードをちょっと用意してみましたので、気が向いたら実験で使ってあげてください。

コード:

    private static void MosaMosaAA() {
        Excel.Application xlApplication = null;

        try {
            xlApplication = new Excel.Application();
            xlApplication.Visible = true;
            Excel.Workbooks xlBooks = null;

            try {
                xlBooks = xlApplication.Workbooks;
                Excel.Workbook xlBook = null;

                try {
                    xlBook = xlBooks.Open (
                        @"C:\MosaMosaAA.xls", System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                        System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value
                    );

                    Excel.Worksheet xlSheet = null;

                    try {
                        xlSheet = ((Excel.Worksheet)xlBook.ActiveSheet);
                        xlSheet.Protect (
                            "Password", System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value
                        );

                        xlSheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
                    } finally {
                        if (xlSheet != null) {
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
                        }
                    }
                } finally {
                    if (xlBook != null) {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
                    }
                }
            } finally {
                if (xlBooks != null) {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);
                }
            }
        } finally {
            if (xlApplication != null) {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication);
            }
        }
    }


Microsoft Excel 11.0 Object Library 版です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mima
会議室デビュー日: 2006/02/23
投稿数: 9
投稿日時: 2006-02-24 19:36
わざわざ、コードを用意してくださり、
ありがとうございました。

試してみたところ、正常に動きます。
で、私のほうのものも試したのですが、どうもCloseするとだめになるようです。。
Closeのコードを抜いたらうまくいってます。
どうにか、Closeの方法を考えます。

ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 19:54
引用:

mimaさんの書き込み (2006-02-24 19:36) より:

試してみたところ、正常に動きます。
で、私のほうのものも試したのですが、どうもCloseするとだめになるようです。。
Closeのコードを抜いたらうまくいってます。
どうにか、Closeの方法を考えます。


Close って WorkBook のですか?

引用:

ありがとうございました。


あれ? VSTO じゃなかったんですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mima
会議室デビュー日: 2006/02/23
投稿数: 9
投稿日時: 2006-02-24 20:14
>あれ? VSTO じゃなかったんですね。

・・・すみません、そのようですね。
人のコードを参考にしてたので、VSTOとCOM Interopっていうのが、
どう違うかがわかっていません。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-25 00:44
引用:

mimaさんの書き込み (2006-02-24 20:14) より:

・・・すみません、そのようですね。
人のコードを参考にしてたので、VSTOとCOM Interopっていうのが、
どう違うかがわかっていません。。


それはよろしいのですが、結局のところ何を Close したらまずいのかが純粋に知りたいのです。
これは私の興味本位で言っていることですが、手助けもできるかもしれません。
また後で同じことで悩んでいる方の手助けにもなると思いますので、
現状のコードを載せて頂くなり、ロジックを載せて頂くなりできないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mima
会議室デビュー日: 2006/02/23
投稿数: 9
投稿日時: 2006-03-02 20:16
すみません、返信いただいていたのに気づいていませんでした。。

以前じゃんぬねっとさんが書いていただいたのものでも、
最後に、
xlBook.Close(true,@"D:\MosaMosaAA.xls",Type.Missing);
をいれると、ダメでした。

抜粋して載せようと思ったのですが、
じゃんぬねっとさんと大まかなところは同じなので省略させてください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-02 20:55
引用:

mimaさんの書き込み (2006-03-02 20:16) より:

以前じゃんぬねっとさんが書いていただいたのものでも、
最後に、xlBook.Close(true,@"D:MosaMosaAA.xls",Type.Missing);
をいれると、ダメでした。


え?「セルを選択できないようにしたい」ということは WorkBook は表示している状態であるべきですよね。
勝手に Close してしまっては選択どころか何もできなくなりますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mima
会議室デビュー日: 2006/02/23
投稿数: 9
投稿日時: 2006-03-02 22:02
すみません、説明が悪かったようなのですが、
作成したエクセルファイルは一度閉じて、
そのファイルを使用するときに、一部のセルが選択できないようにしたいのです。

スキルアップ/キャリアアップ(JOB@IT)