• 締切済み

C#でExcelを起動したい

http://jeanne.wankuma.com/tips/csharp/excel/execute.html を参考に C#コードに // Excel.Application の新しいインスタンスを生成する Excel.Application xlApplication = new Excel.Application(); // Excel を表示する xlApplication.Visible = true; // 1000 ミリ秒 (1秒) 待機する System.Threading.Thread.Sleep(1000); // Excel を終了する xlApplication.Quit(); // COM オブジェクトの参照カウントを解放する (正しくは COM オブジェクトの参照カウントを解放する を参照) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication); を追加したのですが エラー CS0246: 型または名前空間名 'Excel' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 が出てしまいます。 以下の様にしているのですが、何のusingを追加すればよいのでしょうか? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testproject { public partial class testproject: Form { public testproject() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Excel.Application の新しいインスタンスを生成する Excel.Application xlApplication = new Excel.Application(); // Excel を表示する xlApplication.Visible = true; // 1000 ミリ秒 (1秒) 待機する System.Threading.Thread.Sleep(1000); // Excel を終了する xlApplication.Quit(); // COM オブジェクトの参照カウントを解放する (正しくは COM オブジェクトの参照カウントを解放する を参照) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication); ImageViewer imgViewer = new ImageViewer(); imgViewer.Show();

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

リンクのサイトにキチンと書かれてますよ。 該当のページではなく、リンクをクリックしなければなりませんが、難解なリンク先ではありません。 該当ページに下記のようなメニューがありますので、Excelの個所をクリックしてください。 >トップ >サンプル >Visual C# .NET >Excel >Excel を起動または終了する プログラムコードをコピペする前に、解説等をきっちりと読み込んで理解しましょう、という意味を込めて、ご自身で確認して貰うため回答そのものは書きません。

関連するQ&A

  • EXCELファイルからの値取得に関して

    環境:Visual Basic 2008 教えて下さい。 画面上から2つのEXCELファイルを指定し、1回の処理でその2つの EXCELからそれぞれ値を取得したいと考えています。 その為、以下のような記述をしましたが、2回目の値取得のところで "オブジェクト参照がオブジェクト インスタンスに設定されていません。" というエラーメッセージとなってしまいます。 1つのファイルから取得する事は経験ありましたが、同時に2回は初めてで ある為、記述方法が正しいのか、、、 どのように記述したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 《記述内容》 'EXCELファイルを開く Dim xlFilePath As String = ofd1.FileName '起動時の処理 Dim xlApp As Object xlApp = CreateObject("Excel.Application") Dim xlBooks As Object = xlApp.Workbooks Dim xlBook As Object = xlBooks.Open(xlFilePath) '現シート数 Dim S_COUNT As Integer = xlBook.Worksheets.Count Dim xlSheets As Object = xlBook.Worksheets Dim xlSheet As Object = CType(xlSheets.Item(1), Object) '現シート数 S_COUNT = xlBook.Worksheets.Count Dim R_名称 As String R_名称 = "" R_名称 = xlSheet.Cells(1, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect() 'のEXCELファイルを開く Dim xlFilePath2 As String = ofd2.FileName '起動時の処理 Dim xlApp2 As Object xlApp2 = CreateObject("Excel.Application") Dim xlBooks2 As Object = xlApp2.Workbooks Dim xlBook2 As Object = xlBooks2.Open(xlFilePath2) '現シート数 Dim S_COUNT2 As Integer = xlBook2.Worksheets.Count Dim xlSheets2 As Object = xlBook2.Worksheets Dim xlSheet2 As Object = CType(xlSheets2.Item(1), Object) '現シート数 S_COUNT = xlBook2.Worksheets.Count Dim R_番号 As String R_番号 = "" R_番号 = xlSheet2.Cells(I_COUNT2, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect()

  • vb2010で既存のエクセルを開くには?

    初心者です。 VB6.0からvb2010への乗り換えをしていますが、以下のコードでxlBooks = xlApplication.Workbooksのところで止まってしまいます。 参考ページをいろいろ見ましたが原因が分かりません。 実行する前のコードに波線はでません。 CreateObjectでやっても結果は同じでworkbookを作るところでエラーとなります。 エラーは「タイプライブラリのロードに失敗」ですが、であればDim xlApplication As New Excel.Application()かCreateObjectで止まるように思いますが、理由がわかりません。 WinXP, Office2003, .Net 4.0. vb2010Expressの組み合わせで全てアップデート済み、参照設定はExcel 11.0 Object Libraryです。 どなたかご教示頂ければ幸甚です。 Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\Hoge.xls") - - System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication) End Sub End Class

  • C#でのEXCEL出力に関して

    教えて下さい。 C#でEXCELシートにデータを出力していますが、その際に以下のような記述をした場合、 EXCELファイルは作成されるものの、そのファイルをダブルクリックで開こうとすると、 EXCELの枠だけ表示され、中身のシートが表示されない現象となってしまいます。 それらしきオブジェクトはすべて開放しているつもりですが、その事象を解決できません。 どこがおかしいか教えて頂きたいと思います。 記述に過不足あればご指摘下さい。 尚、環境は、WindowsXP Office2000-EXCEL です。 《記述内容》 ////////////////////////////////// //ここからエクセルシートへの転記// ////////////////////////////////// Excel.Application objExcel = null; Excel.Workbooks objBooks = null; Excel.Workbook objBook = null; Excel.Worksheet sheet = null; Excel.Range range1 = null; Excel.Range range2 = null; Excel.Range range3 = null; //ExcelのCOMオブジェクトの生成 objExcel = new Excel.Application(); //Excelを表示する設定 //objExcel.Visible = isVisible; //ワークブックの集合体取得 objBooks = objExcel.Workbooks; //ブックの新規作成 objBook = objBooks.Add(Missing.Value); //シートを取得 sheet = (Excel.Worksheet)objBook.Sheets.get_Item(1); //Rangeを取得 range1 = (Excel.Range)sheet.Cells[1, 1]; range2 = (Excel.Range)sheet.Cells[1, 2]; //文字列を設定 //ヘッダ書き込み range1.Value = "仕入先名"; range2.Value = "図面番号"; //エクセルシート側の行数カウント変数 int rcount = 2; //データテーブル側の行数カウント変数 int tcount = 0; for (tcount = 0; tcount < mst_cnt;tcount++ ) { range1 = (Excel.Range)sheet.Cells[rcount, 1]; range2 = (Excel.Range)sheet.Cells[rcount, 2]; range1.Value = 仕入先名[tcount]; range2.Value = 図面番号[tcount]; rcount++; } //エクセルシート削除 DeleteFile(@"c:\\" + h_no + ".xls"); //エクセルシート生成 objBook.SaveAs( "c:\\" + h_no + ".xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 0, Missing.Value, Missing.Value, Missing.Value, Missing.Value ); //COMオブジェクト解放 Marshal.ReleaseComObject(range1); Marshal.ReleaseComObject(range2); //COMオブジェクトの開放(必須) Marshal.ReleaseComObject(objBook); objBook = null; Marshal.ReleaseComObject(sheet); sheet = null; Marshal.ReleaseComObject(objBooks); objBooks = null; //System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel); objExcel.Quit(); Marshal.ReleaseComObject(objExcel); objExcel = null; //objExcel.Quit(); return; } よろしくお願いします。

  • シートのコピーでプロセスが残ってしまう

    シートのコピーでプロセスが残ってしまう vb2008よりエクセルを起動し、シートを同一のブック内でコピーしようと思うのですが、 下記コードだとシートのコピーはできるのですがリソースが解放できず、プロセスが残ってしまいます。 wsh.Copy(wshh) の部分を wsh.Copy()にして違うブックにコピーすると問題無い。 Excel2003以降の複数のバージョンに対応させるため、CreateObjectを使用しています。 この場合、wsh.copy の部分はどのように記述すれば良いのでしょうか? わかりやすくするため例外等のコードは省いています。 Dim app As Object Dim wbs As Object Dim wb As Object Dim wshs As Object Dim wsh As Object Dim wshh As Object app = CreateObject("Excel.Application") wbs = app.Workbooks wb = wbs.Open("c:\hoge.xls") wshs = wb.Worksheets wsh = wshs.item(1) wshh = wshs.item(1) wsh.Copy(wshh) wb.Close() wbs.close() app.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(wshh) System.Runtime.InteropServices.Marshal.ReleaseComObject(wsh) System.Runtime.InteropServices.Marshal.ReleaseComObject(wshs) System.Runtime.InteropServices.Marshal.ReleaseComObject(wb) System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs) System.Runtime.InteropServices.Marshal.ReleaseComObject(app) wshh = Nothing wsh = Nothing wshs = Nothing wb = Nothing wbs = Nothing app = Nothing

  • VS2003.NET(C#)からのEXCELのプロセス解放

    ご存知の方がいたら教えて下さい。 【動作環境】 OS:WINDOWS XP(SP2) VisualStadio20003.NET(C#) EXCEL2003 VS.NETのプロジェクトメニューの参照の追加で「Microsoft Excel 11.0 Object Library」を追加してあります。 セルの更新を行った場合に、プロセスが解放されずに残ってしまいます。 (セルの更新を行っている行を実行しない場合にはプロセスは解放されます) いろいろ調べてはみたのですが、どうも原因がつかめません。 ご存知の方がいましたら教えてください。 (以下ソースコードになります) Excel.Application app; Excel.Workbook book; Excel.Worksheet sheet; Excel.Workbooks books; Excel.Sheets sheets; Excel.Range range; app = new Excel.Application(); books = app.Workbooks; book = books.Add("c:\\inetpub\\wwwroot\\ExcelData.xls"); sheets = book.Worksheets; sheet = (Excel.Worksheet)sheets["Sheet1"]; range = sheet.get_Range("A1","A1"); range.Value2 = "テストです"; // 解放 Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(book); Marshal.ReleaseComObject(books); // Excel終了 app.Quit(); Marshal.ReleaseComObject(app); よろしくお願いします。

  • VB2005でのEXCELマクロ操作

    お世話になっております。 VB2005から指定したEXCELファイルを開き、標準モジュールにあるマクロを起動したいと考えております。 調べたところ、Runメソッドを使用するようですが、マクロファイルを開くところで停止してしまいます。 以下にソースを書きましたので、アドバイス頂きたいと思います。 Dim n As Short Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim Fname As String = "C:\Documents and Settings\hoge\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS" '読み込むファイル Try xlApp = New Excel.Application() xlBooks = xlApp.Workbooks For n = 0 To fil.Length - 1 xlBook = xlBooks.Open(fil(n)) xlSheets = xlBook.Worksheets xlApp.Run("'" & Fname & "'!module2.DB処理", fil(n)) '引数をもつ処理の呼び出し方法 '1000ミリ秒(1秒)待機する System.Threading.Thread.Sleep(1000) ' Excel ブックを保存する xlApp.DisplayAlerts = False xlBook.Save() Next ' Microsoft Excel を終了する xlApp.Quit() Finally If Not xlSheet Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) End If If Not xlSheets Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) End If If Not xlBook Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) End If If Not xlBooks Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) End If If Not xlApp Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) End If End Try

  • ASP.NET 2.0(VB)からEXCELオブジェクトを起動・操作し

    ASP.NET 2.0(VB)からEXCELオブジェクトを起動・操作し、クライアントにDLさせる仕組みを実装しようとしています。 DCOMコンポーネントにASP.NETユーザーを権限追加し、以下のコードでDLさせることはできたのですが、イベント発行からDLボックスが表示されるまでのレスポンスが60秒掛かってしまっています。 サーバーのタスクを監視してると (1)でEXCELプロセス起動までは、1~2秒後 (2)でファイル作成されるのが、60~70秒後 DCOMによるオートメーションではこんなに時間掛かるものなのでしょうか? デバッグ環境(XP)では、数秒で動作できているので オートメーション、もしくはActiveDirectoryに因果しているのかと思っています。 レスポンスを早くするなにか解決策などありましたらご教授願います。 また、以下のコードではリソースが解放されずにリークが発生してしまっています。 こちらもなにか解決案ありましたらよろしくお願いします。 [サーバー環境] OS:Server 2003、IIS:6.0、Excel 2002 Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button.Click Dim objExApp As Excel.Application objExApp=Server.CreateObject("Excel.Application")    '<----(1) objExApp.Application.DisplayAlerts=False Dim objExBooks As Excel.Workbooks objExBooks=objExApp.Workbooks Dim objExBook As Excel.Workbook objExBook=objExBooks.Add Dim objExSheets As Excel.Sheets objExSheets=objExBook.Sheets Dim objExSheet As Excel.Worksheet objExSheet=objExSheets(1) Dim objExCell As Excel.Range objExCell=objExSheet.Cells objExCell(1, 1)="EXCEL操作" objExBook.SaveAs(Server.MapPath("ファイル名"))    '<----(2) If Not objExCell Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objExCell) objExCell=Nothing End If If Not objExSheet Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objExSheet) objExSheet=Nothing End If If Not objExSheets Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objExSheets) objExSheets=Nothing End If If Not objExBook Is Nothing Then objExBook.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(objExBook) objExBook=Nothing End If If Not objExBooks Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objExBooks) objExBooks=Nothing End If If Not objExApp Is Nothing Then objExApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(objExApp) objExApp=Nothing End If GC.Collect() System.Windows.Forms.Application.DoEvents() Response.Redirect("ページ名") End Sub

  • .NET2008 VC# から Excel2003 の Comオブジェクトが開放されない

    こんにちは。 Visual C# .NET 2008 から、Excel2003をCOMオブジェクトとして操作しようとしたのですが、プロセスが解放されずに残っています。 (同じような質問や情報がWEB上に沢山あったのですが、いくら単純化しても解決しないため、質問しました。) 以下、ソースの抜粋です。 ----------------------------------------------- using Excel = Microsoft.Office.Interop.Excel; ~~~~ 省略 ~~~~ 01: Excel.Application exApp = null; 02: Excel.Workbooks workbooks = null; 03: 04: exApp = new Excel.Application(); *1 05: workbooks = exApp.Workbooks; 06: 07: workbooks.Close(); *2 08: exApp.Quit(); 09: 10: System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); 11: System.Runtime.InteropServices.Marshal.ReleaseComObject(exApp); ~~~~省略~~~~ *1 で、EXCEL.EXE プロセスが起動しています。 *2 は追加したり消したりしてみましたが、結果は変わりませんでした。 05,07,10行目を削除すると、EXCEL.EXE プロセスは11行目で終了しました。 なお、関係あるのか分かりませんが、 OfficeLiveSignIn.exe がEXCEL.EXEプロセスと同時に立ち上がりますが、 11行目で終了します(EXCEL.EXEのみ残る。) 01行目からデバッグ実行しています。 単純なソースで恐縮ですが、初歩的な躓きなだけに、かなり困ってます。 よろしくお願いいたします。 環境:VS 2008.NET C# EXCEL 2003

  • VB2005でのEXCEL処理で警告が消えません

    いつもお世話になっております。 私はVB2005入門者です。 EXCELで処理を行っております。 処理事態は完了するのですが 下記のコードの後半部の警告がどうやっても潰せないので 修正方法のアドバイスをお願いします。 Dim xlApp As Excel.Application Dim xlBooks As Excel.Workbooks Dim xlBook As Excel.Workbook Dim xlSheets As Excel.Sheets Dim xlSheet As Excel.Worksheet ' 必要な変数は Try の外で宣言する Try ' 必要な変数は Try の中でインスタンス化する xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C\:hoge0.xls") xlSheets = xlBook.Worksheets xlBook.Worksheets(1).Range("F4") = shhoge(0) xlBook.Worksheets(1).Range("I4") = shhoge(0) xlBook.Worksheets(1).Range("K4") = shhoge(5) xlBook.Worksheets(1).Range("M5") = shhoge(0) xlBook.Worksheets(1).Range("O4") = shhoge(1) xlBook.Worksheets(1).Range("R4") = shhoge(1) xlBook.Worksheets(1).Range("U5") = shhoge(1) xlBook.Worksheets(1).Range("T5") = shhoge(2) xlBook.Worksheets(1).Range("W5") = shhoge(3) xlBook.Worksheets(1).Range("X5") = shhoge(4) ' シートのカウントが 1 より大きければシートを削除する If xlSheets.Count > 1 Then ' Display アラートを消す xlApp.DisplayAlerts = False ' シートを削除する xlSheet = DirectCast(xlSheets(2), Excel.Worksheet) xlSheet.Delete() End If ' 1000 ミリ秒 (1秒) 待機する System.Threading.Thread.Sleep(1000) ' Excel ブックを保存する xlApp.DisplayAlerts = False xlBook.SaveAs("C:\hoge.xls") ' Microsoft Excel を終了する xlApp.Quit() Finally ' 参照したオブジェクトをすべて解放する If Not xlSheet Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) End If If Not xlSheets Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) End If If Not xlBook Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) End If If Not xlBooks Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) End If If Not xlApp Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) End If End Try Form2.Show() End Sub

  • VB2008からのEXCEL出力に関して

    VB2008にて開発を行っていますが、その中で、あるデータをEXCELに出力するような 処理を行いたいと考えています。 その際に、ホームページ等で検索を行いながら、以下のような記述をしましたが、やはり 中身を完全に理解していない為、あまり応用がききません。。。 以下の内容で、1シート目までの出力は正しく行われ、問題なくプロセスも残らずに終了 する事ができました。 ただし、指定の行(10行目)までデータが書き込まれたら、1シートを追加して 次のシートに記載するというようなループ処理を考えていますが、どのように記述したら 良いでしょうか。。。。 どこまでをループ対象にすれば良いかが。。。 教えて下さい。 よろしくお願いします。 《記述内容》 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\order.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) xlApp.Visible = True ' 確認のためExcelのウィンドウを表示する Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim x, y As Integer x = 0 y = 0 'データをEXCELファイルに書き出し Dim xlRange As Excel.Range Dim strDat(14, 14) As Object xlRange = xlSheet.Range("A17:O31") 'データの入力セル範囲 Do While x < count strDat(x, 1) = h_date(x).IN_指示納期 strDat(x, 2) = h_date(x).IN_発注番号 strDat(x, 5) = h_date(x).IN_品目名称 strDat(x, 8) = h_date(x).IN_メーカー名 strDat(x, 9) = h_date(x).IN_数量 strDat(x, 10) = h_date(x).IN_単価 strDat(x, 11) = h_date(x).IN_金額 strDat(x, 12) = h_date(x).IN_備考 xlRange.Value = strDat 'セルへデータの入力 x = x + 1 Loop 'System.Runtime.InteropServices.Marshal.ReleaseComObject(strDat) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) xlBooks.Close() xlApp.DisplayAlerts = False xlApp.Quit() ' COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) ' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

専門家に質問してみよう