导出数据到Excel表格

       群里今天有人问起:如何把取得的表数据导出到Excel表格里。我下来也做了些关于office开发的东西,研究了一个很直观也很笨的方法。大家可以参考一下看看,我的平台是Office 2003 ,.NET Framework 2.0, Visual C# 2.0做出来的,心下是那个文档的源码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace StuManerage
{
    public partial class ExportExcel : Form
    {
        private stuManerageAP.BaseAP apControl;
        private DataSet dataFromSql;

        public ExportExcel()
        {
            InitializeComponent();
            apControl = new stuManerageAP.BaseAP();
            dataFromSql = new DataSet();
        }

        private void beginSearch_Click(object sender, EventArgs e)
        {
            if (conditions.Text != null || conditions.Text != "")
            {
                dataFromSql = apControl.ReadBaseInfo(conditions.Text.Trim());
                foreach (DataRow sqlDataRow in dataFromSql.Tables[0].Rows)
                {
                    sqlData.Items.Add(sqlDataRow[0].ToString() + "\t\t" + sqlDataRow[1].ToString());
                }
            }
        }

        private void browseLocal_Click(object sender, EventArgs e)
        {
            SaveFileDialog excelSave = new SaveFileDialog();
            excelSave.DefaultExt = ".xls";
            excelSave.Filter = "Excel文档(*.xls)|*.xls";

            if (excelSave.ShowDialog() == DialogResult.OK)
                savePath.Text = excelSave.FileName;
        }

        private void beginExport_Click(object sender, EventArgs e)
        {
            panel1.Enabled = false;
            beginExport.Enabled = false;
            if (savePath.Text != "" || savePath.Text != null)
            {
                string sqlStr = "SELECT ''''+InfoBase.stuID";
                if(stuBirthc.Checked)
                    sqlStr += ",InfoBase.birth";
                if(stuClassIDc.Checked)
                    sqlStr += ",''''+InfoBase.classID";
                if(stuFatherc.Checked)
                    sqlStr += ",InfoHome.fatherName";
                if(stuGradec.Checked)
                    sqlStr += ",InfoBase.grage";
                if(stuHomeaddc.Checked)
                    sqlStr += ",InfoHome.homeaddress";
                if(stuMotherc.Checked)
                    sqlStr += ",InfoHome.motherName";
                if(stuNamec.Checked)
                    sqlStr += ",InfoBase.stuName";
                if(stuPIDc.Checked)
                    sqlStr += ",''''+InfoBase.stuPID";
                if(stuProc.Checked)
                    sqlStr += ",InfoBase.pro";
                if(stuSchoolc.Checked)
                    sqlStr += ",InfoBase.school";
                if(stuSexc.Checked)
                    sqlStr += ",InfoBase.stuSex";
                if(stuStatec.Checked)
                    sqlStr += ",InfoBase.states";
                sqlStr += " FROM InfoBase,InfoHome WHERE (InfoBase.stuID='";

                DataSet ds = new DataSet();
                string temp = "";

                foreach(object item in excelData.Items)
                {
                    if (excelData.Items.Count == 1)
                        temp += sqlStr + item.ToString() + "' AND InfoHome.stuID=InfoBase.stuID);";
                    else
                        temp += sqlStr + item.ToString() + "' AND InfoHome.stuID=InfoBase.stuID) UNION ";
                }
                temp = temp.Remove(temp.LastIndexOf("UNION"));
                ds = apControl.ReadExcelInfo(temp);
                progressBar1.Maximum = ds.Tables[0].Rows.Count;


                for (int i = 0; i < 1; i++)
                {
                    string staFile = savePath.Text;
                    System.Reflection.Missing miss = System.Reflection.Missing.Value;
                    Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
                    m_objExcel.Visible = false;
                    Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                    Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));
                    Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;

                    //向Excel文件中写入数据
                    Excel.Range er = null;
                    string[] dr = new string[26];
                    dr[0] = "A";
                    dr[1] = "B";
                    dr[2] = "C";
                    dr[3] = "D";
                    dr[4] = "E";
                    dr[5] = "F";
                    dr[6] = "G";
                    dr[7] = "H";
                    dr[8] = "I";
                    dr[9] = "J";
                    dr[10] = "K";
                    dr[11] = "L";
                    dr[12] = "M";
                    dr[13] = "N";
                    dr[14] = "O";
                    dr[15] = "P";
                    try
                    {
                        for(int x=1 ;x <= ds.Tables[0].Rows.Count ; x++)
                        {
                            for(int j=0 ; j <ds.Tables[0].Columns.Count ; j++)
                            {
                                er = m_objSheet.get_Range((object)(dr[j]+x.ToString()),miss);
                                er.Value2 = ds.Tables[0].Rows[x-1][j].ToString();
                            }
                            progressBar1.Value += 1;
                        }
                    }
                    catch(Exception erx)
                    {
                        MessageBox.Show(erx.Message);
                    }

                    m_objBook.SaveAs(staFile, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);

                    m_objBook.Close(false, miss, miss);
                    m_objBooks.Close();
                    m_objExcel.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(er);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBooks);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
                    GC.Collect();
                    progressBar1.Value = 0;
                }
            }
            panel1.Enabled = true;
            beginExport.Enabled = true;
        }

        private void exportToExcel_Click(object sender, EventArgs e)
        {
            foreach (object item in sqlData.SelectedItems)
            {
                excelData.Items.Add(item.ToString().Remove(item.ToString().IndexOf("\t")));
            }

        }

        private void trunBack_Click(object sender, EventArgs e)
        {
            //foreach (object item in excelData.SelectedItems)
            //{
            excelData.Items.Remove(excelData.SelectedItem);
            excelData.Refresh();
        //}
        }

        private void progressBar1_Click(object sender, EventArgs e)
        {

        }

        private void savePath_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

没有看明白的我请回复我,我将全力解决你的问题。

posted @ 2005-11-29 15:04  木目木  阅读(1058)  评论(4)    收藏  举报