- - PR -
【C#】Excelファイルの起動
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-01 10:53
初歩的な質問で申し訳ありませんが、どうか宜しくお願い致します。
エクセルでテンプレート(フォーマット)を作成し、 そのエクセルファイルにCSVの情報を貼り付けたいのですが、 自分で作成したその既存のエクセルファイルをどうやって起動させたらよいのかがわかりません。 新規にExcelを起動させる方法はわかったのですが。 Excel.Application app; Excel.Workbooks books; Excel._Workbook book; Excel.Application app = new Excel.Application(); Excel.Workbooks books = (Excel.Workbooks)app.Workbooks; books.OpenText("C:\\xxxx\\yyyy\\zzzz.csv", Excel.XlPlatform.xlWindows, 1, Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote, false, false, false, true,false,false, Missing.Value,Missing.Value, Missing.Value, Missing.Value,Missing.Value); book = app.ActiveWorkbook; book.SaveAs("C:\\xxxx\\yyyy\\zzzz.csv", Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value,Missing.Value,Missing.Value, Missing.Value); book.Close(false, Missing.Value, Missing.Value); app.Quit(); (参照:http://support.microsoft.com/default.aspx?scid=KB;JA;306023) ファイル名を指定して起動させたりするにはどうすればよいのでしょうか。 宜しくお願い致します。 | ||||
|
投稿日時: 2003-12-01 11:31
拡張子にアプリケーションが関連づけされている場合は
System.Diagnostics.Process.Start あたりで起動できると思います。 [参考] http://homepage3.nifty.com/dotnetfan/console/console16.html | ||||
|
投稿日時: 2003-12-01 12:21
あれ?そっちですか?アプリケーションの中で、テンプレートファイルを読み込んで、そこにCSVファイルの内容を転記し、保存して終了する、だと思ったのですが。。。 | ||||
|
投稿日時: 2003-12-01 12:57
>>小野@EACさん
ありがとうございます。 Excelファイルを無事起動することができました。 >>Jittaさん 個人的には 1.Excelで元となるシート(.xls)を作っておいて、 それにCSVデータを貼り付けて別名で保存する。 2.テンプレートファイル(.xlt)を作っておいて、 それにデータを貼り付けて.xlsで保存する。 という2通りの方法を考えていたんですが、どちらが良いんでしょうか。 どういう違いがあるのでしょうか。Excelのことが全然わかってないので 違いがよくわかりません。 テンプレートファイルを読み込む方法だと、どのようにすればよいのでしょうか。 宜しくお願い致します。 | ||||
|
投稿日時: 2003-12-01 13:44
どのようにエクセルを起動するか、どこで実行されるか、どのように実行されるか、で違ってきます。 まず、CreateObjectですが、これは文字通り「オブジェクトを作る」ので、複数回コールすると、コールした数だけエクセルが起動します。 これに対して、エクスプローラでエクセルファイルをダブルクリックすると、デフォルトではDDEという機能により、現在起動中のエクセルに対してファイルの読み込みを通知します。つまり、エクセルは1つしか起動しません。 1つのエクセルでは、たとえ違うディレクトリにあっても同じ名前のファイルを開くことはできません。複数のエクセルで同じファイルを開くことはできますが、先に開いた方がロックをかけるので、同時に編集することはできません。 ここで問題ですが、作成しようとしているアプリケーションは、Windowsアプリケーションでしょうか?それとも、ASP.NETを利用した、Webアプリケーションでしょうか。 Windowsアプリケーションならば、xlsファイルを開くでかまわないでしょう。しかし、Webアプリケーションならば、テンプレートファイルにするべきです。テンプレートファイルならば、開いたファイルは全て「違う名前」の「別ファイル」になるからです。 テンプレートファイルの開き方も、普通のエクセルファイルの開き方も同じで、bookのopenメソッド(OpenTextメソッドではない)で開きます。 | ||||
|
投稿日時: 2003-12-01 13:50
追加の質問です。宜しくお願いします。
既に起動しているExcelへの参照を得る為に下記のようにしたのですが、 Excel.Application app = (Excel.Application)Marshal.GetActiveObject(pID); の部分で 'System.Runtime.InteropServices.COMException'というエラーが出てしまいます。 string pID = "Excel.Application"; Excel.Application app = (Excel.Application)Marshal.GetActiveObject(pID); Excel._Workbook book = app.ActiveWorkbook; Excel._Worksheet sheet = (Excel._Worksheet)book.ActiveSheet; Excel.Range range = sheet.get_Range("A1", Missing.Value); range.Value = "xxxx"; 本を見て書いてみたんですが、これではダメなんでしょうか。。。 | ||||
|
投稿日時: 2003-12-01 15:00
Jittaさん
ご丁寧な回答ありがとうございます。 作成しているのはWindowsアプリです。 OpenメソッドっていうのはExcel.WorkbooksのOpenメソッドですよね。 Openメソッドを使う為にはExcelインスタンスへの参照を取得しないと 始まらないと思うんですが、それが上記のように上手くいきません。 私の考えている手順としては 1.Process.StartでテンプレートとなるExcelの起動 2.その起動しているExcelへの参照を取得する 3.Openメソッドを使ってCSVファイルをブック内のシートに読み込む 4.Excelを別名で保存 これで大丈夫でしょうか? | ||||
|
投稿日時: 2003-12-01 15:19
すみません。勘違いしてました。
下の方法でうまくいきました。ありがとうございます。 Excel.Application app = new Excel.Application(); Excel.Workbooks books = (Excel.Workbooks)app.Workbooks; //ブックにテンプレートを読み込む Excel._Workbook book = books.Open("xxxx\yyyy\zzzz.xls", Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value); //アクティブなシートを取得 Excel._Worksheet sheet = (Excel._Worksheet)book.ActiveSheet; //セルに値を貼り付け Excel.Range range = sheet.get_Range("A1", Missing.Value); range.Value = "XXXX"; |