[dba-VB] C# Excel automation

jwcolby jwcolby at colbyconsulting.com
Mon May 9 12:22:59 CDT 2011


Is this VBA or VB.Net?

John W. Colby
www.ColbyConsulting.com

On 5/9/2011 1:02 PM, Dan Waters wrote:
> Hi John,
>
> I've had this issue too.  It's almost certainly that somewhere in your code
> you are missing an Excel object qualifier.  Also take a look at the sequence
> of opening and closing the Workbook and the instance of Excel.
>
> Another issue is that if the PC already has Excel open, then the workbook
> you create will be contained within the instance of Excel, and it turns out
> that it's about impossible for your code to loop through the different
> workbooks.  The best plan is probably to look for an instance of Excel and
> close it with save = true.  Then open your workbook and you should be fine.
> You'll need to tell your users what's going to happen (and maybe ask by
> message if they want to continue), and/or put up a message if you need to
> close/save an already open instance of Excel.
>
> See this code:
>
> '-----------------
> Private Sub FormatSpreadsheetDemo(stgPath As String)
>
>      Dim objExcel As Object
>      Dim objWorkbook As Object
> '    Dim objExcel As Excel.Application  '-- TEST
> '    Dim objWorkbook As Excel.Workbook  '-- TEST
>
>      If IsNull(stgPath) Or stgPath = "" Then Exit Sub
>
>      Set objExcel = CreateObject("Excel.Application")
>
>      '-- for troubleshooting
> '    objExcel.Visible = true  '-- TEST
> '    objExcel.ActiveWindow.WindowState = xlMaximized  '-- TEST
>
>      Set objWorkbook = objExcel.Workbooks.Open(stgPath)
>
>      '-- Format
>      objExcel.Rows("1:1").Select
>      objExcel.Selection.Font.Bold = True
>      objExcel.Cells.Select
>      objExcel.Selection.Font.Name = "Tahoma"
>      objExcel.Selection.Font.Size = 10
>      objExcel.Cells.EntireColumn.AutoFit
>
>      '-- Freeze rows
>      If InStr(stgPath, "Backups") = 0 Then
>          objExcel.Range("A2").Select
>      Else
>          objExcel.Range("B2").Select
>      End If
>      objExcel.ActiveWindow.FreezePanes = True
>      objExcel.ActiveWindow.WindowState = xlMaximized
>
>      '-- Change column format
>      If InStr(stgPath, "Activity")<>  0 Then
>          objExcel.Columns("E:E").Select
>          objExcel.Selection.NumberFormat = "[$-409]h:mm AM/PM;@"
>          objExcel.Columns("G:G").Select
>          objExcel.Selection.NumberFormat = "[$-409]h:mm AM/PM;@"
>      End If
>
>      '-- Select upper left cell
>      objExcel.Range("A1").Select
>
>      '-- Save&  Quit
>      objWorkbook.Save
>      objWorkbook.Close
>      objExcel.Quit
>
>      Set objWorkbook = Nothing
>      Set objExcel = Nothing
>
>      Exit Sub
>      ErrEx.Bookmark = BOOKMARK_ONERROR
>
> End Sub
> '------------------
>
> -----Original Message-----
> From: dba-vb-bounces at databaseadvisors.com
> [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Monday, May 09, 2011 10:44 AM
> To: VBA
> Subject: [dba-VB] C# Excel automation
>
> We are trying to automate Excel from C# but we are unable to correctly close
> the excel object itself.  IOW it is still seen in the process list.
>
> Paul has found information about marshal.releasecomobject and is doing that
> for every object he is even touching but something is still not working.
>
> Can anyone provide a simple example of opening a workbook, and reading a set
> of cells out of a worksheet, then cleaning up and closing Excel.
>
> TIA for your assistance.
>
> --
> John W. Colby
> www.ColbyConsulting.com
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>
>
>
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>
>



More information about the dba-VB mailing list