nicewon's blog

If you want to understand today,you have to research yesterday.The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself.

转载  将数据库中的数据导入excel 收藏

Create the Complete Sample Visual C# .NET Project

< type="text/javascript">loadTOCNode(2, 'summary');
1. Create a new folder named C:\ExcelData. The sample program will store Excel workbooks in this folder.
2. Create a new workbook for the sample to write to:
a. Start a new workbook in Excel.
b. On Sheet1 of the new workbook, type FirstName in cell A1 and LastName in cell B1.
c. Select A1:B1.
d. On the Insert menu, point to Name, and then click Define. Type the name MyTable and then click OK.
e. Save the workbook as C:\Exceldata\Book7.xls.
f. Quit Excel.
3. Start Microsoft Visual Studio 2005 or Microsoft Visual Studio .NET. On the File menu, point to New, and then click Project. Under Visual C# Projects or Visual C#, select Windows Application. By default, Form1 is created.
4. Add a reference to the Excel object library and the ADODB primary interop assembly. To do this, follow these steps:
a. On the Project menu, click Add Reference.
b. On the NET tab, locate ADODB, and then click Select.

Note In Visual Studio 2005, you do not have to click Select.
c. On the COM tab, locate Microsoft Excel 10.0 Object Library or Microsoft Excel 11.0 Object Library, and then click Select.

Note In Visual Studio 2005, you do not have to click Select.

Note If you are using Microsoft Excel 2002 and you have not already done so, Microsoft recommends that you download and then install the Microsoft Office XP Primary Interop Assemblies (PIAs). For more information about Office XP PIAs, click the following article number to view the article in the Microsoft Knowledge Base:
328912 (http://support.microsoft.com/kb/328912/) INFO: Microsoft Office XP PIAs Are Available for Download
d. In the Add References dialog box, click OK to accept your selections.
5. Add a Combo Box control and a Button control to Form1.
6. Add event handlers for the Form Load event and the Click events of the Button control:
a. In design view for Form1.cs, double-click Form1.

The handler for the Form's Load event is created and appears in Form1.cs.
b. On the View menu, click Designer to switch to design view.
c. Double-click Button1.

The handler for the button's Click event is created and appears in Form1.cs.
7. In Form1.cs, replace the following code:
private void Form1_Load(object sender, System.EventArgs e)
{

}

private void button1_Click(object sender, System.EventArgs e)
{

}
					
with:
        // Excel object references.
        private Excel.Application m_objExcel =  null;
        private Excel.Workbooks m_objBooks = null;
        private Excel._Workbook m_objBook = null;
        private Excel.Sheets m_objSheets = null;
        private Excel._Worksheet m_objSheet = null;
        private Excel.Range m_objRange =  null;
        private Excel.Font m_objFont = null;
        private Excel.QueryTables m_objQryTables = null;
        private Excel._QueryTable m_objQryTable = null;

        // Frequenty-used variable for optional arguments.
        private object m_objOpt = System.Reflection.Missing.Value;

        // Paths used by the sample code for accessing and storing data.
        private object m_strSampleFolder = "C:\\ExcelData\\";
        private string m_strNorthwind = "C:\\Program Files\\Microsoft Office\\Office10\\Samples\\Northwind.mdb";

        private void Form1_Load(object sender, System.EventArgs e)
        {			
            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

            comboBox1.Items.AddRange(new object[]{
                                                     "Use Automation to Transfer Data Cell by Cell ", 
                                                     "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", 
                                                     "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", 
                                                     "Use Automation to Create a QueryTable on a Worksheet", 
                                                     "Use the Clipboard", 
                                                     "Create a Delimited Text File that Excel Can Parse into Rows and Columns", 
                                                     "Transfer Data to a Worksheet Using ADO.NET "});
            comboBox1.SelectedIndex = 0;
            button1.Text = "Go!";
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            switch (comboBox1.SelectedIndex)
            {
                case 0 : Automation_CellByCell(); break;
                case 1 : Automation_UseArray(); break;
                case 2 : Automation_ADORecordset(); break;
                case 3 : Automation_QueryTable(); break;
                case 4 : Use_Clipboard(); break;
                case 5 : Create_TextFile(); break;
                case 6 : Use_ADONET(); break;
            }
	
            //Clean-up
            m_objFont = null;
            m_objRange = null;
            m_objSheet = null;
            m_objSheets = null;
            m_objBooks = null;
            m_objBook = null;
            m_objExcel = null;
            GC.Collect();

        }

        private void Automation_CellByCell()
        {
            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

            // Add data to cells of the first worksheet in the new workbook.
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
            m_objRange = m_objSheet.get_Range("A1", m_objOpt);
            m_objRange.set_Value(m_objOpt,"Last Name");
            m_objRange = m_objSheet.get_Range("B1", m_objOpt);
            m_objRange.set_Value(m_objOpt,"First Name");
            m_objRange = m_objSheet.get_Range("A2", m_objOpt);
            m_objRange.set_Value(m_objOpt,"Doe");
            m_objRange = m_objSheet.get_Range("B2", m_objOpt);
            m_objRange.set_Value(m_objOpt,"John");

            // Apply bold to cells A1:B1.
            m_objRange = m_objSheet.get_Range("A1", "B1");
            m_objFont = m_objRange.Font;
            m_objFont.Bold=true;

            // Save the workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

        }

        private void Automation_UseArray()
        {
            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

            // Create an array for the headers and add it to cells A1:C1.
            object[] objHeaders = {"Order ID", "Amount", "Tax"};
            m_objRange = m_objSheet.get_Range("A1", "C1");
            m_objRange.set_Value(m_objOpt,objHeaders);
            m_objFont = m_objRange.Font;
            m_objFont.Bold=true;

            // Create an array with 3 columns and 100 rows and add it to
            // the worksheet starting at cell A2.
            object[,] objData = new Object[100,3];
            Random rdm = new Random((int)DateTime.Now.Ticks);
            double nOrderAmt, nTax;
            for(int r=0;r<100;r++)
            {
                objData[r,0] = "ORD" + r.ToString("0000");
                nOrderAmt = rdm.Next(1000);
                objData[r,1] = nOrderAmt.ToString("c");
                nTax = nOrderAmt*0.07;
                objData[r,2] = nTax.ToString("c");
            }
            m_objRange = m_objSheet.get_Range("A2", m_objOpt);
            m_objRange = m_objRange.get_Resize(100,3);
            m_objRange.set_Value(m_objOpt,"objData");
            
            // Save the workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

        }

        private void Automation_ADORecordset()
        {
            // Create a Recordset from all the records in the Orders table.
            ADODB.Connection objConn = new ADODB.Connection();
            ADODB._Recordset objRS = null;
            objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                m_strNorthwind + ";", "", "", 0);
            objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
            object objRecAff;
            objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff, 
                (int)ADODB.CommandTypeEnum.adCmdTable);

            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

            // Get the Fields collection from the recordset and determine
            // the number of fields (or columns).
            System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();
            int nFields = objRS.Fields.Count;

            // Create an array for the headers and add it to the
            // worksheet starting at cell A1.
            object[] objHeaders = new object[nFields];
            ADODB.Field objField = null;
            for(int n=0;n<nFields;n++)
            {
                objFields.MoveNext();
                objField = (ADODB.Field)objFields.Current;
                objHeaders[n] = objField.Name;
            }
            m_objRange = m_objSheet.get_Range("A1", m_objOpt);
            m_objRange = m_objRange.get_Resize(1, nFields);
            m_objRange.set_Value(m_objOpt,objHeaders);
            m_objFont = m_objRange.Font;
            m_objFont.Bold=true;

            // Transfer the recordset to the worksheet starting at cell A2.
            m_objRange = m_objSheet.get_Range("A2", m_objOpt);
            m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);

            // Save the workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

            //Close the recordset and connection
            objRS.Close();
            objConn.Close();

        }

        private void Automation_QueryTable()
        {
            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

            // Create a QueryTable that starts at cell A1.
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
            m_objRange = m_objSheet.get_Range("A1", m_objOpt);
            m_objQryTables = m_objSheet.QueryTables;
            m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(
                "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                m_strNorthwind + ";", m_objRange, "Select * From Orders");
            m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
            m_objQryTable.Refresh(false);

            // Save the workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

        }

        private void Use_Clipboard()
        {
            // Copy a string to the clipboard.
            string sData = "FirstName\tLastName\tBirthdate\r\n"  +
                "Bill\tBrown\t2/5/85\r\n"  +
                "Joe\tThomas\t1/1/91";
            System.Windows.Forms.Clipboard.SetDataObject(sData);

            // Start a new workbook in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

            // Paste the data starting at cell A1.
            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
            m_objRange = m_objSheet.get_Range("A1", m_objOpt);
            m_objSheet.Paste(m_objRange, false);

            // Save the workbook and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

        }

        private void Create_TextFile()
        {
            // Connect to the data source.
            System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection( 
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");
            objConn.Open();

            // Execute a command to retrieve all records from the Employees  table.
            System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand( 
                "Select * From Employees", objConn);
            System.Data.OleDb.OleDbDataReader objReader;
            objReader = objCmd.ExecuteReader();


            // Create the FileStream and StreamWriter object to write 
            // the recordset contents to file.
            System.IO.FileStream fs = new System.IO.FileStream(
                m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);
            System.IO.StreamWriter sw = new System.IO.StreamWriter(
                fs, System.Text.Encoding.Unicode);

            // Write the field names (headers) as the first line in the text file.
            sw.WriteLine(objReader.GetName(0) +  "\t" + objReader.GetName(1) +
                "\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +
                "\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));

            // Write the first six columns in the recordset to a text file as
            // tab-delimited.
            while(objReader.Read()) 
            {
                for(int i=0;i<=5;i++)
                {
                    if(!objReader.IsDBNull(i))
                    {
                        string s;
                        s = objReader.GetDataTypeName(i);
                        if(objReader.GetDataTypeName(i)=="DBTYPE_I4")
                        {
                            sw.Write(objReader.GetInt32(i).ToString());
                        }
                        else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")
                        {
                            sw.Write(objReader.GetDateTime(i).ToString("d"));
                        }
                        else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")
                        {
                            sw.Write(objReader.GetString(i));
                        }
                    }
                    if(i<5) sw.Write("\t");
                }
                sw.WriteLine(); 
            }
            sw.Flush();	// Write the buffered data to the FileStream.

            // Close the FileStream.
            fs.Close();

            // Close the reader and the connection.
            objReader.Close();
            objConn.Close(); 

            // ==================================================================
            // Optionally, automate Excel to open the text file and save it in the
            // Excel workbook format.

            // Open the text file in Excel.
            m_objExcel = new Excel.Application();
            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
            m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1, 
                Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
                false, true, false, false, false, false, m_objOpt, m_objOpt, 
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

            m_objBook = m_objExcel.ActiveWorkbook;

            // Save the text file in the typical workbook format and quit Excel.
            m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal, 
                m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                m_objOpt, m_objOpt, m_objOpt);
            m_objBook.Close(false, m_objOpt, m_objOpt);
            m_objExcel.Quit();

        }

        private void Use_ADONET()
        {
            // Establish a connection to the data source.
            System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +
                "Book7.xls;Extended Properties=Excel 8.0;");
            objConn.Open();

            // Add two records to the table named 'MyTable'.
            System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
            objCmd.Connection = objConn;
            objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
                " values ('Bill', 'Brown')";
	
            objCmd.ExecuteNonQuery();
            objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
                " values ('Joe', 'Thomas')";
            objCmd.ExecuteNonQuery();


            // Close the connection.
            objConn.Close(); 

        } 

	}  // End Class
}// End namespace
					
Note You must change the code in Visual Studio 2005. By default, Visual C# adds one form to the project when you create a Windows Forms project. The form is named Form1. The two files that represent the form are named Form1.cs and Form1.designer.cs. You write the code in Form1.cs. The Form1.designer.cs file is where the Windows Forms Designer writes the code that implements all the actions that you performed by dragging and dropping controls from the Toolbox.

For more information about the Windows Forms Designer in Visual C# 2005, visit the following Microsoft Developer Network (MSDN) Web site:
http://msdn2.microsoft.com/en-us/library/ms173077.aspx (http://msdn2.microsoft.com/en-us/library/ms173077.aspx)
Note If you did not install Office to the default folder (C:\Program Files\Microsoft Office), modify the m_strNorthwind constant in the code sample to match your installation path for Northwind.mdb.
8. Add the following to the Using directives in Form1.cs:
	using System.Reflection;
	using System.Runtime.InteropServices;
	using Excel = Microsoft.Office.Interop.Excel;
					
9. Press F5 to build and run the sample.
 

发表于 @ 2007年08月30日 14:58:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:警惕面试中的12种高级错误 | 新一篇:asp.net与word文档在线

  • 发表评论
  • 评论内容:
  •  
Copyright © nicewon
Powered by CSDN Blog