我的CAD二次开发程序中的操作excel的部分

这是我的CAD二次开发程序中的操作excel的部分,特此分享

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data.OleDb;

namespace TkDraw
{
    public class CExcel
    {
        Excel.Application _myExcel;
        Excel.Workbook _myBook;
        string _myFileName;
        public CExcel()
        {
            _mStrFileS = "";
            _mStrFileTo = "";

            _myBook = null;
            _myExcel = null;
        }
        /// <summary>
        /// 显示Excel
        /// </summary>
        public void ShowExcel()
        {
            _myExcel.Visible = true;
        }
        /// <summary>
        /// 重命名工作表
        /// </summary>
        /// <param name="sheetNum">工作表序号,从左到右,从1开始</param>
        /// <param name="newSheetName">新的工作表名</param>
        public void ReNameSheet(int sheetNum, string newSheetName)
        {
            Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetNum];
            worksheet.Name = newSheetName;
        }
        /// <summary>
        /// 重命名工作表
        /// </summary>
        /// <param name="oldSheetName">原有工作表名</param>
        /// <param name="newSheetName">新的工作表名</param>
        public void ReNameSheet(string oldSheetName, string newSheetName)
        {
            Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[oldSheetName];
            worksheet.Name = newSheetName;
        }
        /// <summary>
        /// 新建工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void CreateWorkSheet(string sheetName)
        {
            Excel.Worksheet newWorksheet = (Excel.Worksheet)_myBook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            newWorksheet.Name = sheetName;
        }

        /// <summary>
        /// 激活工作表
        /// </summary>
        /// <param name="sheetName">工作表名</param>
        public void ActivateSheet(string sheetName)
        {
            Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetName];
            worksheet.Activate();
        }

        /// <summary>
        /// 激活工作表
        /// </summary>
        /// <param name="sheetNum">工作表序号</param>
        public void ActivateSheet(int sheetNum)
        {
            Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetNum];
            worksheet.Activate();
        }

        /// <summary>
        /// 打开一个存在的Excel文件
        /// </summary>
        /// <param name="fileName">Excel完整路径加文件名</param>
        public void Open(string fileName)
        {
            _myExcel = new Excel.Application();
            _myBook = _myExcel.Workbooks.Add(fileName);
            _myFileName = fileName;
        }
        #region 私有成员
        private string GetColumnName(int number)
        {
            int h, l;
            h = number / 26;
            l = number % 26;
            if (l == 0)
            {
                h -= 1;
                l = 26;
            }
            string s = GetLetter(h) + GetLetter(l);
            return s;
        }

        private string GetLetter(int number)
        {
            switch (number)
            {
                case 1:
                    return "A";
                case 2:
                    return "B";
                case 3:
                    return "C";
                case 4:
                    return "D";
                case 5:
                    return "E";
                case 6:
                    return "F";
                case 7:
                    return "G";
                case 8:
                    return "H";
                case 9:
                    return "I";
                case 10:
                    return "J";
                case 11:
                    return "K";
                case 12:
                    return "L";
                case 13:
                    return "M";
                case 14:
                    return "N";
                case 15:
                    return "O";
                case 16:
                    return "P";
                case 17:
                    return "Q";
                case 18:
                    return "R";
                case 19:
                    return "S";
                case 20:
                    return "T";
                case 21:
                    return "U";
                case 22:
                    return "V";
                case 23:
                    return "W";
                case 24:
                    return "X";
                case 25:
                    return "Y";
                case 26:
                    return "Z";
                default:
                    return "";
            }
        }
        #endregion


   

        /// <summary>
        /// 读取指定单元格数据
        /// </summary>
        /// <param name="row">行序号</param>
        /// <param name="column">列序号</param>
        /// <returns>该格的数据</returns>
        public string ReadData(int row, int column)
        {
            Excel.Range range = _myExcel.get_Range(_myExcel.Cells[row, column], _myExcel.Cells[row, column]);
            return range.Text.ToString();
        }
        public static System.Data.DataTable ReadExcel(string strFileName)
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source =" + strFileName + ";Extended Properties = Excel 8.0";
            OleDbConnection oleConnection = new OleDbConnection(strConnection);
            try
            {

                oleConnection.Open();

                OleDbCommand myCommand = oleConnection.CreateCommand();
                myCommand.CommandText = "select   *   from   [sheet1$]";
                OleDbDataAdapter myAdapter = new OleDbDataAdapter();
                myAdapter.SelectCommand = myCommand;
                myAdapter.Fill(dt);
            }
            catch (System.Exception)
            {
                throw new ApplicationException("读取数据源文件时出错");
            }
            finally
            {
                oleConnection.Close();
            }
            return dt;

        }
        public static void KillProcess()
        {
            try
            {
                foreach (Process process in Process.GetProcessesByName("EXCEL"))
                {

                    if (!process.CloseMainWindow())
                    {
                        process.Kill();
                    }

                }
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
        public static bool Copy(string strPathSource, string strPathTo)
        {
            if (!System.IO.File.Exists(strPathSource))
            {
                return false;
            }
            System.IO.FileStream fstr = new System.IO.FileStream(strPathSource, System.IO.FileMode.Open);
            int iLen = (int)fstr.Length;
            byte[] bf = new byte[iLen];
            fstr.Read(bf, 0, iLen);
            fstr.Close();
            System.IO.FileStream fstD = new System.IO.FileStream(strPathTo, System.IO.FileMode.Create);
            fstD.Write(bf, 0, iLen);
            fstD.Close();
            return true;
        }
        
        string _mStrFileS;
        string _mStrFileTo;
        bool _mBVisble;
        public bool SetPath(string strPathS, string strPathTo, bool bVisble)
        {
            if (System.IO.File.Exists(strPathS))
            {
                _mStrFileS = strPathS;
                _mStrFileTo = strPathTo;
                CExcel.Copy(strPathS, strPathTo);
                _mBVisble = bVisble;
                return true;
            }
            return false;
        }
        /// <summary>
        /// 删除sheet 不包含strsHave的项目
        /// </summary>strsHave
        /// <param name="strsHave"></param>
        public void DeleteSheet(List<string> strsHave)
        {
            object missing = System.Reflection.Missing.Value;
            if (_myBook == null)
            {
                _myExcel = new Excel.Application();
                _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                              missing, missing, missing, missing, missing, missing, missing, missing);
            }
            try
            {
                _myExcel.Visible = false;
                foreach (Excel.Worksheet sh in _myBook.Sheets)
                {

                    if (!strsHave.Contains(sh.Name))
                    {
                        sh.Visible = Excel.XlSheetVisibility.xlSheetHidden;

                    }

                }
            }
            catch
            {

            }


        }
        public void MageCell(int iStRow, int iStCol, int iLen)
        {
            object oo = false;


            _myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol + iLen]).Merge(oo);


        }
        public void TextSytle(int iStRow, int iStCol, string strSheet, string strSytleName)
        {
            object missing = System.Reflection.Missing.Value;
            if (_myBook == null)
            {
                _myExcel = new Excel.Application();
                _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                              missing, missing, missing, missing, missing, missing, missing, missing);
            }
            for (int i = 1; i <= _myBook.Worksheets.Count; i++)
            {

                Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets.get_Item(i);
                if (ews.Name == strSheet)
                {

                    ews.Activate();
                    break;
                }
            }
            _myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol]).Font.Name = strSytleName;   //行高


        }
        public void TextHigh(int iStRow, int iStCol, string strSheet, double dTextHigh)
        {
            object missing = System.Reflection.Missing.Value;
            if (_myBook == null)
            {
                _myExcel = new Excel.Application();
                _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                              missing, missing, missing, missing, missing, missing, missing, missing);
            }
            for (int i = 1; i <= _myBook.Worksheets.Count; i++)
            {

                Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
                if (ews.Name == strSheet)
                {

                    ews.Activate();
                    break;
                }
            }
            _myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol]).RowHeight = dTextHigh;   //行高


        }
        public void FillCell(int iStRow, int iStCol, string strShet, string strv)//开始行,开始列,表名,字符串数据
        {
            int i = 0;
            object missing = System.Reflection.Missing.Value;
            try
            {
                if (_myBook == null)
                {
                    _myExcel = new Excel.Application();
                    _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                  missing, missing, missing, missing, missing, missing, missing, missing);
                    _myExcel.Visible = _mBVisble;
                }
                for (i = 1; i <= _myBook.Worksheets.Count; i++)
                {

                    Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
                    if (ews.Name == strShet)  //如果表名相符,则激活此表
                    {

                        ews.Activate();
                        break;
                    }
                }
             
                _myExcel.Cells[iStRow, iStCol] = strv;
                _myExcel.Visible = _mBVisble;
            }
            catch
            {
                throw new Exception("错误");

            }

        }
      
        public void Close()
        {
            if (_myBook != null)
            {
                _myBook.Save();
                _myExcel.Quit();
                //throw new Exception("错误");
            }

        }
       
        public void Out(int iStRow, int iStCol, string strShet, System.Data.DataTable dt)
        {

            int i = 0;
            object missing = System.Reflection.Missing.Value;

            //打开新文件
            try
            {
                if (_myBook == null)
                {
                    _myExcel = new Excel.Application();
                    _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                  missing, missing, missing, missing, missing, missing, missing, missing);
                }

                _myExcel.Visible = _mBVisble;
                for (i = 1; i <= _myBook.Worksheets.Count; i++)
                {
                    Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
                    if (ews.Name == strShet)
                    {

                        ews.Activate();
                        break;
                    }
                }
                int iColC = dt.Columns.Count - 1;
                int irowC = dt.Rows.Count - 1;
                for (i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        _myExcel.Cells[iStRow + i, iStCol + j] = dt.Rows[i][j].ToString();
                    }
                }
                _myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow + irowC, iStCol + iColC]).Cells.Borders.LineStyle = 1;


            }
            catch
            {
                Close();
                throw new Exception("错误");

            }



        }
        /// <summary>
        /// 第ilen行的时候空一行
        /// </summary>
        /// <param name="iStRow"></param>
        /// <param name="iStCol"></param>
        /// <param name="strShet"></param>
        /// <param name="dt"></param>
        /// <param name="iLen"></param>
        public void Out(int iStRow, int iStCol, string strShet, System.Data.DataTable dt, int iLen, string strVh)
        {

            int i = 0;
            object missing = System.Reflection.Missing.Value;

            //打开新文件
            try
            {
                if (_myBook == null)
                {
                    _myExcel = new Excel.Application();
                    _myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
                  missing, missing, missing, missing, missing, missing, missing, missing);
                }

                _myExcel.Visible = _mBVisble;
                for (i = 1; i <= _myBook.Worksheets.Count; i++)
                {
                    Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
                    if (ews.Name == strShet)
                    {

                        ews.Activate();
                        break;
                    }
                }
                int iColC = dt.Columns.Count - 1;
                int irowC = dt.Rows.Count - 1;
                int icc = 0;
                int iRowkk = 0;
                int iCount = 0;

                for (i = 0; i < dt.Rows.Count; i++)
                {

                    if (dt.Rows[i].RowState == System.Data.DataRowState.Deleted)
                    {
                        continue;
                    }
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {

                        if (iCount == iLen)
                        {
                            _myExcel.get_Range(_myExcel.Cells[iStRow + i + icc - iLen, iStCol], _myExcel.Cells[iStRow + i + icc - 1, iStCol + iColC]).Cells.Borders.LineStyle = 1;
                            MageCell(iStRow + i + icc, iStCol, dt.Columns.Count - 1);
                            _myExcel.Cells[iStRow + i + icc, iStCol] = strVh;
                            _myExcel.get_Range(_myExcel.Cells[iStRow + i + icc, iStCol], _myExcel.Cells[iStRow + i + icc, iStCol]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                            iRowkk = iStRow + i + icc;
                            iCount = 0;
                            icc += 1;
                        }
                        _myExcel.Cells[iStRow + i + icc, iStCol + j] = dt.Rows[i][j].ToString();

                    }

                    if (i == dt.Rows.Count - 1 && iCount < iLen)
                    {
                        if (icc == 0)
                        {
                            iRowkk = iStRow - 1;
                        }
                        _myExcel.get_Range(_myExcel.Cells[iRowkk + 1, iStCol], _myExcel.Cells[iRowkk + iLen, iStCol + iColC]).Cells.Borders.LineStyle = 1;
                        //iStRow iRowkk

                        MageCell(iRowkk + iLen + 1, iStCol, dt.Columns.Count - 1);
                        _myExcel.Cells[iRowkk + iLen + 1, iStCol] = strVh;
                        _myExcel.get_Range(_myExcel.Cells[iRowkk + iLen + 1, iStCol], _myExcel.Cells[iRowkk + iLen + 1, iStCol]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

                    }
                    iCount++;
                }



            }
            catch
            {
                Close();
                throw new Exception("错误");

            }
        }
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值