测试

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.OracleClient;
using System.Text.RegularExpressions;
using System.Reflection;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace CKRL
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义一个reader全局的
        OracleDataReader reader = null; 
        public string JR;
        public string LK;
        public double Row9 = 0;
        public string SPDH;
        public string YS;
        public string XH;
        TimeSpan beforeTime;            //Excel启动之前时间
        TimeSpan afterTime;             //Excel启动之后时间

        private void Form1_Load(object sender, EventArgs e)
        {
            //链接数据库
            ComDB.OpenConn(ComConst.strConn);
            //获得焦点
            this.textBox1.Focus();

        }
 
        //关闭窗体
        protected override void WndProc(ref Message m)
        {
            const int WM_SYSCOMMAND = 0x0112;
            const int SC_CLOSE = 0xF060;
            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
            {
                //取消terbox1的验证事件
                this.textBox1.CausesValidation = false;
                ComDB.CloseConn();
                this.Close();
                return;
            }
            base.WndProc(ref m);
        }
        //关闭按钮
        public void GetCloesdForm()
        {
            DialogResult result = MessageBox.Show("是否要关闭 ?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
                this.Close();
            }
            else
            {
                return;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //调用这个类
            this.GetCloesdForm();
        }

        //限制框中输入类型
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar >= (char)Keys.D0 && e.KeyChar <= (char)Keys.D9 || e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            //少于5位补零
            textBox1.Text = textBox1.Text.ToString().PadLeft(5,'0');
            //如果焦点在关闭上推出函数
            if (button2.Focused)
            {
                return;
            }
            //捕获异常直接跳到catch
            try
            {
                if (this.textBox1.Text.ToString() != string.Empty)
                {
                    //检索数据库中数据
                    string SZBH = this.textBox1.Text.ToString().Trim();
                    string sql = "select A.SPDH as SPDH, B.SPM as  SPM,A.YS as YS,A.XH as XH,A.SZS as SZS,A.CHYDR AS CHYDR,C.ZKS as ZKS,F.SLM AS SLM,E.HYM AS HYM from SZ A  ";
                    sql = sql + "left join SPM B on (A.SPDH = B.Spdh and A.Ys = B.Ys and A.XH = B.Xh)";
                    sql = sql + "left join ZKF C on (A.SPDH = C.Spdh and A.Ys = C.Ys and A.XH = C.Xh)";
                    sql = sql + "left join SZ1 d on(a.szh = d.szh)";
                    sql = sql + "left join SLM f on(d.slbh = f.slbh)";
                    sql = sql + "left join HYM e on(d.hyh = e.hyh)";
                    sql = sql + "where A.SZH = '" + SZBH + "'";
                    reader = (OracleDataReader)ComDB.GetReader(sql);
                    //springd1初始化
                    this.fpSpread1.Sheets[0].RowCount = 0;
                    if (reader.Read())
                    {
                        SPDH = reader["SPDH"].ToString();
                        YS = reader["YS"].ToString();
                        XH = reader["XH"].ToString();
                        this.textBox2.Text = reader["SLM"].ToString();
                        this.textBox3.Text = reader["HYM"].ToString();
                        //显示数据库中的日期
                        string chyd = reader["CHYDR"].ToString().Substring(0, 4) + "-" + reader["CHYDR"].ToString().Substring(4, 2) + "-" + reader["CHYDR"].ToString().Substring(6, 2);
                        this.dateTimePicker2.Value = Convert.ToDateTime(chyd);

                        int i = 0;
                        do
                        {
                            //springd1加行
                            this.fpSpread1.Sheets[0].RowCount = this.fpSpread1.Sheets[0].RowCount + 1;
                            this.fpSpread1.Sheets[0].Cells[i, 0].Text = reader["SPDH"].ToString();
                            this.fpSpread1.Sheets[0].Cells[i, 1].Text = reader["SPM"].ToString();
                            this.fpSpread1.Sheets[0].Cells[i, 2].Text = reader["YS"].ToString();
                            this.fpSpread1.Sheets[0].Cells[i, 3].Text = reader["XH"].ToString();
                            this.fpSpread1.Sheets[0].Cells[i, 4].Text = reader["SZS"].ToString();
                            this.fpSpread1.Sheets[0].Cells[i, 5].Text = reader["ZKS"].ToString();


                            string SQL1 = "select sum(NVL(YCKS,0)) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                           "WHERE  A.SZH ='" + SZBH + "'AND A.SPDH ='" + reader["SPDH"].ToString() + "'AND A.YS ='" + reader["YS"].ToString() + "' AND A.XH ='" + reader["XH"].ToString() + "' ";
                            OracleDataReader reader1 = (OracleDataReader)ComDB.GetReader(SQL1);
                            if (reader1.Read())
                            {
                                this.fpSpread1.Sheets[0].Cells[i, 7].Text = reader1["YCKS"].ToString();
                            }
                            else
                            {
                                this.fpSpread1.Sheets[0].Cells[i, 7].Text = "0";
                            }


                            string A = this.dateTimePicker1.Value.Year.ToString() + dateTimePicker1.Value.Month.ToString().PadLeft(2, '0') + dateTimePicker1.Value.Day.ToString().PadLeft(2, '0');
                            string SQL2 = "select YCKS AS CKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                           "WHERE  G.CKRQ = '" + A + "' AND A.SZH ='" + SZBH + "'AND A.SPDH ='" + reader["SPDH"].ToString() + "'AND A.YS ='" + reader["YS"].ToString() + "' AND A.XH ='" + reader["XH"].ToString() + "'";
                            OracleDataReader reader2 = (OracleDataReader)ComDB.GetReader(SQL2);

                            if (reader2.Read())
                            {
                                //MessageBox.Show("该日已出库");
                                //int ss=Convert.ToInt32(reader2["CKS"].ToString())-Convert.ToInt32(reader1["YCKS"].ToString());
                                this.fpSpread1.Sheets[0].Cells[i, 6].Text = reader2["CKS"].ToString();

                                string SQL3 = "select NVL(sum(YCKS),0) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                              " WHERE  A.SZH ='" + SZBH + "' AND CKRQ < '" + A + "'and A.SPDH = '" + reader["SPDH"].ToString() + "' and " +
                                              " A.YS = '" + reader["YS"].ToString() + "' and A.XH = '" + reader["XH"].ToString() + "'";
                                OracleDataReader reader3 = (OracleDataReader)ComDB.GetReader(SQL3);
                                if (reader3.Read())
                                {
                                    this.fpSpread1.Sheets[0].Cells[i, 7].Text = reader3["YCKS"].ToString();

                                }
                                reader3.Close();
                                //string SQL4 = "select NVL(YCKS,0) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                //              " WHERE  A.SZH ='" + SZBH + "' AND CKRQ ='" + A + "'and A.SPDH = '" + reader["SPDH"].ToString() + "' and " +
                                //              " A.YS = '" + reader["YS"].ToString() + "' and A.XH = '" + reader["XH"].ToString() + "'";
                                //OracleDataReader reader4 = (OracleDataReader)ComDB.GetReader(SQL4);
                                string CKF = reader2["CKS"].ToString();
                                double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 6].Text) + Convert.ToDouble(CKF);
                                this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

                            }
                            else
                            {              //强制转化
                                double a = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 4].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 7].Text);
                                this.fpSpread1.Sheets[0].Cells[i, 6].Text = a.ToString();
                                double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 6].Text);
                                this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

                            }
                            reader2.Close();
                            reader1.Close();

                            // 垃圾回收,释放内存
                            GC.Collect();
                            string aa = this.fpSpread1.Sheets[0].Cells[i, 4].Text.Trim();

                            string bb = this.fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                            string cc = this.fpSpread1.Sheets[0].Cells[i, 7].Text.Trim();
                            double b = Convert.ToDouble(aa) - Convert.ToDouble(bb) - Convert.ToDouble(cc);
                            this.fpSpread1.Sheets[0].Cells[i, 8].Text = b.ToString();

                            //double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 7].Text);
                            //this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

                            i++;
                        } while (reader.Read());

                        //this.fpSpread1.Sheets[0].Cells[0,6].Text.Focus();
                    }
                    else
                    {
                        MessageBox.Show("没有查询到数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        this.textBox2.Text = "";
                        this.textBox3.Text = "";
                        this.fpSpread1.Sheets[0].RowCount = 0;
                        //光标回到textBox1中
                        this.textBox1.Focus();
                    }
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                Application.Exit();
            }
            reader.Close();
            GC.Collect();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //初始化表格
            this.textBox1.Text = string.Empty;
            this.textBox2.Text = string.Empty;
            this.textBox3.Text = string.Empty;
            this.fpSpread1.Sheets[0].RowCount = 0;
            JR = string.Empty;
            LK = string.Empty;
        }

        //回车光标换行
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13)
            {

                e.Handled = true;
                System.Windows.Forms.SendKeys.Send("{Tab}");

            }
        }

       //表中的离开事件
        private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
        {
            //取出当前光标所在行
            int Actrow = this.fpSpread1.Sheets[0].ActiveRowIndex;
            //取出当前光标所在列
            int Actcol = this.fpSpread1.Sheets[0].ActiveColumnIndex;

            LK = this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text;

            if (Actcol == 6)
            {
                if (LK != JR)
                {
                    if (this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text != "")
                    {
                        double Row8 = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 4].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 7].Text);
                        this.fpSpread1.Sheets[0].Cells[Actrow, 8].Text = Row8.ToString();

                        string SZBH = this.textBox1.Text.ToString().Trim();
                        string A = this.dateTimePicker1.Value.Year.ToString() + dateTimePicker1.Value.Month.ToString().PadLeft(2, '0') + dateTimePicker1.Value.Day.ToString().PadLeft(2, '0');
                        string SQL2 = "select YCKS AS CKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                       "WHERE  G.CKRQ = '" + A + "' AND A.SZH ='" + SZBH + "'AND A.SPDH ='" + SPDH + "'AND A.YS ='" + YS + "' AND A.XH ='" + XH + "'";

                        OracleDataReader reader2 = (OracleDataReader)ComDB.GetReader(SQL2);
                        if (reader2.Read())
                        {
                            string CKF = reader2["CKS"].ToString();
                            Row9 = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text) + Convert.ToDouble(CKF);
                            this.fpSpread1.Sheets[0].Cells[Actrow, 9].Text = Row9.ToString();
                        }
                        else
                        {
                            Row9 = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text);
                            this.fpSpread1.Sheets[0].Cells[Actrow, 9].Text = Row9.ToString();
                        }
                        reader2.Close();
                        // 垃圾回收,释放内存
                        GC.Collect();
                    }
                    else
                    {
                        // 锁定列,发送回车事件
                        if (this.fpSpread1.Sheets[0].Columns[e.NewColumn].Locked)
                        {
                            SendKeys.Send("{Enter}");
                        }
                    }
                }
                else
                {
                    if (this.fpSpread1.Sheets[0].Columns[e.NewColumn].Locked)
                    {
                        SendKeys.Send("{Enter}");
                    }
                }
            }
            else
            {
                if (this.fpSpread1.Sheets[0].Columns[e.NewColumn].Locked)
                {
                    SendKeys.Send("{Enter}");
                }
            }

        }

        private void fpSpread1_EnterCell(object sender, FarPoint.Win.Spread.EnterCellEventArgs e)
        {
            //取出当前光标所在行
            int Actrow = this.fpSpread1.Sheets[0].ActiveRowIndex;
            //取出当前光标所在列
            int Actcol = this.fpSpread1.Sheets[0].ActiveColumnIndex;
            if (Actcol == 6)
            {
                JR = this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text;
            }
            else                                
            {
                return;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("是否出库?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
                //将日期形状换成字符型
                string rq1 = "";
                string date = this.dateTimePicker1.Text;
                DateTime d = Convert.ToDateTime(date);
                d.ToShortDateString();
                rq1 = d.Year.ToString() + d.Month.ToString().Trim().PadLeft(2, '0') + d.Day.ToString().Trim().PadLeft(2, '0');

                string rq2 = "";
                string date2 = this.dateTimePicker2.Text;
                DateTime d2 = Convert.ToDateTime(date2);
                d2.ToShortDateString();
                rq2 = d2.Year.ToString() + d2.Month.ToString().Trim().PadLeft(2, '0') + d2.Day.ToString().Trim().PadLeft(2, '0');
                double KCS = 0;
                int Actrow = this.fpSpread1.Sheets[0].ActiveRowIndex;
                KCS = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[Actrow, 6].Text);
                if (KCS < 0)
                {
                    MessageBox.Show("库存不足", "提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                    return;

                }
                else
                {
                    if (Convert.ToInt32(rq1) < Convert.ToInt32(rq2))
                    {

                        DialogResult result1 = MessageBox.Show("是否提前出库 ?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (result == DialogResult.OK)
                        {
                            this.baocun();
                            MessageBox.Show("出库成功", "提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
                        }
                        else
                        {
                            return;
                        }

                    }
                    else
                    {
                        this.baocun();
                        MessageBox.Show("出库成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }

                }
            }
            else
            {
                return;
            }
           
        }


        public void baocun()
        {
            int count=this.fpSpread1.ActiveSheet.NonEmptyRowCount;
            for (int i = 0; i < count; i++)
            {
                string SPDH = this.fpSpread1.Sheets[0].Cells[i, 0].Text.ToString();
                string YS = this.fpSpread1.Sheets[0].Cells[i, 2].Text.ToString();
                string XH = this.fpSpread1.Sheets[0].Cells[i, 3].Text.ToString();
                string SZBH = this.textBox1.Text.ToString().Trim();

                string SZH1 = this.textBox1.Text.ToString().Trim();
                string CKRQ1 = this.dateTimePicker1.Value.Year.ToString() + dateTimePicker1.Value.Month.ToString().PadLeft(2, '0') + dateTimePicker1.Value.Day.ToString().PadLeft(2, '0');
                string SPDH1 = this.fpSpread1.Sheets[0].Cells[i, 0].Text;
                string YS1 = this.fpSpread1.Sheets[0].Cells[i, 2].Text;
                string XH1 = this.fpSpread1.Sheets[0].Cells[i, 3].Text;
                //更新在库数
                string SQL2 = "select YCKS AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                              "WHERE  A.SZH ='" + SZBH + "'AND A.SPDH ='" + SPDH + "'AND A.YS ='" + YS + "' AND A.XH ='" + XH + "' AND G.CKRQ = '" + CKRQ1 + "'";
                OracleDataReader reader2 = (OracleDataReader)ComDB.GetReader(SQL2);
                if (reader2.Read())
                {
                    string zksl = string.Empty;
                    zksl = fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                    String Z = "UPDATE  ZKF SET ZKS =ZKS-'" + zksl + "'+'" + reader2["YCKS"] + "' WHERE  SPDH ='" + SPDH1 + "' AND YS ='" + YS1 + "' AND XH = '" + XH1 + "'";
                    ComDB.ExecSQL(Z);
                    ComDB.CommitTran();
                }
                else
                {
                    string zksl = string.Empty;
                    zksl = fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                    String Z = "UPDATE  ZKF SET ZKS =ZKS-'" + zksl + "' WHERE  SPDH ='" + SPDH1 + "' AND YS ='" + YS1 + "' AND XH = '" + XH1 + "'";
                    ComDB.ExecSQL(Z);
                    ComDB.CommitTran();
                }
                reader2.Close();
                System.GC.Collect();
                //更新已出库数
                string sql = "SELECT YCKS FROM CKF A WHERE CKRQ = '" + CKRQ1 + "' AND SPDH ='" + SPDH1 + "' AND YS ='" + YS1 + "' AND XH = '" + XH1 + "' AND SZH ='" + SZH1 + "'";
                reader = (OracleDataReader)ComDB.GetReader(sql);
                if (reader.Read())
                {
                    string SQL1 = "select YCKS AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
                                  "WHERE  A.SZH ='" + SZBH + "'AND A.SPDH ='" + SPDH + "'AND A.YS ='" + YS + "' AND A.XH ='" + XH + "' AND G.CKRQ = '" + CKRQ1 + "'";
                    OracleDataReader reader3 = (OracleDataReader)ComDB.GetReader(SQL1);
                    if(reader3.Read())
                    {
                        string cksl = string.Empty;
                        cksl = fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                        String S = "UPDATE CKF SET YCKS =YCKS+'" + cksl + "'- '" + reader3["YCKS"] + "' " +
                        "WHERE CKRQ = '" + CKRQ1 + "' AND SPDH ='" + SPDH1 + "' AND YS ='" + YS1 + "' AND XH = '" + XH1 + "' AND SZH ='" + SZH1 + "'";//YCKS+
                        ComDB.ExecSQL(S);
                        ComDB.CommitTran();
                    }
                    else
                    {
                        string cksl = string.Empty;
                        cksl = fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                        String S = "UPDATE CKF SET YCKS =YCKS+'" + cksl + "'" +
                        "WHERE CKRQ = '" + CKRQ1 + "' AND SPDH ='" + SPDH1 + "' AND YS ='" + YS1 + "' AND XH = '" + XH1 + "' AND SZH ='" + SZH1 + "'";//YCKS+
                        ComDB.ExecSQL(S);
                        ComDB.CommitTran();
                    }
                    reader3.Close();
                    reader.Close();
                    System.GC.Collect();
                }
                else
                {
                    string cksl = string.Empty;
                    cksl = fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
                    String IS = "INSERT INTO CKF(CKRQ, SPDH ,YS ,XH, SZH ,YCKS) VALUES( '" + CKRQ1 + "','" + SPDH1 + "','" + YS1 + "','" + XH1 + "','" + SZH1 + "','" + cksl + "' )";
                    ComDB.ExecSQL(IS);//执行SQL语句
                    ComDB.CommitTran();//提交
                    reader.Close();
                    System.GC.Collect();
                }

            }
            //光标回到textBox1中
            this.textBox1.Focus();
        }

        private void button4_Click(object sender, EventArgs e)
        {
              DialogResult result = MessageBox.Show("是否预览?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
              if (result == DialogResult.OK)
              {
                  ComConst.CHRQ = this.dateTimePicker1.Value.Year.ToString() + this.dateTimePicker1.Value.Month.ToString().PadLeft(2, '0');
                  Form2 BS = new Form2();
                  BS.ShowDialog();
              }
              else
              {
                  return;
              }
        }
        /// <summary>
        /// 杀 EXCEL 进程
        /// </summary>
        public void KillExcelProcess()
        {
            try
            {
                Process[] myProcesses;
                TimeSpan startTime;
                myProcesses = Process.GetProcessesByName("Excel");

                //得不到Excel进程ID,暂时只能判断进程启动时间
                foreach (Process myProcess in myProcesses)
                {
                    startTime = myProcess.StartTime.TimeOfDay;

                    if (startTime > beforeTime && startTime < afterTime)
                    {
                        myProcess.Kill();
                    }
                }
            }
            catch (Exception ee)
            {
                //Error_logger.Error(this.ToString() + ":Error = ", ee);
            }
        }
        //打印表格事件
        public void GetEXCEL(string strCKRQ)
        {
            System.IO.Directory.CreateDirectory("D:\\当月出库表");
            //beforeTime = DateTime.Now.TimeOfDay;
            Excel.ApplicationClass excel = new Excel.ApplicationClass();
            //afterTime = DateTime.Now.TimeOfDay;

            Excel.Workbook workbook = excel.Workbooks.Open(Application.StartupPath + "\\Model\\GZQB.xls",
                                  Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                                  Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                                  Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets.get_Item(1);
            string strsql = "select A.SZH AS SZH,A.SPDH AS SPDH,B.SPM AS SPM,A.YS AS YS,A.XH AS XH,A.SZS AS SZS," +
                        "NVL(C.CHYDR,0) AS CHYDR,D.CKRQ AS CKRQ,NVL(D.YCKS,0) AS YCKS ,(NVL(A.SZS,0)-NVL(D.YCKS,0)) AS CYS " +   //,(NVL(A.SZS,0)-NVL(D.YCKS,0)) AS CYS
                        "from SZ A " +
                        "LEFT JOIN SPM B ON(A.SPDH = B.SPDH AND A.YS = B.YS AND A.XH  = B.XH) " +
                        "LEFT JOIN SZ1 C ON(A.SZH = C.SZH) " +
                        "LEFT JOIN CKF D ON(A.SPDH = D.SPDH AND A.YS = D.YS AND A.XH  = D.XH AND A.SZH = D.SZH) " +
                        "WHERE SUBSTR(D.CKRQ,0,6) = '" + strCKRQ + "' " +                                                       //截取字符串
                        "ORDER BY A.SZH,A.SPDH,B.SPM";

            //string C = this.dateTimePicker1.Value.Year.ToString() + dateTimePicker1.Value.Month.ToString().PadLeft(2, '0') + dateTimePicker1.Value.Day.ToString().PadLeft(2, '0');
            //string SQL1 = "select NVL(sum(YCKS),0) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
            //            "WHERE  '" + strCKRQ + "' < '" + C + "' ";


            string SZH = string.Empty;
            string SPDH = string.Empty;
            string SPM = string.Empty;
            string YS = string.Empty;
            string XH = string.Empty;
            string SZS = string.Empty;
            string CHYDR = string.Empty;
            string CKRQ = string.Empty;
            string YCKS = string.Empty;
            string CYS = string.Empty;
            string H = string.Empty;
            string M = string.Empty;
            string T = string.Empty;
            Double CYS1;
            worksheet = (Excel.Worksheet)workbook.Sheets[1];
            worksheet.Name = strCKRQ;                                                                    // sheet 名
            OracleDataReader reader = (OracleDataReader)ComDB.GetReader(strsql);             // FFD010 中的明细
            //OracleDataReader reader1 = (OracleDataReader)ComDB.GetReader(SQL1); 
            if (reader.Read())
            {
                worksheet.Cells[3, 1] = strCKRQ.Substring(0, 4) + "/" + strCKRQ.Substring(4, 2);   // 日期
                int i = 5;
                do
                {

                    if (i > 5 & reader["SZH"].ToString() == H & reader["SPM"].ToString() == M)
                    {
                        string A = reader["CHYDR"].ToString().Substring(0, 4) + "-" + reader["CHYDR"].ToString().Substring(4, 2) + "-" + reader["CHYDR"].ToString().Substring(6, 2);
                        string B = reader["CKRQ"].ToString().Substring(0, 4) + "-" + reader["CKRQ"].ToString().Substring(4, 2) + "-" + reader["CKRQ"].ToString().Substring(6, 2);
                        CYS1 = Convert.ToDouble(T) - Convert.ToDouble(reader["YCKS"].ToString());
                        worksheet.Cells[i, 1] = " ";                                 // 受注号
                        worksheet.Cells[i, 2] = " ";                                // 商品代号
                        worksheet.Cells[i, 3] = " ";                                 // 商品名
                        worksheet.Cells[i, 4] = " ";                                  // 颜色
                        worksheet.Cells[i, 5] = " ";                                  // 型号
                        worksheet.Cells[i, 6] = " ";                                 // 受注数
                        worksheet.Cells[i, 7] = " ";                                                        // 出库预订日
                        worksheet.Cells[i, 8] = B;                                                        // 出库入力日
                        worksheet.Cells[i, 9] = reader["YCKS"].ToString();                                // 出库数
                        worksheet.Cells[i, 10] = CYS1.ToString();//cys.ToString();               // 差异数
                        worksheet.get_Range("A" + i, "J" + i).Borders.LineStyle = 1;
                        worksheet.get_Range("A" + i, "J" + i).Font.Size = 9;
                        T = CYS1.ToString();
                    }
                    else
                    {

                        string A = reader["CHYDR"].ToString().Substring(0, 4) + "-" + reader["CHYDR"].ToString().Substring(4, 2) + "-" + reader["CHYDR"].ToString().Substring(6, 2);
                        string B = reader["CKRQ"].ToString().Substring(0, 4) + "-" + reader["CKRQ"].ToString().Substring(4, 2) + "-" + reader["CKRQ"].ToString().Substring(6, 2);
                        worksheet.Cells[i, 1] = reader["SZH"].ToString();                                 // 受注号
                        worksheet.Cells[i, 2] = reader["SPDH"].ToString();                                // 商品代号
                        worksheet.Cells[i, 3] = reader["SPM"].ToString();                                 // 商品名
                        worksheet.Cells[i, 4] = reader["YS"].ToString();                                  // 颜色
                        worksheet.Cells[i, 5] = reader["XH"].ToString();                                  // 型号
                        worksheet.Cells[i, 6] = reader["SZS"].ToString();                                 // 受注数
                        worksheet.Cells[i, 7] = A;                                                        // 出库预订日
                        worksheet.Cells[i, 8] = B;                                                        // 出库入力日
                        worksheet.Cells[i, 9] = reader["YCKS"].ToString();                                // 出库数
                        worksheet.Cells[i, 10] = reader["CYS"].ToString();//cys.ToString();               // 差异数
                        worksheet.get_Range("A" + i, "J" + i).Borders.LineStyle = 1;
                        worksheet.get_Range("A" + i, "J" + i).Font.Size = 9;
                        H = reader["SZH"].ToString();
                        M = reader["SPM"].ToString();
                        T = reader["CYS"].ToString();
                    }
                    i++;
                }
                while (reader.Read());
            }
            reader.Close();
            //reader1.Close();
            System.GC.Collect();
            worksheet = (Excel.Worksheet)workbook.Sheets[1];
            //worksheet.Delete();

            excel.Visible = true;
            DateTime dt = DateTime.Now;
            string shijian = DateTime.Now.Hour.ToString().PadLeft(2, '0') +
                                        DateTime.Now.Minute.ToString().PadLeft(2, '0') +
                                        DateTime.Now.Second.ToString().PadLeft(2, '0');
            string strDt = "当月出库数" + dt.ToString("yyyyMMdd") + shijian;
            string Save_Path = "D:\\当月出库表\\" + strDt + ".xls";
            excel.ActiveWorkbook.SaveAs(Save_Path,
                Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            //KillExcelProcess();
        }
        private void button5_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("是否要生成 EXCEL?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
               string RQ = this.dateTimePicker1.Value.Year.ToString() + this.dateTimePicker1.Value.Month.ToString().PadLeft(2, '0');
               this.GetEXCEL(RQ);
            }
            else
            {
                return;
            }
        }
     
        //离开事件
        private void dateTimePicker1_Leave(object sender, EventArgs e)
        {
        //    try
        //    {
        //        if (this.textBox1.Text.ToString() != string.Empty)
        //        {
        //            //检索数据库中数据
        //            string SZBH = this.textBox1.Text.ToString().Trim();
        //            string sql = "select A.SPDH as SPDH, B.SPM as  SPM,A.YS as YS,A.XH as XH,A.SZS as SZS,A.CHYDR AS CHYDR,C.ZKS as ZKS,F.SLM AS SLM,E.HYM AS HYM from SZ A  ";
        //            sql = sql + "left join SPM B on (A.SPDH = B.Spdh and A.Ys = B.Ys and A.XH = B.Xh)";
        //            sql = sql + "left join ZKF C on (A.SPDH = C.Spdh and A.Ys = C.Ys and A.XH = C.Xh)";
        //            sql = sql + "left join SZ1 d on(a.szh = d.szh)";
        //            sql = sql + "left join SLM f on(d.slbh = f.slbh)";
        //            sql = sql + "left join HYM e on(d.hyh = e.hyh)";
        //            sql = sql + "where A.SZH = '" + SZBH + "'";
        //            reader = (OracleDataReader)ComDB.GetReader(sql);
        //            //springd1初始化
        //            this.fpSpread1.Sheets[0].RowCount = 0;
        //            if (reader.Read())
        //            {
        //                this.textBox2.Text = reader["SLM"].ToString();
        //                this.textBox3.Text = reader["HYM"].ToString();
        //                //显示数据库中的日期
        //                string chyd = reader["CHYDR"].ToString().Substring(0, 4) + "-" + reader["CHYDR"].ToString().Substring(4, 2) + "-" + reader["CHYDR"].ToString().Substring(6, 2);
        //                this.dateTimePicker2.Value = Convert.ToDateTime(chyd);

        //                int i = 0;
        //                do
        //                {
        //                    //springd1加行
        //                    this.fpSpread1.Sheets[0].RowCount = this.fpSpread1.Sheets[0].RowCount + 1;
        //                    this.fpSpread1.Sheets[0].Cells[i, 0].Text = reader["SPDH"].ToString();
        //                    this.fpSpread1.Sheets[0].Cells[i, 1].Text = reader["SPM"].ToString();
        //                    this.fpSpread1.Sheets[0].Cells[i, 2].Text = reader["YS"].ToString();
        //                    this.fpSpread1.Sheets[0].Cells[i, 3].Text = reader["XH"].ToString();
        //                    this.fpSpread1.Sheets[0].Cells[i, 4].Text = reader["SZS"].ToString();
        //                    this.fpSpread1.Sheets[0].Cells[i, 5].Text = reader["ZKS"].ToString();


        //                    string SQL1 = "select sum(NVL(YCKS,0)) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
        //                                   "WHERE  A.SZH ='" + SZBH + "'AND A.SPDH ='" + reader["SPDH"].ToString() + "'AND A.YS ='" + reader["YS"].ToString() + "' AND A.XH ='" + reader["XH"].ToString() + "' ";
        //                    OracleDataReader reader1 = (OracleDataReader)ComDB.GetReader(SQL1);
        //                    if (reader1.Read())
        //                    {
        //                        this.fpSpread1.Sheets[0].Cells[i, 7].Text = reader1["YCKS"].ToString();
        //                    }
        //                    else
        //                    {
        //                        this.fpSpread1.Sheets[0].Cells[i, 7].Text = "0";
        //                    }


        //                    string A = this.dateTimePicker1.Value.Year.ToString() + dateTimePicker1.Value.Month.ToString().PadLeft(2, '0') + dateTimePicker1.Value.Day.ToString().PadLeft(2, '0');
        //                    string SQL2 = "select YCKS AS CKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
        //                                   "WHERE  G.CKRQ = '" + A + "' AND A.SZH ='" + SZBH + "'AND A.SPDH ='" + reader["SPDH"].ToString() + "'AND A.YS ='" + reader["YS"].ToString() + "' AND A.XH ='" + reader["XH"].ToString() + "'";
        //                    OracleDataReader reader2 = (OracleDataReader)ComDB.GetReader(SQL2);

        //                    if (reader2.Read())
        //                    {
        //                        //MessageBox.Show("该日已出库");
        //                        //int ss=Convert.ToInt32(reader2["CKS"].ToString())-Convert.ToInt32(reader1["YCKS"].ToString());
        //                        this.fpSpread1.Sheets[0].Cells[i, 6].Text = reader2["CKS"].ToString();

        //                        string SQL3 = "select NVL(sum(YCKS),0) AS YCKS from SZ A LEFT JOIN CKF G ON(A.SZH = G.SZH AND A.SPDH = G.SPDH AND A.YS = G.YS AND A.XH = G.XH) " +
        //                                      " WHERE  A.SZH ='" + SZBH + "' AND CKRQ < '" + A + "'and A.SPDH = '" + reader["SPDH"].ToString() + "' and " +
        //                                      " A.YS = '" + reader["YS"].ToString() + "' and A.XH = '" + reader["XH"].ToString() + "'";
        //                        OracleDataReader reader3 = (OracleDataReader)ComDB.GetReader(SQL3);
        //                        if (reader3.Read())
        //                        {
        //                            this.fpSpread1.Sheets[0].Cells[i, 7].Text = reader3["YCKS"].ToString();

        //                        }
        //                        reader3.Close();
        //                        double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 7].Text);
        //                        this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

        //                    }
        //                    else
        //                    {              //强制转化
        //                        double a = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 4].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 7].Text);
        //                        this.fpSpread1.Sheets[0].Cells[i, 6].Text = a.ToString();
        //                        double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 6].Text);
        //                        this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

        //                    }
        //                    reader2.Close();
        //                    reader1.Close();

        //                    // 垃圾回收,释放内存
        //                    GC.Collect();
        //                    string aa = this.fpSpread1.Sheets[0].Cells[i, 4].Text.Trim();
        //                    string bb = this.fpSpread1.Sheets[0].Cells[i, 6].Text.Trim();
        //                    string cc = this.fpSpread1.Sheets[0].Cells[i, 7].Text.Trim();
        //                    double b = Convert.ToDouble(aa) - Convert.ToDouble(bb) - Convert.ToDouble(cc);
        //                    this.fpSpread1.Sheets[0].Cells[i, 8].Text = b.ToString();

        //                    //double c = Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 5].Text) - Convert.ToDouble(this.fpSpread1.Sheets[0].Cells[i, 7].Text);
        //                    //this.fpSpread1.Sheets[0].Cells[i, 9].Text = c.ToString();

        //                    i++;
        //                } while (reader.Read());
        //                reader.Close();
        //                GC.Collect();
        //                //this.fpSpread1.Sheets[0].Cells[0,6].Text.Focus();
        //            }
        //            else
        //            {
        //                MessageBox.Show("没有查询到数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        //                this.textBox2.Text = "";
        //                this.textBox3.Text = "";
        //                this.fpSpread1.Sheets[0].RowCount = 0;
        //                //光标回到textBox1中
        //                this.textBox1.Focus();
        //            }
        //        }
        //        else
        //        {
        //            return;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        MessageBox.Show(ex.ToString());
        //        Application.Exit();
            //}
        }

        private void fpSpread1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            //if (e.KeyCode.ToString() == "Tab")
            //{
            //    e.KeyCode = (Keys)Keys.Down;
            //}
        }

    }
}

原文地址:https://www.cnblogs.com/zzh1236/p/1313597.html