|
分類:[C#]
こんにちは、毎日暑い日が続きますが、体調を崩さない様にして
頑張ってくださいね。
今日は
1)指定したエクセルシートをアクティブにする方法
2)エクセルのセルに文字をセットする方法
この2点にについてお伺いさせて下さい。
【質問1】
ソース中程に「ctrlSheet.Activate();」と記述したのですが、
「警告1 メソッド
'Microsoft.Office.Interop.Excel._Worksheet.Activate()' とメソッド以外の’Microsoft.Office.Interop.Excel.DocEvents_Event.Activate' 間があいまいです。
メソッド グループを使用しています。」と出てしまいます。
なぜ警告が出るのでしょうか?
また、正しい記述はどの様なものでしょうか?
【質問2】
ソース内のセルに文字列を入力する方法について、4パターンを自分なりに考え記述
してみました。
それぞれ、セルに文字はセットされるのですが、Excelアプリケーションの終了と解放を
行っても、プロセスに"EXCEL.EXE"が残ってしまいます。
次の3パターンで文字列をセットしてもプロセスに残らない様にするには
どうすればよいのでしょうか?
・Cellsを使ってRangeを取得した後、文字列をセット
・get_Rangeを使って直接文字列をセット
・Cellsを使って直接文字列をセット
(ソース)
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Excel.Application ExcelApp = null;
Excel.Workbooks ExcelBooks = null;
Excel.Sheets ExcelSheets = null;
Excel.Workbook CtrlBook = null;
Excel.Worksheet ctrlSheet = null;
Excel.Range ctrlRange = null;
//★【Excelアプリケーション設定】
ExcelApp = new Excel.Application();
ExcelApp.DisplayAlerts = false;
ExcelApp.Visible = true;
//★【ブック設定】
ExcelBooks = ExcelApp.Workbooks;
CtrlBook = ExcelBooks.Open("既存のエクセルファイルのパス",
0,
false,
1,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value
);
//★【シート設定】
ExcelSheets = CtrlBook.Worksheets;
ctrlSheet = ExcelSheets["Default"];
//[×]シートをアクティブにする
ctrlSheet.Activate();
//★【セル操作】
int Pattern = 1; // ←パターン(0〜3)に変更して検証してみて下さい
switch (Pattern)
{
case 0:
//[○]get_Rangeを使ってRangeを取得した後、文字列をセット
ctrlRange = ctrlSheet.get_Range("A2", Missing.Value);
ctrlRange.Value = "get_Range";
break;
case 1:
//[×]Cellsを使ってRangeを取得した後、文字列をセット
ctrlRange = ctrlSheet.Cells[1, 1];
ctrlRange.Value = "Cells";
break;
case 2:
//[×]get_Rangeを使って直接文字列をセット
ctrlSheet.get_Range("A4", Missing.Value).Value = "直)Range";
break;
case 3:
//[×]Cellsを使って直接文字列をセット
ctrlSheet.Cells[3, 1].Value = "直)Cels";
break;
}
//★【レンジの解放】
if (Pattern == 0 || Pattern == 1)
{
Marshal.ReleaseComObject(ctrlRange);
ctrlRange = null;
}
//★【シート解放】
Marshal.ReleaseComObject(ctrlSheet);
ctrlSheet = null;
Marshal.ReleaseComObject(ExcelSheets);
ExcelSheets = null;
//★【ブックの解放】
Marshal.ReleaseComObject(CtrlBook);
CtrlBook = null;
Marshal.ReleaseComObject(ExcelBooks);
ExcelBooks = null;
//★【Excelアプリケーションの解放】
ExcelApp.Quit();
Marshal.ReleaseComObject(ExcelApp);
ExcelApp = null;
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|