• C#与Excel的交互示例


    //这里加添加一个Excel对象的包装器。就是添加一个引用

    using System;

    using System.Drawing;

    using System.Collections;

    using System.ComponentModel;

    using System.Windows.Forms;

    namespace ExcelTest

    {

    /// <summary>

    /// Form3 的摘要说明。

    /// </summary>

    public class Form3 : System.Windows.Forms.Form

    {

    private System.Windows.Forms.Button button1;

    private System.Windows.Forms.ComboBox comboBox1;

    /// <summary>

    /// 必需的设计器变量。

    /// </summary>

    private System.ComponentModel.Container components = null;

    // 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 string m_strNorthwind = @"C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB";

    public Form3()

    {

    //

    // Windows 窗体设计器支持所必需的

    //

    InitializeComponent();

    //

    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码

    //

    }

    /// <summary>

    /// 清理所有正在使用的资源。

    /// </summary>

    protected override void Dispose( bool disposing )

    {

    if( disposing )

    {

    if(components != null)

    {

    components.Dispose();

    }

    }

    base.Dispose( disposing );

    }

    #region Windows 窗体设计器生成的代码

    /// <summary>

    /// 设计器支持所需的方法 - 不要使用代码编辑器修改

    /// 此方法的内容。

    /// </summary>

    private void InitializeComponent()

    {

    this.button1 = new System.Windows.Forms.Button();

    this.comboBox1 = new System.Windows.Forms.ComboBox();

    this.SuspendLayout();

    //

    // button1

    //

    this.button1.Location = new System.Drawing.Point(208, 136);

    this.button1.Name = "button1";

    this.button1.Size = new System.Drawing.Size(128, 32);

    this.button1.TabIndex = 0;

    this.button1.Text = "button1";

    this.button1.Click += new System.EventHandler(this.button1_Click);

    //

    // comboBox1

    //

    this.comboBox1.Location = new System.Drawing.Point(112, 40);

    this.comboBox1.Name = "comboBox1";

    this.comboBox1.Size = new System.Drawing.Size(376, 20);

    this.comboBox1.TabIndex = 1;

    this.comboBox1.Text = "comboBox1";

    //

    // Form3

    //

    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

    this.ClientSize = new System.Drawing.Size(544, 333);

    this.Controls.Add(this.comboBox1);

    this.Controls.Add(this.button1);

    this.Name = "Form3";

    this.Text = "Form3";

    this.Load += new System.EventHandler(this.Form3_Load);

    this.ResumeLayout(false);

    }

    #endregion

    [STAThread]

    static void Main()

    {

    Application.Run(new Form3());

    }

    private void Form3_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(Application.StartupPath + "\\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(Application.StartupPath + "\\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(Application.StartupPath + "\\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(Application.StartupPath + "\\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(Application.StartupPath + "\\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(

    Application.StartupPath + "\\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(Application.StartupPath + "\\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(Application.StartupPath + "\\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=" + Application.StartupPath + "\\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

    }

    }

  • 相关阅读:
    shell 知识点
    辅助字符串处理类:org.apache.commons.lang3.StringUtils
    post请求(headers里有属性)报错:Request header field xxx is not allowed by Access-Control-Allow-Headers in preflight response
    vue-cli 打包报错:Unexpected token: punc (()
    遍历对象,并对其中第一个(随机)进行处理
    JavaScript中类似PHP的uniqid()方法
    使用crypto-js的md5加密
    Yarn、MapReduce、spark、storm的关系
    hadoop 知识点
    spring cloud 知识点
  • 原文地址:https://www.cnblogs.com/victorgui/p/3989782.html
Copyright © 2020-2023  润新知