I needed to create an Excel Spreadsheet with a Connection object and link a QueryTable to it. I could not find a good example of this so I thought I would share. Please drop me a note if you found this useful!
Code listing for sample (Copy Code):
private void createProdSheet(string topicText, bool debugView) { // Start a new workbook in Excel. string aProd = topicText; Microsoft.Office.Interop.Excel.Application oXL; Workbook oWB; Workbooks oWBS; Worksheet oTemplateSheet; Sheets oSheets; QueryTables oTables; QueryTable oTable; Range oRng; try { // Start Excel and get the Application object. oXL = new Microsoft.Office.Interop.Excel.Application(); oXL.Visible = true; oXL.ScreenUpdating = false; // get the workbooks collection and add a new Workbook to it. oWBS = oXL.Workbooks; oWB = oWBS.Add(); // Create a QueryTable that starts at cell A1. oSheets = oWB.Sheets; // by default when you create a new WB you get 3 sheets, get the first one oTemplateSheet = oSheets[1]; oRng = oTemplateSheet.get_Range("A1"); oTemplateSheet.Name = "ProductId Assignments"; // get the QueryTables collection oTables = oTemplateSheet.QueryTables; string SQLStr; // decide how much detail we want and use the appropriate stored procedure if (debugView) { SQLStr = "EXEC [dbo].[GetMergedPesIDReportForOpsByNameDetailed] @ProductFamily = N'" + aProd + "'"; } else { SQLStr = "EXEC [dbo].[GetMergedPesIDReportForOpsByName] @ProductFamily = N'" + aProd + "'"; } object aStrSQL = SQLStr; object connection = "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=STIProducts;Data Source=stieditor;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=JSANDERS6;Use Encryption for Data=False;Tag with column collation when possible=False"; // create a query table with the connection and SQL command oTable = oTables.Add(connection, oRng, aStrSQL); oTable.RefreshStyle = XlCellInsertionMode.xlInsertEntireRows; oTable.Refresh(false); //Remove the Connection I made because I don't want users refreshing the data (optional) oWB.Connections[1].Delete(); //Make sure Excel is visible and give the user control of Microsoft Excel's lifetime. oXL.Visible = true; oXL.ScreenUpdating = true; oXL.UserControl = true; } catch (Exception theEx) { MessageBox.Show(theEx.Message, "Error creating prodid sheet"); } oRng = null; oTable = null; oTables = null; oSheets = null; oTemplateSheet = null; oWB = null; oWBS = null; oXL = null; }