62

Excelスプレッドシートに写真を追加しようとしていますが、次のエラーが発生し続けますか?

エラー1相互運用機能タイプ'Microsoft.Office.Interop.Excel.ApplicationClass'を埋め込むことができません。代わりに、該当するインターフェースを使用してください。

ApplicationClass(); 以下のコード行で赤の下線が引かれています。

xlApp = new Excel.ApplicationClass();

誰かが私にこれを修正する方法を教えてもらえますか?

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;

private void btnWriteSpreedSheet_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass(); //This is where the problem is??????
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //add some text 
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
            xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";

            xlWorkSheet.Shapes.AddPicture("C:\\csharp-xl-picture.JPG", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 50, 50, 300, 45);

              xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlApp);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkSheet);

            MessageBox.Show ("File created !");
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 

    }
4

3 に答える 3

209

プロジェクトで、[参照]を展開し、MicrosoftOffice相互運用機能の参照を見つけます。それを右クリックしてプロパティを選択し、[埋め込み相互運用タイプ]をに変更しfalseます。

于 2012-07-27T13:32:28.090 に答える
71

MSDNのブログ投稿で説明されているように、「埋め込み相互運用機能タイプ」を無効にする代わりに、変更することもできます。

xlApp = new Excel.ApplicationClass();

の中へ

xlApp = new Excel.Application();

インターフェースですがExcel.Application、この他のSO回答で説明されているように、CoClass属性で装飾されているため、インスタンス化できます:https ://stackoverflow.com/a/11039870/501196

このアプローチ(埋め込み相互運用タイプ= true)を使用すると、プロジェクトでデプロイする必要のあるファイルが少なくなり、埋め込みタイプには、アプリケーションが実際に使用しているメソッドとタイプのみが含まれるという利点があります。外部相互運用機能アセンブリを使用する場合、参照されるライブラリによって公開されるすべてのタイプとメソッドをそこにインポートします。

于 2013-05-13T15:33:27.437 に答える
-2

Microsoft.Office.Interop.Excelリファレンスを見つけて右クリックし、「EmbedInteropTypes」の状態がtrueの場合は偽に変更します。

于 2014-06-25T08:13:38.700 に答える