- 題名: Excel(セル選択範囲等の影響で)実行プロセスが解放されない
- 日時: 2005/07/15 11:22:04
- ID: 11807
- この記事の返信元:
- (なし)
- この記事への返信:
- [11808] Re[1]: Excel(セル選択範囲等の影響で)実行プロセスが解放されない2005/07/15 11:26:05
- [11811] Re[1]: Excel(セル選択範囲等の影響で)実行プロセスが解放されない2005/07/15 13:24:21
- [11849] Re[1]: Excel(セル選択範囲等の影響で)実行プロセスが解放されない2005/07/18 16:46:38
- ツリーを表示
分類:[.NET]
Sample--------------------------------------------------------------------
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
Dim xlRange1 As Excel.Range, xlRange2 As Excel.Range
xlApp = New Excel.Application
xlApp.Visible = True
xlBooks = xlApp.Workbooks
xlBook = xlBooks.Open(xlFilePath)
xlSheets = xlBook.Worksheets
xlSheet = xlBook.Sheets(1)
'利用者数分の新規シート追加、ただし定型シートが1ページに存在済み
If max_sheet - 1 > 0 Then
xlSheet = xlBook.Sheets(1)
Dim xlNewSheet As Object = _
xlSheets.Add(Count:=max_sheet - 1, after:=xlSheet)
If System.Runtime.InteropServices.Marshal.IsComObject(xlNewSheet) Then
ReleaseCOM(xlNewSheet)
End If
End If
1ページめの定型シートをクリップボードにコピーする
If max_sheet > 1 Then
'複数利用者が存在するとき、1ページめの定型シートをクリップにコピーする
xlSheet = xlSheets(sheet_count)
'利用者毎にシート切り替え
xlSheets(sheet_count).Activate()
xlSheet.Application.Visible = True
xlRange1 = xlSheet.Range("A1", "N33")
xlRange1.Copy()
End If
'2ページめ以降に定型シートをクリップボードからペーストする
For sheet_count = 2 To max_sheet
xlSheet = xlSheets(sheet_count)
xlSheet.Cells(5, 9) = "H 17" '和暦年代入(文字型)
xlSheet.Cells(5, 12) = 7 '月代入(数値型)
'利用者毎にシート切り替え
xlSheets(sheet_count).Activate()
xlSheet.Application.Visible = True
xlRange2 = xlSheet.Range("A1", "N33")
xlRange2.PasteSpecial(Excel.XlPasteType.xlPasteAll)
'ペースト後、列幅を定型シートと同じにする
For sheet_column = CInt(Asc("A")) To CInt(Asc("N"))
sheet_point = Chr(sheet_column) & ":" & Chr(sheet_column)
xlSheet.Columns(sheet_point).ColumnWidth = _
xlSheets(1).Columns(sheet_point).ColumnWidth
Next
'ペースト後、行幅を定型シートと同じにする
For sheet_row = 1 To 33
sheet_point = sheet_row.ToString & ":" & sheet_row.ToString
xlSheet.Rows(sheet_point).RowHeight = _
xlSheets(1).rows(sheet_point).RowHeight
Next
Next
xlApp.DisplayAlerts = False
xlBook.SaveAs(xlFilePath)
ReleaseCOM(xlRange2)
ReleaseCOM(xlRange1)
ReleaseCOM(xlSheet)
ReleaseCOM(xlSheets)
xlBook.Close(False)
ReleaseCOM(xlBook)
xlBooks.Close()
ReleaseCOM(xlBooks)
xlApp.Quit()
ReleaseCOM(xlApp)
System.Threading.Thread.Sleep(5000)
Public Sub ReleaseCOM(ByVal o As Object) 'COMプロセス解放
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
Catch
Finally
o = Nothing
End Try
End Sub
-------------------------------------------------------------------------
質問
追加するすべてのシートに先頭シート内容を(行・列幅含めて)貼り付け、和暦年月も
代入したい。上記サンプル、セル選択範囲等の影響で、Excel実行プロセスが解放される
方策があれば教えてください。